# behaviour that can be used as a base to control front wheel from some # vehicle. # Uses: commandinput,echanicsobject,mechanicsjoint, mesh from cspace import * from blcelc import * class wheel: # INITIALIZATION def __init__(self,celEntity): print "Initializing wheel..." # check for mechanics object self.mech = celGetMechanicsObject(celEntity) if not self.mech: print "No mesh!" # check for mechanics joint # check for mesh self.mesh = celGetMesh(celEntity) if not self.mesh: print "No mesh!" self.mechjoint = celGetMechanicsJoint(celEntity) if not self.mechjoint: print "No joint!" self.joint = self.mechjoint.GetJoint() # check for pcdefaultcamera self.input = celGetCommandInput(celEntity) if not self.input: self.input = celCreateCommandInput(physicallayer_ptr,celEntity) self.myjoint = SCF_QUERY_INTERFACE(self.joint,iODEJointState) self.myjoint.SetHinge2Axis1(csVector3(0,1,0)) self.myjoint.SetHinge2Axis2(csVector3(1,0,0)) self.myjoint.SetSuspensionCFM(0.0003) self.myjoint.SetSuspensionCFM2(0) self.myjoint.SetSuspensionERP(0.3) self.myjoint.SetSuspensionERP2(0) self.myjoint.SetStopERP(0.3) self.myjoint.SetStopERP2(0) self.myjoint.SetFMax(100) self.myjoint.SetFMax2(1) #self.myjoint.SetCFM(0) #self.myjoint.SetCFM2(0.99) # bind some keys self.input.Bind("w", "forward") self.input.Bind("x", "backward") self.input.Bind("a", "rotateleft") self.input.Bind("d", "rotateright") self.GearForce=[] self.GearVel=[] self.GearForce.append(1000) self.GearVel.append(40) self.center_wheel() # ENTITY CALLBACKS # the engine will call this functions in response # to certain events. # pctimer wakeup callback def pctimer_wakeup (self,celentity,args): pass # walk callbacks. note that for each bind defined in # pccommandinput there are three functions calles: # pccommandinput_(bindcode)1 -> Key down event # pccommandinput_(bindcode)0 -> Key release event # pccommandinput_(bindcode)_ -> Key hold events def pccommandinput_forward1(self,celentity,args): self.accelerate(0) def pccommandinput_forward0(self,celentity,args): self.roll() pass def pccommandinput_forward_(self,celentity,args): pass def pccommandinput_backward1(self,celEntity,args): self.brake() def pccommandinput_backward0(self,celEntity,args): self.roll() pass def pccommandinput_backward_(self,celentity,args): pass def pcdynamicbody_collision(self,celentity,args): pass # ROTATE def brake(self): #self.myjoint.SetFMax(1) #self.myjoint.SetFMax2(3000) #self.myjoint.SetVel(1) #self.myjoint.SetVel2(0) gear=0 self.myjoint.SetFMax2(self.GearForce[gear]) self.myjoint.SetVel2(self.GearVel[gear]) def accelerate(self,gear): self.myjoint.SetFMax2(self.GearForce[gear]) #self.myjoint.SetFMax(1) self.myjoint.SetVel2(-self.GearVel[gear]) #self.myjoint.SetVel(0) def roll(self): self.myjoint.SetFMax2(100) self.myjoint.SetFMax(1) self.myjoint.SetVel2(1) self.myjoint.SetVel(1) def center_wheel(self): self.myjoint.SetLoStop(0.0) self.myjoint.SetLoStop2(0.0) self.myjoint.SetHiStop(0.0) self.myjoint.SetHiStop2(0.0) def rotate_wheel(self,value,vel): self.myjoint.SetLoStop(-value) #self.myjoint.SetLoStop2(0) self.myjoint.SetHiStop(value) #self.myjoint.SetHiStop2(0) self.myjoint.SetVel(vel) #self.myjoint.SetVel2(0) self.myjoint.SetFMax(1000) #self.myjoint.SetFMax2(0) def pccommandinput_rotateleft1(self,celEntity,args): self.rotate_wheel(0.45,5) def pccommandinput_rotateleft0(self,celEntity,args): self.center_wheel() def pccommandinput_rotateleft_(self,celentity,args): pass def pccommandinput_rotateright1(self,celEntity,args): self.rotate_wheel(0.45,-5) def pccommandinput_rotateright0(self,celEntity,args): self.center_wheel() def pccommandinput_rotateright_(self,celentity,args): pass # TRIGGER CALLBACKS # you will receive this callbacks when the entity enters # or leaves triggers. def pctrigger_entertrigger(self,celEntity,args): pass def pctrigger_leavetrigger(self,celEntity,args): pass