Python Vehicle Script
From Physics Simulation Wiki
#Bullet Vehicle Simulation Test
#requires latest 2.42 (pre) release
import PhysicsConstraints
import GameLogic
cont = GameLogic.getCurrentController()
chassis = cont.getOwner()
#keep the vehicle active, otherwise simulation stops:
chassis.applyImpulse([0.,0.,0.],[0.,0.,0.])
PhysicsConstraints.setDebugMode(1)
#print dir(PhysicsConstraints)
if (chassis.init == 0):
chassis.init = 1
physicsid = chassis.getPhysicsId()
vehicle = PhysicsConstraints.createConstraint(physicsid,0,11)
chassis.cid = vehicle.getConstraintId()
print chassis.cid
vehicle = PhysicsConstraints.getVehicleConstraint(chassis.cid)
attachHeightLocal = 0.
waX = chassis.wheelAttachX
wheelAttachPosLocal = [waX ,2.0, attachHeightLocal]
wheelAttachDirLocal = [0,0,-1]
wheelAxleLocal = [-1,0,0]
suspensionRestLength = 0.8
wheelRadius = 0.5
hasSteering = 1
act0 = cont.getActuator("wheel0")
wheel0 = act0.getOwner()
vehicle.addWheel(wheel0,wheelAttachPosLocal,wheelAttachDirLocal,wheelAxleLocal,suspensionRestLength,wheelRadius,hasSteering)
act1 = cont.getActuator("wheel1")
wheel1 = act1.getOwner()
wheelAttachPosLocal = [-waX ,2.0, attachHeightLocal]
vehicle.addWheel(wheel1,wheelAttachPosLocal,wheelAttachDirLocal,wheelAxleLocal,suspensionRestLength,wheelRadius,hasSteering)
hasSteering = 0
wheelAttachPosLocal = [waX,-1.7, attachHeightLocal]
act2 = cont.getActuator("wheel2")
wheel2 = act2.getOwner()
vehicle.addWheel(wheel2,wheelAttachPosLocal,wheelAttachDirLocal,wheelAxleLocal,suspensionRestLength,wheelRadius,hasSteering)
wheelAttachPosLocal = [-waX ,-1.7, attachHeightLocal]
act3 = cont.getActuator("wheel3")
wheel3 = act3.getOwner()
vehicle.addWheel(wheel3,wheelAttachPosLocal,wheelAttachDirLocal,wheelAxleLocal,suspensionRestLength,wheelRadius,hasSteering)
else:
vehicle = PhysicsConstraints.getVehicleConstraint(chassis.cid)
vehicle.setSteeringValue(chassis.steer,0)
vehicle.setSteeringValue(chassis.steer,1)
vehicle.applyEngineForce(chassis.force*.4,0)
vehicle.applyEngineForce(chassis.force*.4,1)
vehicle.applyEngineForce(chassis.force*.4,2)
vehicle.applyEngineForce(chassis.force*.4,3)
#the following lines are not necessary:s
act0 = cont.getActuator("wheel0")
wheel0 = act0.getOwner()
pos = vehicle.getWheelPosition(0)
#don't need to do this here, the vehicle updates the wheels automatically
#wheel0.setPosition(pos)
orn = vehicle.getWheelOrientationQuaternion(0)
#wheel0.setOrientation(orn)
influence = 0.1
vehicle.setRollInfluence(influence,0)
vehicle.setRollInfluence(influence,1)
vehicle.setRollInfluence(influence,2)
vehicle.setRollInfluence(influence,3)
stiffness = 10.0
vehicle.setSuspensionStiffness(stiffness,0)
vehicle.setSuspensionStiffness(stiffness,1)
vehicle.setSuspensionStiffness(stiffness,2)
vehicle.setSuspensionStiffness(stiffness,3)
damping = 1.3
vehicle.setSuspensionDamping(damping,0)
vehicle.setSuspensionDamping(damping,1)
vehicle.setSuspensionDamping(damping,2)
vehicle.setSuspensionDamping(damping,3)
compression = 2.4
vehicle.setSuspensionCompression(compression,0)
vehicle.setSuspensionCompression(compression,1)
vehicle.setSuspensionCompression(compression,2)
vehicle.setSuspensionCompression(compression,3)
friction = chassis.friction
vehicle.setTyreFriction(friction,0)
vehicle.setTyreFriction(friction,1)
vehicle.setTyreFriction(friction,2)
vehicle.setTyreFriction(friction,3)
#print dir(vehicle)
#PhysicsConstraints.setDebugMode(1)
#PhysicsConstraints.setDeactivationTime(2.)
