Spaces:
Running
Running
| /** | |
| * SEA3D - Rigid Body | |
| * @author Sunag / http://www.sunag.com.br/ | |
| */ | |
| ; | |
| // | |
| // Sphere | |
| // | |
| SEA3D.Sphere = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.radius = data.readFloat(); | |
| }; | |
| SEA3D.Sphere.prototype.type = "sph"; | |
| // | |
| // Box | |
| // | |
| SEA3D.Box = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.width = data.readFloat(); | |
| this.height = data.readFloat(); | |
| this.depth = data.readFloat(); | |
| }; | |
| SEA3D.Box.prototype.type = "box"; | |
| // | |
| // Cone | |
| // | |
| SEA3D.Cone = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.radius = data.readFloat(); | |
| this.height = data.readFloat(); | |
| }; | |
| SEA3D.Cone.prototype.type = "cone"; | |
| // | |
| // Capsule | |
| // | |
| SEA3D.Capsule = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.radius = data.readFloat(); | |
| this.height = data.readFloat(); | |
| }; | |
| SEA3D.Capsule.prototype.type = "cap"; | |
| // | |
| // Cylinder | |
| // | |
| SEA3D.Cylinder = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.radius = data.readFloat(); | |
| this.height = data.readFloat(); | |
| }; | |
| SEA3D.Cylinder.prototype.type = "cyl"; | |
| // | |
| // Convex Geometry | |
| // | |
| SEA3D.ConvexGeometry = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.geometry = sea3d.getObject( data.readUInt() ); | |
| this.subGeometryIndex = data.readUByte(); | |
| }; | |
| SEA3D.ConvexGeometry.prototype.type = "gs"; | |
| // | |
| // Triangle Geometry | |
| // | |
| SEA3D.TriangleGeometry = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.geometry = sea3d.getObject( data.readUInt() ); | |
| this.subGeometryIndex = data.readUByte(); | |
| }; | |
| SEA3D.TriangleGeometry.prototype.type = "sgs"; | |
| // | |
| // Compound | |
| // | |
| SEA3D.Compound = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.compounds = []; | |
| var count = data.readUByte(); | |
| for ( var i = 0; i < count; i ++ ) { | |
| this.compounds.push( { | |
| shape: sea3d.getObject( data.readUInt() ), | |
| transform: data.readMatrix() | |
| } ); | |
| } | |
| }; | |
| SEA3D.Compound.prototype.type = "cmps"; | |
| // | |
| // Physics | |
| // | |
| SEA3D.Physics = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.attrib = data.readUShort(); | |
| this.shape = sea3d.getObject( data.readUInt() ); | |
| if ( this.attrib & 1 ) this.target = sea3d.getObject( data.readUInt() ); | |
| else this.transform = data.readMatrix(); | |
| if ( this.attrib & 2 ) this.offset = data.readMatrix(); | |
| if ( this.attrib & 4 ) this.scripts = data.readScriptList( sea3d ); | |
| if ( this.attrib & 16 ) this.attributes = sea3d.getObject( data.readUInt() ); | |
| }; | |
| SEA3D.Physics.prototype.readTag = function ( kind, data, size ) { | |
| }; | |
| // | |
| // Rigidy Body Base | |
| // | |
| SEA3D.RigidBodyBase = function ( name, data, sea3d ) { | |
| SEA3D.Physics.call( this, name, data, sea3d ); | |
| if ( this.attrib & 32 ) { | |
| this.linearDamping = data.readFloat(); | |
| this.angularDamping = data.readFloat(); | |
| } else { | |
| this.linearDamping = 0; | |
| this.angularDamping = 0; | |
| } | |
| this.mass = data.readFloat(); | |
| this.friction = data.readFloat(); | |
| this.restitution = data.readFloat(); | |
| }; | |
| SEA3D.RigidBodyBase.prototype = Object.create( SEA3D.Physics.prototype ); | |
| SEA3D.RigidBodyBase.prototype.constructor = SEA3D.RigidBodyBase; | |
| // | |
| // Rigidy Body | |
| // | |
| SEA3D.RigidBody = function ( name, data, sea3d ) { | |
| SEA3D.RigidBodyBase.call( this, name, data, sea3d ); | |
| data.readTags( this.readTag.bind( this ) ); | |
| }; | |
| SEA3D.RigidBody.prototype = Object.create( SEA3D.RigidBodyBase.prototype ); | |
| SEA3D.RigidBody.prototype.constructor = SEA3D.RigidBody; | |
| SEA3D.RigidBody.prototype.type = "rb"; | |
| // | |
| // Car Controller | |
| // | |
| SEA3D.CarController = function ( name, data, sea3d ) { | |
| SEA3D.RigidBodyBase.call( this, name, data, sea3d ); | |
| this.suspensionStiffness = data.readFloat(); | |
| this.suspensionCompression = data.readFloat(); | |
| this.suspensionDamping = data.readFloat(); | |
| this.maxSuspensionTravelCm = data.readFloat(); | |
| this.frictionSlip = data.readFloat(); | |
| this.maxSuspensionForce = data.readFloat(); | |
| this.dampingCompression = data.readFloat(); | |
| this.dampingRelaxation = data.readFloat(); | |
| var count = data.readUByte(); | |
| this.wheel = []; | |
| for ( var i = 0; i < count; i ++ ) { | |
| this.wheel[ i ] = new SEA3D.CarController.Wheel( data, sea3d ); | |
| } | |
| data.readTags( this.readTag.bind( this ) ); | |
| }; | |
| SEA3D.CarController.Wheel = function ( data, sea3d ) { | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.attrib = data.readUShort(); | |
| this.isFront = ( this.attrib & 1 ) != 0; | |
| if ( this.attrib & 2 ) { | |
| this.target = sea3d.getObject( data.readUInt() ); | |
| } | |
| if ( this.attrib & 4 ) { | |
| this.offset = data.readMatrix(); | |
| } | |
| this.pos = data.readVector3(); | |
| this.dir = data.readVector3(); | |
| this.axle = data.readVector3(); | |
| this.radius = data.readFloat(); | |
| this.suspensionRestLength = data.readFloat(); | |
| }; | |
| SEA3D.CarController.prototype = Object.create( SEA3D.RigidBodyBase.prototype ); | |
| SEA3D.CarController.prototype.constructor = SEA3D.CarController; | |
| SEA3D.CarController.prototype.type = "carc"; | |
| // | |
| // Constraints | |
| // | |
| SEA3D.Constraints = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| this.attrib = data.readUShort(); | |
| this.disableCollisionsBetweenBodies = this.attrib & 1 != 0; | |
| this.targetA = sea3d.getObject( data.readUInt() ); | |
| this.pointA = data.readVector3(); | |
| if ( this.attrib & 2 ) { | |
| this.targetB = sea3d.getObject( data.readUInt() ); | |
| this.pointB = data.readVector3(); | |
| } | |
| }; | |
| // | |
| // P2P Constraint | |
| // | |
| SEA3D.P2PConstraint = function ( name, data, sea3d ) { | |
| this.name = name; | |
| this.data = data; | |
| this.sea3d = sea3d; | |
| SEA3D.Constraints.call( this, name, data, sea3d ); | |
| }; | |
| SEA3D.P2PConstraint.prototype = Object.create( SEA3D.Constraints.prototype ); | |
| SEA3D.P2PConstraint.prototype.constructor = SEA3D.P2PConstraint; | |
| SEA3D.P2PConstraint.prototype.type = "p2pc"; | |
| // | |
| // Hinge Constraint | |
| // | |
| SEA3D.HingeConstraint = function ( name, data, sea3d ) { | |
| SEA3D.Constraints.call( this, name, data, sea3d ); | |
| this.axisA = data.readVector3(); | |
| if ( this.attrib & 1 ) { | |
| this.axisB = data.readVector3(); | |
| } | |
| if ( this.attrib & 4 ) { | |
| this.limit = { | |
| low: data.readFloat(), | |
| high: data.readFloat(), | |
| softness: data.readFloat(), | |
| biasFactor: data.readFloat(), | |
| relaxationFactor: data.readFloat() | |
| }; | |
| } | |
| if ( this.attrib & 8 ) { | |
| this.angularMotor = { | |
| velocity: data.readFloat(), | |
| impulse: data.readFloat() | |
| }; | |
| } | |
| }; | |
| SEA3D.HingeConstraint.prototype = Object.create( SEA3D.Constraints.prototype ); | |
| SEA3D.HingeConstraint.prototype.constructor = SEA3D.HingeConstraint; | |
| SEA3D.HingeConstraint.prototype.type = "hnec"; | |
| // | |
| // Cone Twist Constraint | |
| // | |
| SEA3D.ConeTwistConstraint = function ( name, data, sea3d ) { | |
| SEA3D.Constraints.call( this, name, data, sea3d ); | |
| this.axisA = data.readVector3(); | |
| if ( this.attrib & 1 ) { | |
| this.axisB = data.readVector3(); | |
| } | |
| if ( this.attrib & 4 ) { | |
| this.limit = { | |
| swingSpan1: data.readFloat(), | |
| swingSpan2: data.readFloat(), | |
| twistSpan: data.readFloat(), | |
| softness: data.readFloat(), | |
| biasFactor: data.readFloat(), | |
| relaxationFactor: data.readFloat() | |
| }; | |
| } | |
| }; | |
| SEA3D.ConeTwistConstraint.prototype = Object.create( SEA3D.Constraints.prototype ); | |
| SEA3D.ConeTwistConstraint.prototype.constructor = SEA3D.ConeTwistConstraint; | |
| SEA3D.ConeTwistConstraint.prototype.type = "ctwc"; | |
| // | |
| // Extension | |
| // | |
| SEA3D.File.setExtension( function () { | |
| // PHYSICS | |
| this.addClass( SEA3D.Sphere ); | |
| this.addClass( SEA3D.Box ); | |
| this.addClass( SEA3D.Cone ); | |
| this.addClass( SEA3D.Capsule ); | |
| this.addClass( SEA3D.Cylinder ); | |
| this.addClass( SEA3D.ConvexGeometry ); | |
| this.addClass( SEA3D.TriangleGeometry ); | |
| this.addClass( SEA3D.Compound ); | |
| this.addClass( SEA3D.RigidBody ); | |
| this.addClass( SEA3D.P2PConstraint ); | |
| this.addClass( SEA3D.HingeConstraint ); | |
| this.addClass( SEA3D.ConeTwistConstraint ); | |
| this.addClass( SEA3D.CarController ); | |
| } ); | |