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.

StatesPlayer.py 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805
  1. import bge
  2. dict = bge.logic.globalDict
  3. import sound_man
  4. #====================================
  5. State = type("State", (object,), {})
  6. #====================================
  7. class State(object):
  8. def __init__(self, FSM):
  9. self.FSM = FSM
  10. self.timer = 0
  11. self.startTime = 0
  12. def Enter(self):
  13. self.timer = 0
  14. self.startTime = 0
  15. def Execute(self):
  16. print('Executing')
  17. def Exit(self):
  18. print('Exiting')
  19. #====================================
  20. class Example(State):
  21. def __init__(self,FSM):
  22. super(Example, self).__init__(FSM)
  23. def Enter(self):
  24. self.FSM.stateLife = 1
  25. super(Example, self).Enter()
  26. def Execute(self):
  27. self.FSM.stateLife += 1
  28. #self.FSM.ToTransition('toExample')
  29. def Exit(self):
  30. pass
  31. #====================================
  32. class Startup(State):
  33. def __init__(self,FSM):
  34. super(Startup, self).__init__(FSM)
  35. def Enter(self):
  36. self.FSM.stateLife = 1
  37. super(Startup, self).Enter()
  38. def Execute(self):
  39. self.FSM.stateLife += 1
  40. if self.FSM.stateLife == 5:
  41. self.FSM.ToTransition('toWalk')
  42. print('player FSM')
  43. def Exit(self):
  44. pass
  45. #====================================
  46. class Walk(State):
  47. def __init__(self,FSM):
  48. super(Walk, self).__init__(FSM)
  49. def Enter(self):
  50. self.FSM.stateLife = 1
  51. o = self.FSM.owner.obj
  52. c = self.FSM.owner
  53. o['getoffboard'] = False
  54. o['getonboard'] = False
  55. if c.arm == None:
  56. c.arm = o.childrenRecursive['Char4']
  57. c.deck_arm = o.childrenRecursive['deck_arm']
  58. self.walk_weight = 1
  59. self.run_weight = 1
  60. self.run_speed = 0.0
  61. self.turn_weight = 0
  62. self.FSM.owner.walking = True
  63. dict['walking'] = True
  64. dict['walk'] = 1
  65. print('fsm enter walk')
  66. super(Walk, self).Enter()
  67. def Execute(self):
  68. self.FSM.stateLife += 1
  69. o = self.FSM.owner.obj
  70. c = self.FSM.owner
  71. #print(o.worldPosition.z)
  72. #print(o['getonboard'], 'dict onboard')
  73. #print(dict['walk'], 'fsm walk walk')
  74. # if self.FSM.stateLife == 2:
  75. # if o['stance']:
  76. # o.applyRotation([0,0,3.14], True)
  77. # o['stance'] = False
  78. # o['requestAction'] = 'fak_offboard'
  79. # print('request fak offboard')
  80. # else:
  81. # o['requestAction'] = 'reg_offboard'
  82. # print('request reg offboard')
  83. # if self.FSM.stateLife > 5:
  84. # o['requestAction'] = 'reg_idle'
  85. c.align_walk_z()
  86. ground_rays = c.get_ground_ray()
  87. #77777777777777777777777777777777777777777777777777777777777777777777777777777777777
  88. c.get_hang_align_ray()
  89. c.move_walk_cam()
  90. c.check_reset_point()
  91. c.check_throw()
  92. c.check_pause()
  93. c.check_idle(False)
  94. c.idle_anim()
  95. if ground_rays[0][0] != None:
  96. dist = c.get_ground_dist(ground_rays)
  97. if dist > .7:
  98. self.FSM.ToTransition('toWalkAir')
  99. #print('---falling')
  100. else:
  101. c.set_walk_z(dist)
  102. #print(dist, 'setting height')
  103. if self.FSM.stateLife > 4:
  104. self.check_onboard()
  105. self.check_jump()
  106. moving = c.walk_movement()
  107. self.get_walk_weight()
  108. self.idle_blend()
  109. else:
  110. dict['walk'] = 1
  111. def check_onboard(self):
  112. o = self.FSM.owner.obj
  113. #print(o['getonboard'], 'getonboard')
  114. if dict['walk'] == 0:
  115. o['getonboard'] = True
  116. #self.FSM.ToTransition('toRoll')
  117. self.FSM.ToTransition('toWalkOnboard')
  118. #print('onboard', dict['walk'], o['getonboard'])
  119. if dict['yBut'] == 1 and dict['last_yBut'] == 0:
  120. dropin = self.check_dropin()
  121. print('-----dropin', dropin)
  122. if dropin == None:
  123. o['getonboard'] = True
  124. self.FSM.ToTransition('toWalkOnboard')
  125. else:
  126. self.FSM.owner.dropin_obj = dropin
  127. self.FSM.ToTransition('toDropin')
  128. def check_dropin(self):
  129. dr = None
  130. ground_rays = self.FSM.owner.get_dropin_rays()
  131. for x in ground_rays:
  132. if x[0] != None:
  133. #print(x[0], '---checked')
  134. if 'coping' in x[0]:
  135. print('dropin collided')
  136. dr = x
  137. return dr
  138. def check_jump(self):
  139. if dict['xBut'] == True or dict['kb_space'] == 1:
  140. if dict['last_xBut'] == 0:
  141. self.FSM.ToTransition('toWalkJump')
  142. def idle_blend(self):
  143. arm = self.FSM.owner.arm
  144. deck = self.FSM.owner.deck_arm
  145. arm.playAction('reg_idle1', 1,120, layer=1, play_mode=1, speed=.5, blendin=10)
  146. deck.playAction('b_reg_idle1', 1,120, layer=1, play_mode=1, speed=1, blendin=10)
  147. if self.FSM.stateLife > 20:
  148. frame = arm.getActionFrame(2) + .5 * self.run_speed
  149. if frame > 30:
  150. frame = 0
  151. arm.stopAction(2)
  152. deck.stopAction(2)
  153. arm.playAction('reg_nwalk3', 0,30, layer=2, play_mode=1, speed=self.run_speed, blendin=0, layer_weight=self.walk_weight)
  154. deck.playAction('b_reg_walk', 0,30, layer=2, play_mode=1, speed=self.run_speed, blendin=0, layer_weight=self.walk_weight)
  155. #b_reg_walk
  156. arm.setActionFrame(frame, 2)
  157. deck.setActionFrame(frame, 2)
  158. #print(self.walk_weight, frame)
  159. frame = arm.getActionFrame(3) + .5 * self.run_speed
  160. if frame > 30:
  161. frame = 0
  162. arm.stopAction(3)
  163. deck.stopAction(3)
  164. arm.playAction('reg_run.003', 0,30, layer=3, play_mode=1, speed=self.run_speed, blendin=0, layer_weight=self.run_weight)
  165. deck.playAction('b_reg_run', 0,30, layer=3, play_mode=1, speed=self.run_speed, blendin=0, layer_weight=self.run_weight)
  166. arm.setActionFrame(frame, 3)
  167. deck.setActionFrame(frame, 3)
  168. #print(frame, 'frame')
  169. #print(self.run_weight, frame)
  170. # if self.turn_weight > 0:
  171. # tw = abs(self.turn_weight - 1)
  172. # #tw = self.turn_weight
  173. # arm.stopAction(4)
  174. # arm.playAction('bwalk_right', 1,60, layer=4, play_mode=1, speed=self.run_speed, blendin=0, layer_weight=tw)
  175. # elif self.turn_weight < 0:
  176. # tw = abs(abs(self.turn_weight) - 1)
  177. # #tw = self.turn_weight
  178. # arm.stopAction(4)
  179. # arm.playAction('bwalk_left', 1,60, layer=4, play_mode=1, speed=self.run_speed, blendin=0, layer_weight=tw)
  180. #print('walk_weight', self.walk_weight)
  181. if self.walk_weight < .8:
  182. if frame > 15:
  183. if self.FSM.owner.step == False:
  184. self.FSM.owner.step = True
  185. if frame < 23:
  186. #print('step left')
  187. dict['camera']['sndmgr'].queue_sound(['s_l_1', self.FSM.owner.obj, dict['camera']])
  188. else:
  189. if self.FSM.owner.step == True:
  190. self.FSM.owner.step = False
  191. if frame < 8:
  192. dict['camera']['sndmgr'].queue_sound(['s_r_1', self.FSM.owner.obj, dict['camera']])
  193. #print('step right')
  194. # if frame > 15 and self.FSM.owner.step:
  195. # self.FSM.owner.step = True
  196. # print('step left')
  197. # if frame < 15 and not self.FSM.owner.step:
  198. # self.FSM.owner.step = False
  199. # print('step right')
  200. #print('frame', frame)
  201. def get_walk_weight(self):
  202. #print(self.FSM.owner.linearVelocity.y)
  203. o = self.FSM.owner.obj
  204. w = abs(o.linearVelocity.x)
  205. #wt = 3.5
  206. #yt = 8
  207. wt = 1.7
  208. yt = 3
  209. out2 = 0
  210. if w < wt:
  211. out = w / wt
  212. else:
  213. out = 1
  214. #print('running', w)
  215. out2 = w / yt
  216. out = abs(1 - out)
  217. out2 = abs(1 - out2)
  218. tgww = round(out, 3)
  219. tgrw = round(out2, 3)
  220. incer = .05
  221. if self.walk_weight < tgww:
  222. self.walk_weight += incer
  223. if self.walk_weight > tgww:
  224. self.walk_weight -= incer
  225. if self.run_weight <= tgrw:
  226. self.run_weight += incer
  227. if self.run_weight > tgrw:
  228. self.run_weight -= incer
  229. if self.walk_weight <= 0:
  230. self.walk_weight = 0
  231. if self.walk_weight > .95:
  232. self.walk_weight = 1
  233. if self.run_weight <= 0:
  234. self.run_weight = 0
  235. if self.run_weight > .95:
  236. self.run_weight = 1
  237. if dict['kb_lsh'] == 2 or dict['aBut'] == 1:
  238. self.run_speed = 1.3
  239. else:
  240. self.run_speed = .8
  241. #print(self.run_speed, '---', self.walk_weight, 'walk weight', self.run_weight, 'run weight')
  242. def Exit(self):
  243. self.FSM.owner.arm.stopAction(0)
  244. self.FSM.owner.arm.stopAction(1)
  245. self.FSM.owner.arm.stopAction(2)
  246. self.FSM.owner.arm.stopAction(3)
  247. self.FSM.owner.deck_arm.stopAction(0)
  248. self.FSM.owner.deck_arm.stopAction(1)
  249. self.FSM.owner.deck_arm.stopAction(2)
  250. self.FSM.owner.deck_arm.stopAction(3)
  251. dict['walk'] = 0
  252. #====================================
  253. class WalkAir(State):
  254. def __init__(self,FSM):
  255. super(WalkAir, self).__init__(FSM)
  256. def Enter(self):
  257. self.FSM.stateLife = 1
  258. super(WalkAir, self).Enter()
  259. def Execute(self):
  260. self.FSM.stateLife += 1
  261. self.FSM.owner.check_reset_point()
  262. arm = self.FSM.owner.arm
  263. deck_arm = self.FSM.owner.deck_arm
  264. #arm.playAction('a_jump_t', 23, 23, layer=3, play_mode=1, speed=1, blendin=5)
  265. arm.playAction('c_jump_up', 23, 23, layer=3, play_mode=1, speed=1, blendin=15)
  266. deck_arm.playAction('b_walk_jump', 23, 23, layer=3, play_mode=1, speed=1, blendin=15)
  267. if self.FSM.owner.obj.linearVelocity.z < -10:
  268. self.FSM.owner.obj.linearVelocity.z = -10
  269. moving = self.FSM.owner.walk_movement()
  270. ground_rays = self.FSM.owner.get_ground_ray()
  271. self.FSM.owner.check_throw()
  272. self.check_onboard()
  273. self.FSM.owner.align_walk_z()
  274. self.FSM.owner.check_pause()
  275. if ground_rays[0][0] != None:
  276. dist = self.FSM.owner.get_ground_dist(ground_rays)
  277. if dist < .4:
  278. self.FSM.ToTransition('toWalkLand')
  279. if dist > .5 and self.FSM.owner.obj.worldPosition.z < self.FSM.owner.last_pos.z:
  280. hang_ray = self.FSM.owner.get_hang_ray()
  281. hang_align_ray = self.FSM.owner.get_hang_align_ray()
  282. if hang_ray[0] != None and hang_align_ray[0] != None and self.FSM.prevState != 'WalkHang' and dict['lUD'] < .04:
  283. hr_dist = self.FSM.owner.get_hang_dist(hang_ray)
  284. if hr_dist < .1:
  285. self.FSM.owner.obj.linearVelocity = [0,0,0]
  286. self.FSM.owner.obj.worldPosition.z = hang_ray[1].z - 1
  287. self.FSM.ToTransition('toWalkHang')
  288. def check_onboard(self):
  289. o = self.FSM.owner.obj
  290. # if dict['walk'] == 0:
  291. # o['getonboard'] = True
  292. # self.FSM.ToTransition('toWalkOnboard')
  293. if dict['yBut'] == 1 and dict['last_yBut'] == 0:
  294. o['getonboard'] = True
  295. #self.FSM.ToTransition('toWalkOnboard')
  296. self.FSM.ToTransition('toAirOnboard')
  297. def Exit(self):
  298. self.FSM.owner.arm.stopAction(0)
  299. self.FSM.owner.arm.stopAction(1)
  300. self.FSM.owner.arm.stopAction(2)
  301. self.FSM.owner.arm.stopAction(3)
  302. self.FSM.owner.deck_arm.stopAction(0)
  303. self.FSM.owner.deck_arm.stopAction(1)
  304. self.FSM.owner.deck_arm.stopAction(2)
  305. self.FSM.owner.deck_arm.stopAction(3)
  306. #====================================
  307. class WalkJump(State):
  308. def __init__(self,FSM):
  309. super(WalkJump, self).__init__(FSM)
  310. def Enter(self):
  311. self.FSM.stateLife = 1
  312. dict['camera']['sndmgr'].queue_sound(['walk_grunt', self.FSM.owner.obj, dict['camera']])
  313. arm = self.FSM.owner.arm
  314. deck = self.FSM.owner.deck_arm
  315. #arm.playAction('a_jump_t', 1, 23, layer=3, play_mode=0, speed=1, blendin=5)
  316. arm.playAction('c_jump_up', 1, 23, layer=3, play_mode=0, speed=1, blendin=5)
  317. deck.playAction('b_walk_jump', 1, 23, layer=3, play_mode=0, speed=1, blendin=5)
  318. super(WalkJump, self).Enter()
  319. def Execute(self):
  320. self.FSM.stateLife += 1
  321. arm = self.FSM.owner.arm
  322. o = self.FSM.owner.obj
  323. moving = self.FSM.owner.walk_movement()
  324. self.check_onboard()
  325. self.FSM.owner.check_pause()
  326. if self.FSM.stateLife == 10:
  327. force = [ 0.0, 0.0, dict['walk_jump_force']]
  328. if o.linearVelocity.z < 10:
  329. o.applyForce(force, True)
  330. if self.FSM.stateLife > 27:
  331. self.FSM.ToTransition('toWalkAir')
  332. def check_onboard(self):
  333. o = self.FSM.owner.obj
  334. # if dict['walk'] == 0:
  335. # o['getonboard'] = True
  336. # self.FSM.ToTransition('toWalkOnboard')
  337. if dict['yBut'] == 1 and dict['last_yBut'] == 0:
  338. o['getonboard'] = True
  339. self.FSM.ToTransition('toAirOnboard')
  340. def Exit(self):
  341. pass
  342. #====================================
  343. class WalkLand(State):
  344. def __init__(self,FSM):
  345. super(WalkLand, self).__init__(FSM)
  346. def Enter(self):
  347. self.FSM.stateLife = 1
  348. #self.FSM.owner.arm.playAction('a_jump_t', 23, 50, layer=5, play_mode=0, speed=1, blendin=5)
  349. self.FSM.owner.arm.playAction('c_land', 0, 50, layer=1, play_mode=0, speed=1, blendin=5)
  350. self.FSM.owner.deck_arm.playAction('b_walk_land', 0, 50, layer=1, play_mode=0, speed=1, blendin=5)
  351. dict['camera']['sndmgr'].queue_sound(['walk_land', self.FSM.owner.obj, dict['camera']])
  352. #c_land
  353. super(WalkLand, self).Enter()
  354. def Execute(self):
  355. self.FSM.stateLife += 1
  356. self.FSM.owner.obj.linearVelocity.x *= .8
  357. self.FSM.owner.obj.linearVelocity.y *= .8
  358. # arm = self.FSM.owner.arm
  359. # print('af', arm.getActionFrame(5))
  360. # if arm.getActionFrame(5) > 30:
  361. # print('stopping land')
  362. # arm.stopAction(5)
  363. # arm.playAction('reg_idle1', 1,120, layer=1, play_mode=1, speed=1, blendin=2)
  364. if self.FSM.stateLife > 30:
  365. self.FSM.ToTransition('toWalk')
  366. self.FSM.owner.check_pause()
  367. ground_rays = self.FSM.owner.get_ground_ray()
  368. if ground_rays[0][0] != None:
  369. dist = self.FSM.owner.get_ground_dist(ground_rays)
  370. self.FSM.owner.set_walk_z(dist)
  371. def Exit(self):
  372. pass
  373. #====================================
  374. class WalkHang(State):
  375. def __init__(self,FSM):
  376. super(WalkHang, self).__init__(FSM)
  377. def Enter(self):
  378. self.FSM.stateLife = 1
  379. self.FSM.owner.arm.playAction('c_braced_hang', 0, 36, layer=2, play_mode=0, speed=1, blendin=10)
  380. self.moveable = False
  381. dict['camera']['sndmgr'].queue_sound(['walk_hang', self.FSM.owner.obj, dict['camera']])
  382. self.FSM.owner.drop_deck()
  383. #self.FSM.owner.arm.playAction('c_braced_hang', 36, 50, layer=1, play_mode=1, speed=1, blendin=10)
  384. super(WalkHang, self).Enter()
  385. def Execute(self):
  386. self.FSM.stateLife += 1
  387. self.FSM.owner.obj.linearVelocity = [0,0,0]
  388. #self.FSM.owner.arm.playAction('c_braced_hang', 0, 36, layer=2, play_mode=0, speed=1, blendin=10)
  389. self.FSM.owner.arm.playAction('c_braced_hang', 36, 50, layer=1, play_mode=1, speed=1, blendin=10)
  390. if dict['lUD'] > .04:
  391. self.FSM.ToTransition('toWalkAir')
  392. self.FSM.owner.move_walk_cam()
  393. self.FSM.owner.check_pause()
  394. if self.FSM.stateLife > 25:
  395. self.moveable = True
  396. if self.moveable:
  397. if dict['lUD'] < -.04:
  398. self.FSM.ToTransition('toWalkClimb')
  399. self.FSM.owner.hang_move()
  400. ground_rays = self.FSM.owner.get_ground_ray()
  401. if ground_rays[0][0] != None:
  402. dist = self.FSM.owner.get_ground_dist(ground_rays)
  403. if dist < .4:
  404. self.FSM.ToTransition('toWalkLand')
  405. hang_ray = self.FSM.owner.get_hang_ray()
  406. hang_align_ray = self.FSM.owner.get_hang_align_ray()
  407. #print(hang_align_ray, 'hang_align_ray')
  408. #self.FSM.owner.hang_move()
  409. if hang_ray[0] != None:
  410. hr_dist = self.FSM.owner.get_hang_dist(hang_ray)
  411. #print(hr_dist, 'hang dist')
  412. if hr_dist < .5:
  413. self.FSM.owner.obj.linearVelocity = [0,0,0]
  414. self.FSM.owner.obj.worldPosition.z = hang_ray[1].z - 1
  415. if hang_align_ray[0] != None:
  416. #print(hang_align_ray[0])
  417. v = hang_align_ray[2]
  418. self.FSM.owner.obj.alignAxisToVect(v, 0, .5)
  419. else:
  420. self.FSM.ToTransition('toWalkAir')
  421. if hang_align_ray[0] == None:
  422. self.FSM.ToTransition('toWalkAir')
  423. self.FSM.owner.align_walk_z()
  424. def Exit(self):
  425. pass
  426. #====================================
  427. class WalkClimb(State):
  428. def __init__(self,FSM):
  429. super(WalkClimb, self).__init__(FSM)
  430. def Enter(self):
  431. self.FSM.stateLife = 1
  432. self.FSM.owner.arm.playAction('c_wallclimb', 1, 50, layer=3, play_mode=0, speed=1, blendin=10)
  433. dict['camera']['sndmgr'].queue_sound(['walk_climb', self.FSM.owner.obj, dict['camera']])
  434. super(WalkClimb, self).Enter()
  435. def Execute(self):
  436. self.FSM.stateLife += 1
  437. #self.FSM.ToTransition('toLand')
  438. self.FSM.owner.check_pause()
  439. if self.FSM.stateLife > 25:
  440. self.FSM.owner.obj.applyForce([-300, 0, 80], True)
  441. else:
  442. self.FSM.owner.obj.applyForce([-20, 0, 80], True)
  443. if self.FSM.stateLife > 35:
  444. self.FSM.ToTransition('toWalkLand')
  445. def Exit(self):
  446. pass
  447. #====================================
  448. class WalkHurdle(State):
  449. def __init__(self,FSM):
  450. super(WalkHurdle, self).__init__(FSM)
  451. def Enter(self):
  452. self.FSM.stateLife = 1
  453. super(WalkHurdle, self).Enter()
  454. def Execute(self):
  455. self.FSM.stateLife += 1
  456. #self.FSM.ToTransition('toLand')
  457. def Exit(self):
  458. pass
  459. #====================================
  460. class WalkOnboard(State):
  461. def __init__(self,FSM):
  462. super(WalkOnboard, self).__init__(FSM)
  463. def Enter(self):
  464. self.FSM.stateLife = 1
  465. self.FSM.owner.walking = False
  466. self.FSM.owner.obj['getonboard'] = False
  467. if self.FSM.owner.throw_deck != None:
  468. self.FSM.owner.throw_deck.endObject()
  469. self.FSM.owner.throw_deck = None
  470. self.FSM.owner.show_deck()
  471. dict['walking'] = False
  472. self.FSM.owner.obj['walking'] = False
  473. self.FSM.owner.obj['requestAction'] = 'reg_onboard'
  474. self.FSM.owner.obj['getoffboard'] == False
  475. self.FSM.owner.obj.applyForce([-300, 0, 0], True)
  476. print('walkonboard entered')
  477. super(WalkOnboard, self).Enter()
  478. def Execute(self):
  479. self.FSM.stateLife += 1
  480. self.FSM.ToTransition('toRoll')
  481. def Exit(self):
  482. pass
  483. #====================================
  484. class AirOnboard(State):
  485. def __init__(self,FSM):
  486. super(AirOnboard, self).__init__(FSM)
  487. def Enter(self):
  488. self.FSM.stateLife = 1
  489. self.FSM.owner.walking = False
  490. self.FSM.owner.obj['getonboard'] = False
  491. if self.FSM.owner.throw_deck != None:
  492. self.FSM.owner.throw_deck.endObject()
  493. self.FSM.owner.throw_deck = None
  494. self.FSM.owner.show_deck()
  495. dict['walking'] = False
  496. self.FSM.owner.obj['walking'] = False
  497. #self.FSM.owner.obj['requestAction'] = 'reg_onboard'
  498. self.FSM.owner.arm.playAction('c_land', 0, 50, layer=1, play_mode=0, speed=1, blendin=5)
  499. self.FSM.owner.deck_arm.playAction('b_walk_land', 0, 50, layer=1, play_mode=0, speed=1, blendin=5)
  500. self.FSM.owner.obj['getoffboard'] == False
  501. self.FSM.owner.obj.applyForce([-300, 0, 0], True)
  502. print('air entered')
  503. super(AirOnboard, self).Enter()
  504. def Execute(self):
  505. self.FSM.stateLife += 1
  506. self.FSM.ToTransition('toRoll')
  507. def Exit(self):
  508. pass
  509. #====================================
  510. class Roll(State):
  511. def __init__(self,FSM):
  512. super(Roll, self).__init__(FSM)
  513. def Enter(self):
  514. self.FSM.stateLife = 1
  515. # self.FSM.owner.obj['getoffboard'] == False
  516. # dict['walk'] = 0
  517. print('roll entered')
  518. super(Roll, self).Enter()
  519. def Execute(self):
  520. self.FSM.stateLife += 1
  521. if dict['walk'] == 1 or self.FSM.owner.obj['getoffboard'] == True:
  522. dict['walk'] = 1
  523. self.FSM.owner.obj['getoffboard'] = True
  524. #self.FSM.ToTransition('toWalk')
  525. self.FSM.ToTransition('toOffboard')
  526. #print('fsm to walk', dict['walk'], self.FSM.owner.obj['getoffboard'])
  527. if self.FSM.owner.obj['fall'] == True:
  528. self.FSM.ToTransition('toRagdoll')
  529. #print('rolling')
  530. #self.FSM.ToTransition('toLand')
  531. def Exit(self):
  532. pass
  533. #====================================
  534. class Offboard(State):
  535. def __init__(self,FSM):
  536. super(Offboard, self).__init__(FSM)
  537. def Enter(self):
  538. self.FSM.stateLife = 1
  539. o = self.FSM.owner.obj
  540. if o['stance']:
  541. o.applyRotation([0,0,3.14], True)
  542. o['stance'] = False
  543. self.FSM.owner.arm.playAction('fak_noffboard', 0,24, layer=2, play_mode=0, speed=1, blendin=0)
  544. self.FSM.owner.deck_arm.playAction('b_reg_offboard', 0,30, layer=2, play_mode=0, speed=1, blendin=0)
  545. else:
  546. self.FSM.owner.arm.playAction('reg_noffboard', 0,40, layer=2, play_mode=0, speed=1, blendin=0)
  547. self.FSM.owner.deck_arm.playAction('b_reg_offboard', 0,40, layer=2, play_mode=0, speed=1, blendin=0)
  548. print('fsm getting off board')
  549. super(Offboard, self).Enter()
  550. def Execute(self):
  551. self.FSM.stateLife += 1
  552. self.FSM.ToTransition('toWalk')
  553. def Exit(self):
  554. pass
  555. #====================================
  556. class Ragdoll(State):
  557. def __init__(self,FSM):
  558. super(Ragdoll, self).__init__(FSM)
  559. def Enter(self):
  560. self.FSM.stateLife = 1
  561. self.FSM.owner.obj['ragdoll_active'] = True
  562. self.FSM.owner.drop_deck()
  563. print('ragdoll_player_fsm entered')
  564. super(Ragdoll, self).Enter()
  565. def Execute(self):
  566. self.FSM.stateLife += 1
  567. #print('ragdolling')
  568. if dict['yBut'] == 1:
  569. self.FSM.owner.obj['fall'] = False
  570. self.FSM.owner.cont.activate(self.FSM.owner.cont.actuators['walk'])
  571. #self.FSM.ToTransition('toWalk')
  572. self.FSM.ToTransition('toOffboard')
  573. self.FSM.owner.move_walk_cam()
  574. self.FSM.owner.check_pause()
  575. def Exit(self):
  576. print('ragdoll_player_fsm exited')
  577. self.FSM.owner.obj['ragdoll_active'] = False
  578. #pass
  579. #====================================
  580. class Dropin(State):
  581. def __init__(self,FSM):
  582. super(Dropin, self).__init__(FSM)
  583. def Enter(self):
  584. self.FSM.stateLife = 1
  585. if self.FSM.owner.throw_deck != None:
  586. self.FSM.owner.throw_deck.endObject()
  587. self.FSM.owner.throw_deck = None
  588. self.FSM.owner.show_deck()
  589. self.FSM.owner.arm.playAction('reg_dropin3', 30, 50, layer=2, play_mode=0, speed=1, blendin=5)
  590. self.FSM.owner.deck_arm.playAction('b_reg_dropin', 30, 50, layer=2, play_mode=0, speed=1, blendin=5)
  591. self.out_triggered = False
  592. # #player armature action name, start, end frames
  593. # 'reg_dropin3', 30, 50,
  594. # #deck action name, start, end frames
  595. # 'b_reg_dropin', 30, 50,
  596. # #layer, speed, mode (0 = play, 1 = loop), blendin
  597. # 1, .5, 0, 15,
  598. # #intro, length
  599. super(Dropin, self).Enter()
  600. def Execute(self):
  601. self.FSM.stateLife += 1
  602. #print('dropin')
  603. eu = self.FSM.owner.get_vert_rot(self.FSM.owner.obj, self.FSM.owner.dropin_obj[0])
  604. #print(eu, 'eu')
  605. self.FSM.owner.arm.playAction('reg_dropin3', 50, 50, layer=1, play_mode=1, speed=1, blendin=5)
  606. self.FSM.owner.deck_arm.playAction('b_reg_dropin', 50, 50, layer=1, play_mode=1, speed=1, blendin=5)
  607. if dict['last_yBut'] == True and dict['yBut'] == False:
  608. self.out_triggered = True
  609. if self.out_triggered:
  610. self.FSM.owner.arm.playAction('reg_dropin3', 60, 80, layer=2, play_mode=0, speed=1, blendin=5)
  611. self.FSM.owner.deck_arm.playAction('b_reg_dropin', 60, 80, layer=2, play_mode=0, speed=1, blendin=5)
  612. self.FSM.owner.obj.applyForce([-15, 0, 0], True)
  613. self.FSM.owner.obj.applyRotation([0, -.01, 0], True)
  614. else:
  615. self.FSM.owner.move_to_te()
  616. if self.FSM.owner.arm.getActionFrame(2)> 78:
  617. self.FSM.ToTransition('toRoll')
  618. self.FSM.owner.move_walk_cam()
  619. self.FSM.owner.check_pause()
  620. def Exit(self):
  621. self.FSM.owner.obj['getonboard'] = True
  622. self.FSM.owner.walking = False
  623. #self.FSM.owner.obj['getonboard'] = False
  624. dict['walking'] = False
  625. self.FSM.owner.obj['walking'] = False
  626. self.FSM.owner.obj['requestAction'] = 'reg_air'
  627. self.FSM.owner.obj['getoffboard'] == False
  628. #====================================
  629. #====================================
  630. class Pause(State):
  631. def __init__(self,FSM):
  632. super(Pause, self).__init__(FSM)
  633. def Enter(self):
  634. self.FSM.stateLife = 1
  635. super(Pause, self).Enter()
  636. def Execute(self):
  637. self.FSM.stateLife += 1
  638. #print('******paused')
  639. self.FSM.owner.obj['walk'] = True
  640. if dict['npause'] == False:
  641. n = self.FSM.prevState.__class__.__name__
  642. n = 'to' + n
  643. #self.FSM.ToTransition('toWalk')
  644. self.FSM.ToTransition(n)
  645. def Exit(self):
  646. pass
  647. #====================================