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 25KB

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