-------------------------------------------------------------------------------- -- Function......... : setupWheels -- Author........... : -- Description...... : -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- function Car.setupWheels ( ) -------------------------------------------------------------------------------- local s = application.getCurrentUserScene ( ) if ( s ~= nil ) then local o1 = scene.createRuntimeObject ( s, this.sWheelModel ( ) ) local o2 = scene.createRuntimeObject ( s, this.sWheelModel ( ) ) local o3 = scene.createRuntimeObject ( s, this.sWheelModel ( ) ) local o4 = scene.createRuntimeObject ( s, this.sWheelModel ( ) ) if ( o1 == nil ) then log.error ( "could not create car wheel 1 !" ) end if ( o2 == nil ) then log.error ( "could not create car wheel 2 !" ) end if ( o3 == nil ) then log.error ( "could not create car wheel 3 !" ) end if ( o4 == nil ) then log.error ( "could not create car wheel 4 !" ) end this.hWheelBL ( o1 ) this.hWheelBR ( o2 ) this.hWheelFL ( o3 ) this.hWheelFR ( o4 ) local o = this.getObject ( ) local rx, ry, rz = object.getRotation ( o, object.kGlobalSpace ) local tx, ty, tz = object.getTranslation ( o, object.kGlobalSpace ) local xx, xy, xz = object.getXAxis ( o, object.kGlobalSpace ) local yx, yy, yz = object.getYAxis ( o, object.kGlobalSpace ) local zx, zy, zz = object.getZAxis ( o, object.kGlobalSpace ) local offsetX = 0.75 local offsetY = 0.15 local offsetFZ = 1.275 local offsetBZ = 1.475 object.setRotation ( o1, rx, ry, rz, object.kGlobalSpace ) object.rotate ( o1, 0, 180, 0, object.kGlobalSpace ) object.setTranslation ( o1, tx, ty, tz, object.kGlobalSpace ) object.translate ( o1, -offsetX * xx, -offsetX * xy, -offsetX * xz, object.kGlobalSpace ) object.translate ( o1, -offsetY * yx, -offsetY * yy, -offsetY * yz, object.kGlobalSpace ) object.translate ( o1, offsetBZ * zx, offsetBZ * zy, offsetBZ * zz, object.kGlobalSpace ) object.setRotation ( o2, rx, ry, rz, object.kGlobalSpace ) object.setTranslation ( o2, tx, ty, tz, object.kGlobalSpace ) object.translate ( o2, offsetX * xx, offsetX * xy, offsetX * xz, object.kGlobalSpace ) object.translate ( o2, -offsetY * yx, -offsetY * yy, -offsetY * yz, object.kGlobalSpace ) object.translate ( o2, offsetBZ * zx, offsetBZ * zy, offsetBZ * zz, object.kGlobalSpace ) object.setRotation ( o3, rx, ry, rz, object.kGlobalSpace ) object.rotate ( o3, 0, 180, 0, object.kGlobalSpace ) object.setTranslation ( o3, tx, ty, tz, object.kGlobalSpace ) object.translate ( o3, -offsetX * xx, -offsetX * xy, -offsetX * xz, object.kGlobalSpace ) object.translate ( o3, -offsetY * yx, -offsetY * yy, -offsetY * yz, object.kGlobalSpace ) object.translate ( o3, -offsetFZ * zx, -offsetFZ * zy, -offsetFZ * zz, object.kGlobalSpace ) object.setRotation ( o4, rx, ry, rz, object.kGlobalSpace ) object.setTranslation ( o4, tx, ty, tz, object.kGlobalSpace ) object.translate ( o4, offsetX * xx, offsetX * xy, offsetX * xz, object.kGlobalSpace ) object.translate ( o4, -offsetY * yx, -offsetY * yy, -offsetY * yz, object.kGlobalSpace ) object.translate ( o4, -offsetFZ * zx, -offsetFZ * zy, -offsetFZ * zz, object.kGlobalSpace ) local wheelRadius = 0.4 local wheelMass = this.nWheelMass ( ) local wheelFrictionF = 1.1 local wheelFrictionB = 1.0 local wheelDampingL = 0.95 local wheelDampingA = 0.95 local wheelAngleLimitMin = 0 local wheelAngleLimitMax = 0 local wheelAngleLimitCFM = 0.0030 local wheelAngleLimitERP = 0.4000 local wheelSuspensionCFM = 0.0003 local wheelSuspensionERP = 0.2000 local wheelOffsetX = 0 if ( dynamics.createSphereBody ( o1, wheelRadius ) ) then dynamics.setMass ( o1, wheelMass ) dynamics.enableDynamics ( o1, false ) dynamics.enableCollisions ( o1, false ) dynamics.enableGravity ( o1, false ) dynamics.setLinearDamping ( o1, wheelDampingL ) dynamics.setAngularDamping ( o1, wheelDampingA ) dynamics.setFriction ( o1, wheelFrictionB ) dynamics.setBounce ( o1, 0.00 ) if ( dynamics.createHinge2Joint ( o, o1, "Wheel1" ) ) then local x, y, z = object.getTranslation ( o1, object.kGlobalSpace ) dynamics.setHinge2JointAnchor ( o, "Wheel1", x + xx * wheelOffsetX, y + xy * wheelOffsetX, z + xz * wheelOffsetX, object.kGlobalSpace ) dynamics.setHinge2JointAxis1 ( o, "Wheel1", yx, yy, yz, object.kGlobalSpace ) dynamics.setHinge2JointAxis2 ( o, "Wheel1", xx, xy, xz, object.kGlobalSpace ) dynamics.setHinge2JointAxis1AngleLimitMin ( o, "Wheel1", wheelAngleLimitMin ) dynamics.setHinge2JointAxis1AngleLimitMax ( o, "Wheel1", wheelAngleLimitMax ) dynamics.setHinge2JointAxis1AngleLimitCFM ( o, "Wheel1", wheelAngleLimitCFM ) dynamics.setHinge2JointAxis1AngleLimitERP ( o, "Wheel1", wheelAngleLimitERP ) dynamics.setHinge2JointAxis1SuspensionCFM ( o, "Wheel1", wheelSuspensionCFM ) dynamics.setHinge2JointAxis1SuspensionERP ( o, "Wheel1", wheelSuspensionERP ) end end if ( dynamics.createSphereBody ( o2, wheelRadius ) ) then dynamics.setMass ( o2, wheelMass ) dynamics.enableDynamics ( o2, false ) dynamics.enableCollisions ( o2, false ) dynamics.enableGravity ( o2, false ) dynamics.setLinearDamping ( o2, wheelDampingL ) dynamics.setAngularDamping ( o2, wheelDampingA ) dynamics.setFriction ( o2, wheelFrictionB ) dynamics.setBounce ( o2, 0.00 ) if ( dynamics.createHinge2Joint ( o, o2, "Wheel2" ) ) then local x, y, z = object.getTranslation ( o2, object.kGlobalSpace ) dynamics.setHinge2JointAnchor ( o, "Wheel2", x - xx * wheelOffsetX, y - xy * wheelOffsetX, z - xz * wheelOffsetX, object.kGlobalSpace ) dynamics.setHinge2JointAxis1 ( o, "Wheel2", yx, yy, yz, object.kGlobalSpace ) dynamics.setHinge2JointAxis2 ( o, "Wheel2", xx, xy, xz, object.kGlobalSpace ) dynamics.setHinge2JointAxis1AngleLimitMin ( o, "Wheel2", wheelAngleLimitMin ) dynamics.setHinge2JointAxis1AngleLimitMax ( o, "Wheel2", wheelAngleLimitMax ) dynamics.setHinge2JointAxis1AngleLimitCFM ( o, "Wheel2", wheelAngleLimitCFM ) dynamics.setHinge2JointAxis1AngleLimitERP ( o, "Wheel2", wheelAngleLimitERP ) dynamics.setHinge2JointAxis1SuspensionCFM ( o, "Wheel2", wheelSuspensionCFM ) dynamics.setHinge2JointAxis1SuspensionERP ( o, "Wheel2", wheelSuspensionERP ) end end if ( dynamics.createSphereBody ( o3, wheelRadius ) ) then dynamics.setMass ( o3, wheelMass ) dynamics.enableDynamics ( o3, false ) dynamics.enableCollisions ( o3, false ) dynamics.enableGravity ( o3, false ) dynamics.setLinearDamping ( o3, wheelDampingL ) dynamics.setAngularDamping ( o3, wheelDampingA ) dynamics.setFriction ( o3, wheelFrictionF ) dynamics.setBounce ( o3, 0.00 ) if ( dynamics.createHinge2Joint ( o, o3, "Wheel3" ) ) then local x, y, z = object.getTranslation ( o3, object.kGlobalSpace ) dynamics.setHinge2JointAnchor ( o, "Wheel3", x + xx * wheelOffsetX, y + xy * wheelOffsetX, z + xz * wheelOffsetX, object.kGlobalSpace ) dynamics.setHinge2JointAxis1 ( o, "Wheel3", yx, yy, yz, object.kGlobalSpace ) dynamics.setHinge2JointAxis2 ( o, "Wheel3", xx, xy, xz, object.kGlobalSpace ) dynamics.setHinge2JointAxis1AngleLimitMin ( o, "Wheel3", wheelAngleLimitMin ) dynamics.setHinge2JointAxis1AngleLimitMax ( o, "Wheel3", wheelAngleLimitMax ) dynamics.setHinge2JointAxis1AngleLimitCFM ( o, "Wheel3", wheelAngleLimitCFM ) dynamics.setHinge2JointAxis1AngleLimitERP ( o, "Wheel3", wheelAngleLimitERP ) dynamics.setHinge2JointAxis1SuspensionCFM ( o, "Wheel3", wheelSuspensionCFM ) dynamics.setHinge2JointAxis1SuspensionERP ( o, "Wheel3", wheelSuspensionERP ) end end if ( dynamics.createSphereBody ( o4, wheelRadius ) ) then dynamics.setMass ( o4, wheelMass ) dynamics.enableDynamics ( o4, false ) dynamics.enableCollisions ( o4, false ) dynamics.enableGravity ( o4, false ) dynamics.setLinearDamping ( o4, wheelDampingL ) dynamics.setAngularDamping ( o4, wheelDampingA ) dynamics.setFriction ( o4, wheelFrictionF ) dynamics.setBounce ( o4, 0.00 ) if ( dynamics.createHinge2Joint ( o, o4, "Wheel4" ) ) then local x, y, z = object.getTranslation ( o4, object.kGlobalSpace ) dynamics.setHinge2JointAnchor ( o, "Wheel4", x - xx * wheelOffsetX, y - xy * wheelOffsetX, z - xz * wheelOffsetX, object.kGlobalSpace ) dynamics.setHinge2JointAxis1 ( o, "Wheel4", yx, yy, yz, object.kGlobalSpace ) dynamics.setHinge2JointAxis2 ( o, "Wheel4", xx, xy, xz, object.kGlobalSpace ) dynamics.setHinge2JointAxis1AngleLimitMin ( o, "Wheel4", wheelAngleLimitMin ) dynamics.setHinge2JointAxis1AngleLimitMax ( o, "Wheel4", wheelAngleLimitMax ) dynamics.setHinge2JointAxis1AngleLimitCFM ( o, "Wheel4", wheelAngleLimitCFM ) dynamics.setHinge2JointAxis1AngleLimitERP ( o, "Wheel4", wheelAngleLimitERP ) dynamics.setHinge2JointAxis1SuspensionCFM ( o, "Wheel4", wheelSuspensionCFM ) dynamics.setHinge2JointAxis1SuspensionERP ( o, "Wheel4", wheelSuspensionERP ) end end end -------------------------------------------------------------------------------- end --------------------------------------------------------------------------------