r3-legacy/src/game-lib-game.js

106 lines
3.4 KiB
JavaScript
Raw Normal View History

2016-10-14 12:32:53 +02:00
GameLib.D3.Game = function (
) {
this.scenes = {};
this.physicsWorlds = [];
this.sceneToPhysicsWorldsMap = {};
};
GameLib.D3.Game.prototype.AddScene = function(
scene
) {
this.scenes[scene.name] = scene;
};
GameLib.D3.Game.prototype.AddPhysicsWorld = function(
physicsWorld
) {
this.physicsWorlds.push(physicsWorld);
};
GameLib.D3.Game.prototype.LinkPhysicsWorldToScene = function(
physicsWorld,
scene
) {
this.sceneToPhysicsWorldsMap[scene.name] = this.sceneToPhysicsWorldsMap[scene.name] || [];
this.sceneToPhysicsWorldsMap[scene.name].push(physicsWorld);
};
GameLib.D3.Game.prototype.GetPhysicsWorldsForScene = function (
scene
) {
return this.sceneToPhysicsWorldsMap[scene.name];
};
GameLib.D3.Game.prototype.ProcessPhysics = function (
timestep
) {
for(var s in this.sceneToPhysicsWorldsMap) {
var physicsWorldArray = this.sceneToPhysicsWorldsMap[s];
var scene = this.scenes[s];
if(scene && physicsWorldArray) {
for(var i = 0, l = physicsWorldArray.length; i < l; i++) {
var physicsWorld = physicsWorldArray[i];
physicsWorld.Step(timestep);
for(var p in physicsWorld.linkedPairs) {
var pair = physicsWorld.linkedPairs[p];
var mesh = pair.threeMesh;
var body = pair.physicsBody;
if(mesh) {
if(physicsWorld.engineType === GameLib.D3.Physics.TYPE_CANNON) {
var quaternion = new THREE.Quaternion();
quaternion.copy(body.rigidBodyInstance.quaternion);
var quaternionCopy = quaternion.clone();
var position = new THREE.Vector3();
position.copy(body.rigidBodyInstance.position);
if(mesh.permutate) {
if(mesh.permutate.offset) {
if(mesh.permutate.offset.quaternion) {
var offsetQuaternion = new THREE.Quaternion();
offsetQuaternion.copy(mesh.permutate.offset.quaternion);
quaternion = quaternion.multiply(offsetQuaternion).normalize();
}
if(mesh.permutate.offset.position) {
var offsetPosition = new THREE.Vector3();
offsetPosition.copy(mesh.permutate.offset.position);
//position = position.add(offsetPosition);
position = position.add(offsetPosition.applyQuaternion(quaternionCopy));
}
}
}
mesh.position.copy(position);
mesh.quaternion.copy(quaternion);
}
}
}
}
}
}
};
GameLib.D3.Game.prototype.LinkPair = function (
threeMesh,
physicsBody,
physicsWorld
) {
physicsWorld.linkedPairs = physicsWorld.linkedPairs || [];
physicsWorld.linkedPairs.push({
threeMesh : threeMesh,
physicsBody : physicsBody
});
};