physics crap
parent
104f7d66bd
commit
b8be655261
212
game-lib.js
212
game-lib.js
|
@ -1180,36 +1180,40 @@ GameLib.D3.Physics.World = function(
|
|||
* Physics Rigid Body Superset
|
||||
* @param id
|
||||
* @param name
|
||||
* @param position
|
||||
* @param rotation
|
||||
* @param scale
|
||||
* @param shapes GameLib.D3.Physics.Shape[]
|
||||
* @constructor
|
||||
*/
|
||||
GameLib.D3.Physics.RigidBody = function(
|
||||
id,
|
||||
name,
|
||||
position,
|
||||
rotation,
|
||||
scale,
|
||||
shapes
|
||||
name
|
||||
) {
|
||||
this.position = new this.Vector3(0,0,0);
|
||||
this.bodyObject = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Physics Rigid Body Vehicle Superset
|
||||
* @constructor
|
||||
*/
|
||||
GameLib.D3.Physics.RigidBody.Vehicle = function() {
|
||||
|
||||
GameLib.D3.Physics.Vehicle = function(
|
||||
) {
|
||||
this.vehicleObject = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Physics Shape Superset
|
||||
* @constructor
|
||||
*/
|
||||
GameLib.D3.Physics.Shape = function() {};
|
||||
GameLib.D3.Physics.Shape = function(
|
||||
shapeObject, // Physics engine specific
|
||||
shapeType
|
||||
) {
|
||||
this.shapeObject = shapeObject;
|
||||
this.shapeType = shapeType;
|
||||
this.scale = new GameLib.D3.Vector3(1, 1, 1);
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.Shape.TYPE_SPHERE = 1;
|
||||
GameLib.D3.Physics.Shape.TYPE_BOX = 2;
|
||||
GameLib.D3.Physics.Shape.TYPE_TRIMESH = 3;
|
||||
|
||||
/**
|
||||
* Physics Convex Hull Shape Superset
|
||||
|
@ -1708,11 +1712,11 @@ GameLib.D3.prototype.fixWindingOrder = function(faces, orientationEdge) {
|
|||
*/
|
||||
if (
|
||||
(triangleEdge.triangle.v0 == triangleEdge.edge.x &&
|
||||
triangleEdge.triangle.v1 == triangleEdge.edge.y) ||
|
||||
triangleEdge.triangle.v1 == triangleEdge.edge.y) ||
|
||||
(triangleEdge.triangle.v1 == triangleEdge.edge.x &&
|
||||
triangleEdge.triangle.v2 == triangleEdge.edge.y) ||
|
||||
triangleEdge.triangle.v2 == triangleEdge.edge.y) ||
|
||||
(triangleEdge.triangle.v2 == triangleEdge.edge.x &&
|
||||
triangleEdge.triangle.v0 == triangleEdge.edge.y)
|
||||
triangleEdge.triangle.v0 == triangleEdge.edge.y)
|
||||
) {
|
||||
var backupV = triangleEdge.triangle.v1;
|
||||
triangleEdge.triangle.v1 = triangleEdge.triangle.v2;
|
||||
|
@ -2400,7 +2404,7 @@ GameLib.D3.prototype.loadScene = function(gameLibScene, onLoaded, computeNormals
|
|||
for (var m = 0; m < gameLibScene.meshes.length; m++) {
|
||||
|
||||
var mesh = gameLibScene.meshes[m];
|
||||
|
||||
|
||||
console.log("loading mesh " + mesh.name);
|
||||
|
||||
var geometry = new this.THREE.Geometry();
|
||||
|
@ -2544,7 +2548,7 @@ GameLib.D3.prototype.loadScene = function(gameLibScene, onLoaded, computeNormals
|
|||
var result = this.Q.all(threeMaterialLoaders).then(
|
||||
function(gl3d, mesh, geometry) {
|
||||
return function(materials) {
|
||||
|
||||
|
||||
console.log("loaded all materials maps (" + materials.length + ")");
|
||||
|
||||
/**
|
||||
|
@ -2647,19 +2651,173 @@ GameLib.D3.prototype.loadScene = function(gameLibScene, onLoaded, computeNormals
|
|||
// Physics
|
||||
// ---------------
|
||||
|
||||
GameLib.D3.Physics.World.prototype.AddRigidBody = function(
|
||||
body
|
||||
GameLib.D3.Physics.Shape.prototype.Update = function(
|
||||
physicsWorld
|
||||
) {
|
||||
if(physicsWorld.engineType === GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
if(this.shapeType === GameLib.D3.Physics.Shape.TYPE_TRIMESH) {
|
||||
this.shapeObject.setScale(new CANNON.Vec3(this.scale.x, this.scale.y, this.scale.z));
|
||||
this.shapeObject.scale.x = this.scale.x;
|
||||
this.shapeObject.scale.y = this.scale.y;
|
||||
this.shapeObject.scale.z = this.scale.z;
|
||||
this.shapeObject.updateAABB();
|
||||
this.shapeObject.updateNormals();
|
||||
this.shapeObject.updateEdges();
|
||||
this.shapeObject.updateBoundingSphereRadius();
|
||||
this.shapeObject.updateTree();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.AddShape = function(
|
||||
shape, // d3.physics.shape
|
||||
rigidBody
|
||||
) {
|
||||
shape.shape = shape;
|
||||
|
||||
if(this.engineType === GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
rigidBody.bodyObject.addShape(shape.shapeObject);
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.CreateRigidVehicle = function(
|
||||
chassisBody // Physics.RigidBody
|
||||
) {
|
||||
var rigidVehicle = new GameLib.D3.Physics.Vehicle();
|
||||
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
var vehicle = new CANNON.RigidVehicle({
|
||||
chassisBody: chassisBody.bodyObject
|
||||
});
|
||||
rigidVehicle.vehicleObject = vehicle;
|
||||
return rigidVehicle;
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.AddWheel = function(
|
||||
vehicle,
|
||||
rigidBody,
|
||||
position,
|
||||
axis,
|
||||
direction
|
||||
) {
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
this.worldObject.addBody(body);
|
||||
vehicle.vehicleObject.addWheel({
|
||||
body: rigidBody.bodyObject,
|
||||
position: new CANNON.Vec3(position.x, position.y, position.z),
|
||||
axis: new CANNON.Vec3(axis.x, axis.y, axis.z),
|
||||
direction: new CANNON.Vec3(direction.x, direction.y, direction.z)
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.Vehicle.prototype.GetWheelInfo = function(
|
||||
|
||||
) {
|
||||
return this.vehicleObject.wheelBodies;
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.CreateRigidBody = function(
|
||||
mass,
|
||||
friction,
|
||||
position,
|
||||
quaternion,
|
||||
velocity,
|
||||
angularVelocity,
|
||||
linearDamping,
|
||||
angularDamping,
|
||||
allowSleep,
|
||||
sleepSpeedLimit,
|
||||
sleepTimeLimit,
|
||||
collisionFilterGroup,
|
||||
collisionFilterMask,
|
||||
fixedRotation,
|
||||
shape
|
||||
) {
|
||||
|
||||
var rigidBody = new GameLib.D3.Physics.RigidBody(0, "null");
|
||||
|
||||
position = position || new GameLib.D3.Vector3();
|
||||
velocity = velocity || new GameLib.D3.Vector3();
|
||||
angularVelocity = angularVelocity || new GameLib.D3.Vector3();
|
||||
quaternion = quaternion || new GameLib.D3.Vector4(0, 0, 0, 1);
|
||||
mass = typeof mass == "undefined" ? 0 : mass;
|
||||
friction = typeof friction == "undefined" ? 5 : friction;
|
||||
linearDamping = typeof linearDamping == "undefined" ? 0.01 : linearDamping;
|
||||
angularDamping = typeof angularDamping == "undefined" ? 0.01 : angularDamping;
|
||||
allowSleep = typeof allowSleep == "undefined" ? true : allowSleep;
|
||||
sleepSpeedLimit = typeof sleepSpeedLimit == "undefined" ? 0.1 : sleepSpeedLimit;
|
||||
sleepTimeLimit = typeof sleepTimeLimit == "undefined" ? 1.0 : sleepTimeLimit;
|
||||
collisionFilterGroup = typeof collisionFilterGroup == "undefined" ? 1 : collisionFilterGroup;
|
||||
collisionFilterMask = typeof collisionFilterMask == "undefined" ? 1 : collisionFilterMask;
|
||||
fixedRotation = typeof fixedRotation == "undefined" ? false : fixedRotation;
|
||||
shape = typeof shape == "undefined" ? null : shape;
|
||||
|
||||
|
||||
// Create the bodyObject
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
rigidBody.bodyObject = new CANNON.Body(
|
||||
{
|
||||
mass: mass,
|
||||
friction: friction,
|
||||
position: new CANNON.Vec3(position.x, position.y, position.z),
|
||||
velocity: new CANNON.Vec3(velocity.x, velocity.y, velocity.z),
|
||||
quaternion: new CANNON.Quaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w),
|
||||
angularVelocity: new CANNON.Vec3(angularVelocity.x, angularVelocity.y, angularVelocity.z),
|
||||
linearDamping: linearDamping,
|
||||
angularDamping: angularDamping,
|
||||
allowSleep: allowSleep,
|
||||
sleepSpeedLimit: sleepSpeedLimit,
|
||||
sleepTimeLimit: sleepTimeLimit,
|
||||
collisionFilterGroup: collisionFilterGroup,
|
||||
collisionFilterMask: collisionFilterMask,
|
||||
fixedRotation: fixedRotation,
|
||||
shape: shape
|
||||
}
|
||||
);
|
||||
|
||||
return rigidBody;
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.CreateTriMeshShape = function(
|
||||
vertices, // flat list of floats
|
||||
indices // float list of floats
|
||||
) {
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
return new GameLib.D3.Physics.Shape(new CANNON.Trimesh(vertices, indices), GameLib.D3.Physics.Shape.TYPE_TRIMESH);
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.CreateSphereShape = function (
|
||||
radius
|
||||
) {
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
return new GameLib.D3.Physics.Shape(new CANNON.Sphere(radius), GameLib.D3.Physics.Shape.TYPE_SPHERE);
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.CreateBoxShape = function(
|
||||
halfExtensions // vec3
|
||||
) {
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
return new GameLib.D3.Physics.Shape(new CANNON.Box(new CANNON.Vec3(halfExtensions.x, halfExtensions.y, halfExtensions.z)), GameLib.D3.Physics.Shape.TYPE_BOX);
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.AddRigidBody = function(
|
||||
rigidBody // Physics.RigidBody
|
||||
) {
|
||||
if(this.engineType === GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
this.worldObject.addBody(rigidBody.bodyObject);
|
||||
}
|
||||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.AddVehicle = function(
|
||||
vehicle
|
||||
vehicle // note: this is the cannon vehicle...
|
||||
) {
|
||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
vehicle.addToWorld(this.worldObject);
|
||||
vehicle.vehicleObject.addToWorld(this.worldObject);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2672,7 +2830,7 @@ GameLib.D3.Physics.World.prototype.Step = function(
|
|||
};
|
||||
|
||||
GameLib.D3.Physics.World.prototype.GetIndexedVertices = function(
|
||||
triangleMeshShape
|
||||
triangleMeshShape
|
||||
) {
|
||||
|
||||
if(this.engine.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
|
@ -2951,8 +3109,10 @@ GameLib.D3.Game.prototype.ProcessPhysics = function (
|
|||
var body = pair.physicsBody;
|
||||
|
||||
if(mesh) {
|
||||
mesh.position.copy(body.position);
|
||||
mesh.quaternion.copy(body.quaternion);
|
||||
if(physicsWorld.engineType === GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||
mesh.position.copy(body.bodyObject.position);
|
||||
mesh.quaternion.copy(body.bodyObject.quaternion);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue