raspberry pi zero based drum machine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

FSM.py 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import StatesProg
  2. #====================================
  3. class Transition(object):
  4. def __init__(self, toState):
  5. self.toState = toState
  6. def Execute(self):
  7. pass
  8. #===================================
  9. class FSM(object):
  10. def __init__ (self, character, owner):
  11. self.char = character
  12. self.states = {}
  13. self.transitions = {}
  14. self.curState = None
  15. self.prevState = None
  16. self.trans = None
  17. self.stateLife = 0
  18. self.owner = owner
  19. self.name = None
  20. self.last_state_notes = None
  21. def AddTransition(self, transName, transition):
  22. self.transitions[transName] = transition
  23. def AddState(self, stateName, state):
  24. self.states[stateName] = state
  25. self.states[stateName].name = state
  26. def SetState(self, stateName):
  27. self.prevState = self.curState
  28. self.curState = self.states[stateName]
  29. def ToTransition(self, toTrans):
  30. self.trans = self.transitions[toTrans]
  31. def Execute(self, owner):
  32. if (self.trans):
  33. self.owner = owner
  34. self.curState.Exit()
  35. self.trans.Execute()
  36. self.SetState(self.trans.toState)
  37. self.curState.Enter()
  38. self.trans = None
  39. self.curState.Execute()
  40. #====================================
  41. Char = type("Char",(object,),{})
  42. #===================================
  43. #===================================
  44. class ProgFSM(Char):
  45. def __init__(self, owner):
  46. self.FSM = FSM(self, owner)
  47. self.owner = owner
  48. state_list = [
  49. 'Example',
  50. 'Main',
  51. 'Startup',
  52. 'Intro',
  53. 'LoadDefault',
  54. 'PadPlayer',
  55. 'SeqPlayer',
  56. 'SelectSound',
  57. 'SelectPattern',
  58. 'EditSoundSequence',
  59. 'EditSong',
  60. 'Util',
  61. 'File',
  62. 'Ball',
  63. 'Clock',
  64. 'Exit',
  65. 'SelTheme',
  66. 'OpenSong',
  67. 'EnterText',
  68. 'LoadSound',
  69. 'Shutdown',
  70. 'Reboot',
  71. 'Ping',
  72. 'Wifi',
  73. 'Defender',
  74. 'Update'
  75. ]
  76. for s in state_list:
  77. self.FSM.AddState(s, getattr(StatesProg, s)(self.FSM))
  78. t = 'to' + s
  79. self.FSM.AddTransition(t, Transition(s))
  80. if self.FSM.curState == None:
  81. self.FSM.SetState('Startup')
  82. def Execute(self):
  83. self.FSM.Execute(self.owner)
  84. #===================================