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.

bike.py 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. import bge
  2. from mathutils import Vector
  3. dict = bge.logic.globalDict
  4. scene = bge.logic.getCurrentScene()
  5. skater = scene.objects["Char4"]
  6. TURN_SENS = .04
  7. TURNAMT = .03
  8. AIR_TURMAMT = .07
  9. ACCEL_AMT = .06
  10. JUMP_AMT = 1300
  11. def turnL(own, gray):
  12. if gray.positive:
  13. own.applyRotation([0,0,TURNAMT], True)
  14. else:
  15. own.applyRotation([0,0,AIR_TURMAMT], True)
  16. def turnR(own, gray):
  17. if gray.positive:
  18. own.applyRotation([0,0,-TURNAMT], True)
  19. else:
  20. own.applyRotation([0,0,-AIR_TURMAMT], True)
  21. def reset_timers(own, q1oncd, q2oncd, q3oncd, q4oncd, q5oncd, q6oncd, q7oncd, q8oncd):
  22. q1oncd = 0
  23. q2oncd = 0
  24. q3oncd = 0
  25. q4oncd = 0
  26. q5oncd = 0
  27. q6oncd = 0
  28. q7oncd = 0
  29. q8oncd = 0
  30. own["Q1oncd"] = 0
  31. own["Q2oncd"] = 0
  32. own["Q3oncd"] = 0
  33. own["Q4oncd"] = 0
  34. own["Q5oncd"] = 0
  35. own["Q6oncd"] = 0
  36. own["Q7oncd"] = 0
  37. own["Q8oncd"] = 0
  38. def get_physics_action(cont, own):
  39. #print(dict['lLR'])
  40. action = 'None'
  41. gray = cont.sensors['r_Ground']
  42. lLR = dict['lLR']
  43. lUD = dict['lUD']
  44. rLR = dict['rLR']
  45. rUD = dict['rUD']
  46. lTrig = dict['lTrig']
  47. rTrig = dict['rTrig']
  48. aBut = dict['aBut']
  49. bBut = dict['bBut']
  50. xBut = dict['xBut']
  51. yBut = dict['yBut']
  52. lBump = dict['lBump']
  53. rBump = dict['rBump']
  54. bkBut = dict['bkBut']
  55. stBut = dict['stBut']
  56. xbBut = dict['xbBut']
  57. ltsBut = dict['ltsBut']
  58. rtsBut = dict['rtsBut']
  59. ldPad = dict['ldPad']
  60. rdPad = dict['rdPad']
  61. udPad = dict['udPad']
  62. ddPad = dict['ddPad']
  63. q1oncd = own["Q1oncd"]
  64. q2oncd = own["Q2oncd"]
  65. q3oncd = own["Q3oncd"]
  66. q4oncd = own["Q4oncd"]
  67. q5oncd = own["Q5oncd"]
  68. q6oncd = own["Q6oncd"]
  69. q7oncd = own["Q7oncd"]
  70. q8oncd = own["Q8oncd"]
  71. q1oncdl = own["Q1oncdl"]
  72. q2oncdl = own["Q2oncdl"]
  73. q3oncdl = own["Q3oncdl"]
  74. q4oncdl = own["Q4oncdl"]
  75. q5oncdl = own["Q5oncdl"]
  76. q6oncdl = own["Q6oncdl"]
  77. q7oncdl = own["Q7oncdl"]
  78. q8oncdl = own["Q8oncdl"]
  79. q1on = 0
  80. q2on = 0
  81. q3on = 0
  82. q4on = 0
  83. q5on = 0
  84. q6on = 0
  85. q7on = 0
  86. q8on = 0
  87. lq1on = 0
  88. lq2on = 0
  89. lq3on = 0
  90. lq4on = 0
  91. lq5on = 0
  92. lq6on = 0
  93. lq7on = 0
  94. lq8on = 0
  95. countdown = 20
  96. ##################
  97. ###realcontrols###
  98. ##################
  99. # q1
  100. # q8 q2
  101. # q7 q3
  102. # q6 q4
  103. # q5
  104. ##################
  105. if lUD > .04 and lLR < -0.04 :
  106. lq6on = 1
  107. q6oncdl = countdown
  108. own["Q6oncdl"] = q6oncdl
  109. #print("lq6on")
  110. elif q6oncdl > 0:
  111. lq6on = 0
  112. q6oncdl = q6oncdl - 1
  113. own["Q6oncdl"] = q6oncdl
  114. #lq8
  115. if lUD < -.04 and lLR < -0.04 :
  116. lq8on = 1
  117. q8oncdl = countdown
  118. own["Q8oncdl"] = q8oncdl
  119. #print("lq8on")
  120. elif q8oncdl > 0:
  121. lq8on = 0
  122. q8oncdl = q8oncdl - 1
  123. own["Q8oncdl"] = q8oncdl
  124. #lq2
  125. if lUD < -.04 and lLR > 0.04 :
  126. lq2on = 1
  127. q2oncdl = countdown
  128. own["Q2oncdl"] = q2oncdl
  129. #print("lq2on")
  130. elif q2oncdl > 0:
  131. lq2on = 0
  132. q2oncdl = q2oncdl - 1
  133. own["Q2oncdl"] = q2oncdl
  134. #q4
  135. if lUD > 0.04 and lLR > 0.04 :
  136. lq4on = 1
  137. q4oncdl = countdown
  138. own["Q4oncdl"] = q4oncdl
  139. #print("lq4on")
  140. elif q4oncdl > 0:
  141. lq4on = 0
  142. q4oncdl = q4oncdl - 1
  143. own["Q4oncdl"] = q4oncdl
  144. #q5
  145. if lUD > .070 and lq4on == 0 and lq6on == 0:
  146. lq5on = 1
  147. q5oncdl = countdown
  148. own["Q5oncdl"] = q5oncdl
  149. #print("lq5on")
  150. elif q5oncdl > 0:
  151. lq5on = 0
  152. q5oncdl = q5oncdl - 1
  153. own["Q5oncdl"] = q5oncdl
  154. #q1
  155. if lUD < -0.070 and lq8on !=1 and lq2on != 1:
  156. lq1on = 1
  157. q1oncdl = countdown
  158. own["Q1oncdl"] = q1oncdl
  159. #print("lq1on")
  160. elif q1oncdl > 0:
  161. lq1on = 0
  162. q1oncdl = q1oncdl - 1
  163. own["Q1oncdl"] = q1oncdl
  164. #q7
  165. if lLR < -0.070 and lq8on != 1 and lq6on != 1:
  166. lq7on = 1
  167. q7oncdl = countdown
  168. own["Q7oncdl"] = q7oncdl
  169. #print("lq7on")
  170. elif q7oncdl > 0:
  171. lq7on = 0
  172. q7oncdl = q7oncdl - 1
  173. own["Q7oncdl"] = q7oncdl
  174. #q3
  175. if lLR > 0.070 and lq2on !=1 and lq4on != 1:
  176. lq3on = 1
  177. q3oncdl = countdown
  178. own["Q3oncdl"] = q3oncdl
  179. #print("lq3on")
  180. elif q3oncdl > 0:
  181. lq3on = 0
  182. q3oncdl = q3oncdl - 1
  183. own["Q3oncdl"] = q3oncdl
  184. ################
  185. #q6
  186. if rUD > .04 and rLR < -0.04 :
  187. q6on = 1
  188. q6oncd = countdown
  189. own["Q6oncd"] = q6oncd
  190. #print("q6on")
  191. elif q6oncd > 0:
  192. q6on = 0
  193. q6oncd = q6oncd - 1
  194. own["Q6oncd"] = q6oncd
  195. #q8
  196. if rUD < -.04 and rLR < -0.04 :
  197. q8on = 1
  198. q8oncd = countdown
  199. own["Q8oncd"] = q8oncd
  200. #print("q8on")
  201. elif q8oncd > 0:
  202. q8on = 0
  203. q8oncd = q8oncd - 1
  204. own["Q8oncd"] = q8oncd
  205. #q2
  206. if rUD < -.04 and rLR > 0.04 :
  207. q2on = 1
  208. q2oncd = countdown
  209. own["Q2oncd"] = q2oncd
  210. #print("q2on")
  211. elif q2oncd > 0:
  212. q2on = 0
  213. q2oncd = q2oncd - 1
  214. own["Q2oncd"] = q2oncd
  215. #q4
  216. if rUD > 0.04 and rLR > 0.04 :
  217. q4on = 1
  218. q4oncd = countdown
  219. own["Q4oncd"] = q4oncd
  220. #print("q4on")
  221. elif q4oncd > 0:
  222. q4on = 0
  223. q4oncd = q4oncd - 1
  224. own["Q4oncd"] = q4oncd
  225. #q5
  226. if rUD > .070 or dict['kb_space'] == 2:
  227. if q4on == 0 and q6on == 0:
  228. q5on = 1
  229. q5oncd = countdown
  230. own["Q5oncd"] = q5oncd
  231. elif q5oncd > 0:
  232. q5on = 0
  233. q5oncd = q5oncd - 1
  234. own["Q5oncd"] = q5oncd
  235. #q1
  236. if rUD < -0.070:
  237. if q2on == 0 and q8on == 0:
  238. #print("q1on")
  239. q1on = 1
  240. q1oncd = countdown
  241. own["Q1oncd"] = q1oncd
  242. elif q1oncd > 0:
  243. q1on = 0
  244. q1oncd = q1oncd - 1
  245. own["Q1oncd"] = q1oncd
  246. #q7
  247. if rLR < -0.070:
  248. if q8on == 0 and q6on == 0:
  249. q7on = 1
  250. q7oncd = countdown
  251. own["Q7oncd"] = q7oncd
  252. elif q7oncd > 0:
  253. q7on = 0
  254. q7oncd = q7oncd - 1
  255. own["Q7oncd"] = q7oncd
  256. #q3
  257. if rLR > 0.070:
  258. if q4on == 0 and q2on == 0:
  259. q3on = 1
  260. q3oncd = countdown
  261. own["Q3oncd"] = q3oncd
  262. elif q3oncd > 0:
  263. q3on = 0
  264. q3oncd = q3oncd - 1
  265. own["Q3oncd"] = q3oncd
  266. if dict['aBut'] == True:
  267. action = 'forward'
  268. if dict['lLR'] > TURN_SENS:
  269. action = 'turnR'
  270. turnR(own, gray)
  271. if dict['lLR'] < -TURN_SENS:
  272. #action = 'turnL'
  273. turnL(own, gray)
  274. if (q5oncd > 0 and q1oncd > 0 and q5oncd < q1oncd) or (q5oncd > 0 and q8oncd > 0 and q5oncd < q8oncd) or (q5oncd > 0 and q2oncd > 0 and q5oncd < q2oncd):
  275. action = 'jump'
  276. reset_timers(own, q1oncd, q2oncd, q3oncd, q4oncd, q5oncd, q6oncd, q7oncd, q8oncd)
  277. return action
  278. def do_physics_action(cont, own, action):
  279. # if action == 'turnR':
  280. # own.applyRotation([0,0,-TURNAMT], True)
  281. # if action == 'turnL':
  282. # own.applyRotation([0,0,TURNAMT], True)
  283. if action == 'forward':
  284. own.linearVelocity.x = own.linearVelocity.x - ACCEL_AMT
  285. if action == 'jump':
  286. own.applyForce([0,0,JUMP_AMT], False)
  287. print('jump')
  288. gray = cont.sensors['r_Ground']
  289. if gray.positive:
  290. own.alignAxisToVect(Vector(gray.hitNormal)*1, 2, .25)
  291. else:
  292. own.alignAxisToVect(Vector([0,0,1]),2,.005)
  293. if gray.positive:
  294. own.linearVelocity.z = own.linearVelocity.z -.05
  295. own.linearVelocity.y = 0
  296. def do_anims(cont, own):
  297. skater = scene.objects["Char4"]
  298. skater.playAction("reg_bike.001", 20,20, layer=2, play_mode=1, speed=1)
  299. def main(cont):
  300. own = cont.owner
  301. try:
  302. bike = scene.objects['player_bike']
  303. #print('biking')
  304. if dict['yBut'] == True and dict['last_yBut'] == False:
  305. cont.activate(cont.actuators['walk'])
  306. pbike = scene.addObject('prop_bike', own, 0)
  307. pbike.localScale = [4.6, 4.6, 4.6]
  308. pbike.localScale = [1, 1, 1]
  309. pbike.applyRotation([0,0,1.570796], False)
  310. pbike.worldPosition.y = pbike.worldPosition.y - 1.
  311. bike.endObject()
  312. skater.stopAction(9)
  313. action = get_physics_action(cont, own)
  314. do_physics_action(cont, own, action)
  315. do_anims(cont,own)
  316. except:
  317. pass