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.

FSM.py 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import bge
  2. import StatesNpcPed
  3. import StatesCamera
  4. #====================================
  5. class Transition(object):
  6. def __init__(self, toState):
  7. self.toState = toState
  8. def Execute(self):
  9. pass
  10. #===================================
  11. class FSM(object):
  12. def __init__ (self, character, owner):
  13. self.char = character
  14. self.states = {}
  15. self.transitions = {}
  16. self.curState = None
  17. self.prevState = None
  18. self.trans = None
  19. self.stateLife = 0
  20. self.owner = owner
  21. self.name = None
  22. def AddTransition(self, transName, transition):
  23. self.transitions[transName] = transition
  24. def AddState(self, stateName, state):
  25. self.states[stateName] = state
  26. self.states[stateName].name = state
  27. def SetState(self, stateName):
  28. self.prevState = self.curState
  29. self.curState = self.states[stateName]
  30. def ToTransition(self, toTrans):
  31. self.trans = self.transitions[toTrans]
  32. def Execute(self, owner):
  33. if (self.trans):
  34. self.owner = owner
  35. self.curState.Exit()
  36. self.trans.Execute()
  37. self.SetState(self.trans.toState)
  38. self.curState.Enter()
  39. self.trans = None
  40. self.curState.Execute()
  41. #====================================
  42. Char = type("Char",(object,),{})
  43. #===================================
  44. class NpcPed(Char):
  45. def __init__(self, owner):
  46. self.FSM = FSM(self, owner)
  47. self.owner = owner
  48. state_list = [
  49. 'Example']
  50. for s in state_list:
  51. self.FSM.AddState(s, getattr(StatesNpcPed, s)(self.FSM))
  52. t = 'to' + s
  53. self.FSM.AddTransition(t, Transition(s))
  54. if self.FSM.curState == None:
  55. self.FSM.SetState('Example')
  56. def Execute(self):
  57. self.FSM.Execute(self.owner)
  58. #===================================
  59. class CameraFSM(Char):
  60. def __init__(self, owner):
  61. self.FSM = FSM(self, owner)
  62. self.owner = owner
  63. state_list = [
  64. 'Example']
  65. for s in state_list:
  66. self.FSM.AddState(s, getattr(StatesCamera, s)(self.FSM))
  67. t = 'to' + s
  68. self.FSM.AddTransition(t, Transition(s))
  69. if self.FSM.curState == None:
  70. self.FSM.SetState('Example')
  71. def Execute(self):
  72. self.FSM.Execute(self.owner)