physics crap
parent
104f7d66bd
commit
b8be655261
200
game-lib.js
200
game-lib.js
|
@ -1180,36 +1180,40 @@ GameLib.D3.Physics.World = function(
|
||||||
* Physics Rigid Body Superset
|
* Physics Rigid Body Superset
|
||||||
* @param id
|
* @param id
|
||||||
* @param name
|
* @param name
|
||||||
* @param position
|
|
||||||
* @param rotation
|
|
||||||
* @param scale
|
|
||||||
* @param shapes GameLib.D3.Physics.Shape[]
|
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Physics.RigidBody = function(
|
GameLib.D3.Physics.RigidBody = function(
|
||||||
id,
|
id,
|
||||||
name,
|
name
|
||||||
position,
|
|
||||||
rotation,
|
|
||||||
scale,
|
|
||||||
shapes
|
|
||||||
) {
|
) {
|
||||||
this.position = new this.Vector3(0,0,0);
|
this.bodyObject = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Physics Rigid Body Vehicle Superset
|
* Physics Rigid Body Vehicle Superset
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Physics.RigidBody.Vehicle = function() {
|
GameLib.D3.Physics.Vehicle = function(
|
||||||
|
) {
|
||||||
|
this.vehicleObject = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Physics Shape Superset
|
* Physics Shape Superset
|
||||||
* @constructor
|
* @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
|
* Physics Convex Hull Shape Superset
|
||||||
|
@ -2647,19 +2651,173 @@ GameLib.D3.prototype.loadScene = function(gameLibScene, onLoaded, computeNormals
|
||||||
// Physics
|
// Physics
|
||||||
// ---------------
|
// ---------------
|
||||||
|
|
||||||
GameLib.D3.Physics.World.prototype.AddRigidBody = function(
|
GameLib.D3.Physics.Shape.prototype.Update = function(
|
||||||
body
|
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) {
|
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(
|
GameLib.D3.Physics.World.prototype.AddVehicle = function(
|
||||||
vehicle
|
vehicle // note: this is the cannon vehicle...
|
||||||
) {
|
) {
|
||||||
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
if(this.engineType == GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||||
vehicle.addToWorld(this.worldObject);
|
vehicle.vehicleObject.addToWorld(this.worldObject);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2951,8 +3109,10 @@ GameLib.D3.Game.prototype.ProcessPhysics = function (
|
||||||
var body = pair.physicsBody;
|
var body = pair.physicsBody;
|
||||||
|
|
||||||
if(mesh) {
|
if(mesh) {
|
||||||
mesh.position.copy(body.position);
|
if(physicsWorld.engineType === GameLib.D3.Physics.Engine.TYPE_CANNON) {
|
||||||
mesh.quaternion.copy(body.quaternion);
|
mesh.position.copy(body.bodyObject.position);
|
||||||
|
mesh.quaternion.copy(body.bodyObject.quaternion);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue