Shuvit game master repo. http://shuvit.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

car.py 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. """
  2. CarSetup
  3. """
  4. #import blender game engine content
  5. from bge import logic, constraints
  6. #import other modules
  7. import math, mathutils
  8. os = 'Windows'
  9. from sys import platform
  10. if platform != "win32":
  11. os = 'Linux'
  12. def onWindows():
  13. return os == 'Windows'
  14. import bge
  15. import GameLogic
  16. import ctypes
  17. dict = bge.logic.globalDict
  18. reduction = 400000
  19. axisTh = 0.03
  20. cont = GameLogic.getCurrentController()
  21. obj = bge.logic.getCurrentScene().objects
  22. own = cont.owner
  23. class CarSetup:
  24. def __init__(self):
  25. #list of cars
  26. self.carList = {}
  27. #list of tires
  28. self.tires = {}
  29. #car turn amount
  30. self.turnAmount = {}
  31. def carInitialized(self, car):
  32. #check for initialized property
  33. if "initialized" in car:
  34. #check if car is initialized
  35. if car["initialized"] == True:
  36. #car is initialized
  37. return True
  38. #car is not initialized
  39. return False
  40. def carConstraint(self, car):
  41. #get physics ID
  42. carPhysicsID = car.getPhysicsId()
  43. #create a vehicle constraint
  44. vehicleConstraint = constraints.createConstraint(carPhysicsID, 0, 11)
  45. #get the constraint ID
  46. constraintID = vehicleConstraint.getConstraintId()
  47. #get the vehicle constraint ID
  48. vehicleID = constraints.getVehicleConstraint(constraintID)
  49. #save vehicle constraint ID as an object variable
  50. car["vehicleID"] = vehicleID
  51. #return vehicle ID
  52. return vehicleID
  53. def positionTires(self, car):
  54. #get the list of tires
  55. tireList = self.tires[car]
  56. tire1 = tireList["TireFD"] #tire front drivers
  57. tire2 = tireList["TireFP"] #tire front passengers
  58. tire3 = tireList["TireRD"] #tire rear drivers
  59. tire4 = tireList["TireRP"] #tire rear passnengers
  60. tire1Pos = tire1.worldPosition #tire front drivers
  61. tire2Pos = tire2.worldPosition #tire front passengers
  62. tire3Pos = tire3.worldPosition #tire rear drivers
  63. tire4Pos = tire4.worldPosition #tire rear passnengers
  64. #car position
  65. carPos = car.worldPosition
  66. #tire front drivers
  67. tire1Pos = [tire1Pos[0] - carPos[0],
  68. tire1Pos[1] - carPos[1],
  69. tire1Pos[2] - carPos[2]]
  70. #tire front passengers
  71. tire2Pos = [tire2Pos[0] - carPos[0],
  72. tire2Pos[1] - carPos[1],
  73. tire2Pos[2] - carPos[2]]
  74. #tire rear drivers
  75. tire3Pos = [tire3Pos[0] - carPos[0],
  76. tire3Pos[1] - carPos[1],
  77. tire3Pos[2] - carPos[2]]
  78. #tire rear passengers
  79. tire4Pos = [tire4Pos[0] - carPos[0],
  80. tire4Pos[1] - carPos[1],
  81. tire4Pos[2] - carPos[2]]
  82. return (tire1Pos, tire2Pos, tire3Pos, tire4Pos)
  83. def tireRadius(self, car):
  84. #get the list of tires
  85. tireList = self.tires[car]
  86. tire1Radius = tireList["TireFD"].localScale[2]/2 #tire front drivers
  87. tire2Radius = tireList["TireFP"].localScale[2]/2 #tire front passengers
  88. tire3Radius = tireList["TireRD"].localScale[2]/2 #tire rear drivers
  89. tire4Radius = tireList["TireRP"].localScale[2]/2 #tire rear passengers
  90. #check for radius override
  91. if "Radius" in tireList["TireFD"]:
  92. tire1Radius = tireList["TireFD"]["Radius"]
  93. if "Radius" in tireList["TireFP"]:
  94. tire2Radius = tireList["TireFP"]["Radius"]
  95. if "Radius" in tireList["TireRD"]:
  96. tire3Radius = tireList["TireRD"]["Radius"]
  97. if "Radius" in tireList["TireRP"]:
  98. tire4Radius = tireList["TireRP"]["Radius"]
  99. #return (tire1Radius, tire2Radius, tire3Radius, tire4Radius)
  100. return (.2, .2, .2, .2)
  101. def suspensionHeight(self, car):
  102. tireList = self.tires[car]
  103. tire1height = 0.2 #tire front drivers
  104. tire2height = 0.2 #tire front passengers
  105. tire3height = 0.2 #tire rear drivers
  106. tire4height = 0.2 #tire rear passengers
  107. #check for suspension height override
  108. if "Height" in tireList["TireFD"]:
  109. tire1height = tireList["TireFD"]["Height"]
  110. if "Height" in tireList["TireFP"]:
  111. tire2height = tireList["TireFP"]["Height"]
  112. if "Height" in tireList["TireRD"]:
  113. tire3height = tireList["TireRD"]["Height"]
  114. if "Height" in tireList["TireRP"]:
  115. tire4height = tireList["TireRP"]["Height"]
  116. return (tire1height, tire2height, tire3height, tire4height)
  117. def suspensionAngle(self):
  118. tire1Angle = [0, 0, -1] #tire front drivers
  119. tire2Angle = [0, 0, -1] #tire front passengers
  120. tire3Angle = [0, 0, -1] #tire rear drivers
  121. tire4Angle = [0, 0, -1] #tire rear passengers
  122. return (tire1Angle, tire2Angle, tire3Angle, tire4Angle)
  123. def tireAxis(self):
  124. tire1Axis = [-1, 0, 0] #tire front drivers
  125. tire2Axis = [-1, 0, 0] #tire front passengers
  126. tire3Axis = [-1, 0, 0] #tire rear drivers
  127. tire4Axis = [-1, 0, 0] #tire rear passengers
  128. return (tire1Axis, tire2Axis, tire3Axis, tire4Axis)
  129. def tireSteering(self):
  130. tire1Steer = True #tire front drivers
  131. tire2Steer = True #tire front passengers
  132. tire3Steer = False #tire rear drivers
  133. tire4Steer = False #tire rear passengers
  134. return (tire1Steer, tire2Steer, tire3Steer, tire4Steer)
  135. def addTires(self, car, vehicleID):
  136. #get the list of tires
  137. tireList = self.tires[car]
  138. #list the tires
  139. tires = [tireList["TireFD"],
  140. tireList["TireFP"],
  141. tireList["TireRD"],
  142. tireList["TireRP"]]
  143. #position the tires
  144. tirePos = self.positionTires(car)
  145. #calculate tire radius
  146. tireRadius = self.tireRadius(car)
  147. #get the suspension heght
  148. suspensionHeight = self.suspensionHeight(car)
  149. #get the suspension angle
  150. suspensionAngle = self.suspensionAngle()
  151. #get the tire axis
  152. tireAxis = self.tireAxis()
  153. #get which wheels turn
  154. tireSteer = self.tireSteering()
  155. for tire in range(0, 4):
  156. #tire object
  157. obj = tires[tire]
  158. #tire position
  159. pos = tirePos[tire]
  160. #tire suspension height
  161. suspenHeight = suspensionHeight[tire]
  162. #angle of suspension
  163. suspenAngle = suspensionAngle[tire]
  164. #tire rotation axis
  165. axis = tireAxis[tire]
  166. #tire radius
  167. radius = tireRadius[tire]
  168. #tire steering
  169. steering = tireSteer[tire]
  170. #add wheel to car
  171. vehicleID.addWheel(obj, pos, suspenAngle, axis, suspenHeight, radius, steering)
  172. def tireGrip(self, car, vehicleID):
  173. #list of tires
  174. tireList = self.tires[car]
  175. #10
  176. tire1Grip = 8 #tire front drivers
  177. tire2Grip = 8 #tire front Passengers
  178. tire3Grip = 8 #tire rear drivers
  179. tire4Grip = 8 #tire rear passengers
  180. #check for grip override
  181. if "Grip" in tireList["TireFD"]:
  182. tire1Grip = tireList["TireFD"]["Grip"]
  183. if "Grip" in tireList["TireFP"]:
  184. tire2Grip = tireList["TireFP"]["Grip"]
  185. if "Grip" in tireList["TireRD"]:
  186. tire3Grip = tireList["TireRD"]["Grip"]
  187. if "Grip" in tireList["TireRP"]:
  188. tire4Grip = tireList["TireRP"]["Grip"]
  189. vehicleID.setTyreFriction(tire1Grip, 0) #tire front drivers
  190. vehicleID.setTyreFriction(tire2Grip, 1) #tire front Passengers
  191. vehicleID.setTyreFriction(tire3Grip, 2) #tire rear drivers
  192. vehicleID.setTyreFriction(tire4Grip, 3) #tire rear passengers
  193. def suspensionCompression(self, car, vehicleID):
  194. #list of tires
  195. tireList = self.tires[car]
  196. #6
  197. tire1Compress = 6 #tire front drivers
  198. tire2Compress = 6 #tire front Passengers
  199. tire3Compress = 6 #tire rear drivers
  200. tire4Compress = 6 #tire rear passengers
  201. #check for compression override
  202. if "Compression" in tireList["TireFD"]:
  203. tire1Compress = tireList["TireFD"]["Compression"]
  204. if "Compression" in tireList["TireFP"]:
  205. tire2Compress = tireList["TireFP"]["Compression"]
  206. if "Compression" in tireList["TireRD"]:
  207. tire3Compress = tireList["TireRD"]["Compression"]
  208. if "Compression" in tireList["TireRP"]:
  209. tire4Compress = tireList["TireRP"]["Compression"]
  210. vehicleID.setSuspensionCompression(tire1Compress, 0) #tire front drivers
  211. vehicleID.setSuspensionCompression(tire2Compress, 1) #tire front Passengers
  212. vehicleID.setSuspensionCompression(tire3Compress, 2) #tire rear drivers
  213. vehicleID.setSuspensionCompression(tire4Compress, 3) #tire rear passengers
  214. def suspensionDamping(self, car, vehicleID):
  215. #list of tires
  216. tireList = self.tires[car]
  217. tire1Damp = 5 #tire front drivers
  218. tire2Damp = 5 #tire front Passengers
  219. tire3Damp = 5 #tire rear drivers
  220. tire4Damp = 5 #tire rear passengers
  221. #check for damping override
  222. if "Damping" in tireList["TireFD"]:
  223. tire1Damp = tireList["TireFD"]["Damping"]
  224. if "Damping" in tireList["TireFP"]:
  225. tire2Damp = tireList["TireFP"]["Damping"]
  226. if "Damping" in tireList["TireRD"]:
  227. tire3Damp = tireList["TireRD"]["Damping"]
  228. if "Damping" in tireList["TireRP"]:
  229. tire4Damp = tireList["TireRP"]["Damping"]
  230. vehicleID.setSuspensionDamping(tire1Damp, 0) #tire front drivers
  231. vehicleID.setSuspensionDamping(tire2Damp, 1) #tire front Passengers
  232. vehicleID.setSuspensionDamping(tire3Damp, 2) #tire rear drivers
  233. vehicleID.setSuspensionDamping(tire4Damp, 3) #tire rear passengers
  234. def suspensionStiffness(self, car, vehicleID):
  235. #list of tires
  236. tireList = self.tires[car]
  237. tire1Stiffness = 12.5 #tire front drivers
  238. tire2Stiffness = 12.5 #tire front Passengers
  239. tire3Stiffness = 12.5 #tire rear drivers
  240. tire4Stiffness = 12.5 #tire rear passengers
  241. #check for stiffness override
  242. if "Stiffness" in tireList["TireFD"]:
  243. tire1Stiffness = tireList["TireFD"]["Stiffness"]
  244. if "Stiffness" in tireList["TireFP"]:
  245. tire2Stiffness = tireList["TireFP"]["Stiffness"]
  246. if "Stiffness" in tireList["TireRD"]:
  247. tire3Stiffness = tireList["TireRD"]["Stiffness"]
  248. if "Stiffness" in tireList["TireRP"]:
  249. tire4Stiffness = tireList["TireRP"]["Stiffness"]
  250. vehicleID.setSuspensionStiffness(tire1Stiffness, 0) #tire front drivers
  251. vehicleID.setSuspensionStiffness(tire2Stiffness, 1) #tire front Passengers
  252. vehicleID.setSuspensionStiffness(tire3Stiffness, 2) #tire rear drivers
  253. vehicleID.setSuspensionStiffness(tire4Stiffness, 3) #tire rear passengers
  254. def suspensionRollInfluence(self, car, vehicleID):
  255. #list of tires
  256. tireList = self.tires[car]
  257. tire1Roll = -0.16 #tire front drivers
  258. tire2Roll = -0.16 #tire front Passengers
  259. tire3Roll = -0.16 #tire rear drivers
  260. tire4Roll = -0.16 #tire rear passengers
  261. #check for roll influence override
  262. if "RollInfluence" in tireList["TireFD"]:
  263. tire1Roll = -tireList["TireFD"]["RollInfluence"]
  264. if "Roll" in tireList["TireFP"]:
  265. tire2Roll = -tireList["TireFP"]["RollInfluence"]
  266. if "Roll" in tireList["TireRD"]:
  267. tire3Roll = -tireList["TireRD"]["RollInfluence"]
  268. if "Roll" in tireList["TireRP"]:
  269. tire4Roll = -tireList["TireRP"]["RollInfluence"]
  270. vehicleID.setRollInfluence(tire1Roll, 0) #tire front drivers
  271. vehicleID.setRollInfluence(tire2Roll, 1) #tire front Passengers
  272. vehicleID.setRollInfluence(tire3Roll, 2) #tire rear drivers
  273. vehicleID.setRollInfluence(tire4Roll, 3) #tire rear passengers
  274. #create CarSetup object
  275. carsetup = CarSetup()
  276. def _initialize(controller):
  277. #get the car object
  278. car = controller.owner
  279. #get current orientation
  280. carOrient = car.worldOrientation
  281. #convert orientation to euler
  282. carEuler = carOrient.to_euler()
  283. newCarEuler = carOrient.to_euler()
  284. #set euler rotation
  285. newCarEuler[0] = 0
  286. newCarEuler[1] = 0
  287. newCarEuler[2] = 0
  288. #set car orientation
  289. car.worldOrientation = newCarEuler.to_matrix()
  290. if not car.name in carsetup.carList:
  291. #assign the car
  292. carsetup.carList[car] = car
  293. tires = {}
  294. #look for tires
  295. for c in car.children:
  296. tire = "Tire"
  297. #check if tire object
  298. if "Tire" in c:
  299. #build the tire name
  300. tire += c["Tire"]
  301. #add tire to list
  302. tires[tire] = c
  303. #assign tires owner
  304. c["owner"] = car.name
  305. #clear tire parent
  306. c.removeParent()
  307. #add tires to list of tires
  308. carsetup.tires[car] = tires
  309. #build the car constraint
  310. vehicleID = carsetup.carConstraint(car)
  311. #add tires to car
  312. carsetup.addTires(car, vehicleID)
  313. #set tire grip
  314. carsetup.tireGrip(car, vehicleID)
  315. #set suspension compression
  316. carsetup.suspensionCompression(car, vehicleID)
  317. #set suspension damping
  318. carsetup.suspensionDamping(car, vehicleID)
  319. #set suspension stiffness
  320. carsetup.suspensionStiffness(car, vehicleID)
  321. #set suspension roll influence
  322. carsetup.suspensionRollInfluence(car, vehicleID)
  323. #set car orientation
  324. car.worldOrientation = carEuler.to_matrix()
  325. #set car to initialized
  326. car["initialized"] = True
  327. #set turn amount
  328. carsetup.turnAmount[car] = 0
  329. #check for "TurnAmount" property in car
  330. if not "TurnAmount" in car:
  331. #set default turn amount
  332. car["TurnAmount"] = 50#35
  333. #check for "TurnSpeed" property in car
  334. if not "TurnSpeed" in car:
  335. #set default turn speed
  336. car["TurnSpeed"] = 1
  337. car["TurnSpeed2"] = 20#2
  338. def _constraintID(car):
  339. # get saved vehicle Constraint ID
  340. vehicleID = car["vehicleID"]
  341. return vehicleID
  342. def _powertrain(controller, car):
  343. #declare variables
  344. gas = None
  345. reverse = None
  346. brake = None
  347. ebrake = None
  348. #get the vehicl id
  349. vehicleID = _constraintID(car)
  350. #engine power
  351. power = 0
  352. #engine
  353. engine = True
  354. #check for engine override
  355. if "Engine" in car:
  356. engine = car["Engine"]
  357. #set default values
  358. forwardSpeed = 70
  359. reverseSpeed = 200
  360. brakeAmount = 10
  361. eBrakeAmount = 40
  362. backdrive = True
  363. frontdrive = False
  364. #check for forward speed override
  365. if "ForwardSpeed" in car:
  366. #set forward speed
  367. forwardSpeed = car["ForwardSpeed"]
  368. #check for reverse speed override
  369. if "ReverseSpeed" in car:
  370. #set reverse speed
  371. reverseSpeed = car["ReverseSpeed"]
  372. #check for brake amount override
  373. if "BrakeAmount" in car:
  374. #set brake amount
  375. brakeAmount = car["BrakeAmount"]
  376. #check for E-brake amount override
  377. if "EBrakeAmount" in car:
  378. #set brake amount
  379. eBrakeAmount = car["EBrakeAmount"]
  380. #check for BackWheelDrive override
  381. if "BackWheelDrive" in car:
  382. #set back wheel drive
  383. backdrive = car["BackWheelDrive"]
  384. #check for FrontWheelDrive override
  385. if "FrontWheelDrive" in car:
  386. #set front wheel drive
  387. frontdrive = car["FrontWheelDrive"]
  388. #check for gas sensor
  389. if "Gas" in controller.sensors:
  390. #gas = controller.sensors["Gas"]
  391. gas = own['gas']
  392. #check for reverse sensor
  393. #if "Reverse" in controller.sensors:
  394. #reverse = controller.sensors["Reverse"]
  395. reverse = own['reverse']
  396. #check for brake sensor
  397. #if "Brake" in controller.sensors:
  398. #brake = controller.sensors["Brake"]
  399. brake = own['brake']
  400. #check for E-brake sensor
  401. if "EBrake" in controller.sensors:
  402. ebrake = controller.sensors["EBrake"]
  403. #check if gas exists
  404. if gas:
  405. #check if gas is positive
  406. if gas == 1:
  407. #check if engine is on
  408. if engine:
  409. #set power
  410. power = -forwardSpeed
  411. #check if reverse exists
  412. #if reverse:
  413. #check if reverse is positive
  414. if reverse == 1:
  415. #check if engine is on
  416. if engine:
  417. #set power
  418. power = reverseSpeed
  419. #check if gas exists
  420. if gas:
  421. #check if gas is positive
  422. if gas == 1:
  423. #set power
  424. power = 0
  425. #check if brake exists
  426. #if brake:
  427. #check if brake is positive
  428. if brake == 1:
  429. #apply braking
  430. vehicleID.applyBraking(brakeAmount, 2)
  431. vehicleID.applyBraking(brakeAmount, 3)
  432. #set power
  433. power = 0
  434. else:
  435. #remove braking
  436. vehicleID.applyBraking(0, 2)
  437. vehicleID.applyBraking(0, 3)
  438. #check if e brake exists
  439. if ebrake:
  440. #check if e brake is positive
  441. if ebrake.positive:
  442. #apply braking
  443. vehicleID.applyBraking(eBrakeAmount, 2)
  444. vehicleID.applyBraking(eBrakeAmount, 3)
  445. #set power
  446. power = 0
  447. #check if back wheel drive
  448. if backdrive:
  449. #apply power
  450. vehicleID.applyEngineForce(-power, 2)
  451. vehicleID.applyEngineForce(-power, 3)
  452. #check if front wheel drive
  453. if frontdrive:
  454. #apply power
  455. vehicleID.applyEngineForce(-power, 0)
  456. vehicleID.applyEngineForce(-power, 1)
  457. def _steer(controller, car):
  458. #declare variables
  459. #left = None
  460. #right = None
  461. left = own['left']
  462. right = own['right']
  463. #turn amount
  464. turnAmount = math.radians(car["TurnAmount"])
  465. #get turn speed
  466. turnSpeed = car["TurnSpeed"] * 0.01
  467. turnSpeed2 = car["TurnSpeed2"] * 0.01
  468. #get vehicle id
  469. vehicleID = _constraintID(car)
  470. #check for left sensor
  471. #if "Left" in controller.sensors:
  472. #left = controller.sensors["Left"]
  473. #check for right sensor
  474. #if "Right" in controller.sensors:
  475. #right = controller.sensors["Right"]
  476. #check if the sensors exist
  477. #if left and right:
  478. #check if both are positive
  479. #if left.positive and right.positive:
  480. #pass
  481. #check if left is positive
  482. #elif left.positive and not right.positive:
  483. if left == True:
  484. #check turn amount
  485. if carsetup.turnAmount[car] < turnAmount:
  486. #add to turn value
  487. carsetup.turnAmount[car] += turnSpeed
  488. #apply steering
  489. vehicleID.setSteeringValue(carsetup.turnAmount[car],0)
  490. vehicleID.setSteeringValue(carsetup.turnAmount[car],1)
  491. #check if right is positive
  492. #elif not left.positive and right.positive:
  493. elif right == True:
  494. #check turn amount
  495. if carsetup.turnAmount[car] > -turnAmount:
  496. #subtract from turn value
  497. carsetup.turnAmount[car] -= turnSpeed
  498. #apply steering
  499. vehicleID.setSteeringValue(carsetup.turnAmount[car],0)
  500. vehicleID.setSteeringValue(carsetup.turnAmount[car],1)
  501. #check if none are positive
  502. #elif not left.positive and not right.positive:
  503. elif right == 0 and left == 0:
  504. #print(round(carsetup.turnAmount[car],2))
  505. #check if steering right
  506. if carsetup.turnAmount[car] <= -turnSpeed2:
  507. #print("less than, subtract")
  508. #add to turn value
  509. carsetup.turnAmount[car] += turnSpeed2
  510. #check if steering left
  511. elif carsetup.turnAmount[car] > turnSpeed2:
  512. #print("greater than add")
  513. #subtract from turn value
  514. carsetup.turnAmount[car] -= turnSpeed2
  515. else:
  516. carsetup.turnAmount[car] = 0
  517. #apply steering
  518. vehicleID.setSteeringValue(carsetup.turnAmount[car],0)
  519. vehicleID.setSteeringValue(carsetup.turnAmount[car],1)
  520. def exit():
  521. print('exit car')
  522. scene = bge.logic.getCurrentScene()
  523. dict = bge.logic.globalDict
  524. cube = scene.objects['control_cube.002']
  525. camera = scene.objects["Camera.003"]
  526. own['driving'] = False
  527. cube['driving'] = False
  528. dict['driving_reset'] = True
  529. cube.removeParent()
  530. cube.applyMovement([0,-1,0], True)
  531. cube.removeParent()
  532. #cube.suspendDynamics(True)
  533. cube.restoreDynamics()
  534. #camobj = scene.objects['camobj']
  535. #own.actuators['Camera'].object = camobj
  536. scene.suspend()
  537. def check_exit(yBut):
  538. if yBut == True and dict['last_yBut'] == False:
  539. exit()
  540. else:
  541. dict['last_driving'] = True
  542. def main(controller):
  543. lLR = dict['lLR']
  544. lUD = dict['lUD']
  545. rLR = dict['rLR']
  546. rUD = dict['rUD']
  547. lTrig = dict['lTrig']
  548. rTrig = dict['rTrig']
  549. aBut = dict['aBut']
  550. bBut = dict['bBut']
  551. xBut = dict['xBut']
  552. yBut = dict['yBut']
  553. lBump = dict['lBump']
  554. rBump = dict['rBump']
  555. bkBut = dict['bkBut']
  556. stBut = dict['stBut']
  557. xbBut = dict['xbBut']
  558. ltsBut = dict['ltsBut']
  559. rtsBut = dict['rtsBut']
  560. ldPad = dict['ldPad']
  561. rdPad = dict['rdPad']
  562. udPad = dict['udPad']
  563. ddPad = dict['ddPad']
  564. #no input
  565. def cutOff():
  566. if (abs(lLR) < axisTh
  567. and abs(lUD) < axisTh
  568. and abs(rLR) < axisTh
  569. and abs(rUD) < axisTh
  570. and aBut == False):
  571. return True
  572. #print(rTrig)
  573. own['ForwardSpeed'] = rTrig * 6500
  574. #if own['ForwardSpeed'] < 500:
  575. #own['ForwardSpeed'] = 500:
  576. if rTrig > .01:
  577. own['gas'] = 1
  578. else:
  579. own['gas'] = 0
  580. if lTrig > .01:
  581. own['brake'] = 1
  582. else:
  583. own['brake'] = 0
  584. if lLR > .04:
  585. own['right'] = 1
  586. else:
  587. own['right'] = 0
  588. if lLR < -.04:
  589. own['left'] = 1
  590. else:
  591. own['left'] = 0
  592. if aBut == 1:
  593. own['reverse'] = 1
  594. else:
  595. own['reverse'] = 0
  596. #get the car object
  597. car = controller.owner
  598. #check if car was initialized
  599. if not carsetup.carInitialized(car):
  600. #initialize the car
  601. _initialize(controller)
  602. #exit
  603. return
  604. #build the car constraint
  605. vehicleID = _constraintID(car)
  606. #set tire grip
  607. carsetup.tireGrip(car, vehicleID)
  608. #set suspension compression
  609. carsetup.suspensionCompression(car, vehicleID)
  610. #set suspension damping
  611. carsetup.suspensionDamping(car, vehicleID)
  612. #set suspension stiffness
  613. carsetup.suspensionStiffness(car, vehicleID)
  614. #set suspension roll influence
  615. carsetup.suspensionRollInfluence(car, vehicleID)
  616. #run powertrain
  617. _powertrain(controller, car)
  618. #run powertrain
  619. _steer(controller, car)
  620. check_exit(yBut)