123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
-
- import StatesProg
-
- #====================================
- class Transition(object):
- def __init__(self, toState):
- self.toState = toState
- def Execute(self):
- pass
-
- #===================================
-
- class FSM(object):
- def __init__ (self, character, owner):
- self.char = character
- self.states = {}
- self.transitions = {}
- self.curState = None
- self.prevState = None
- self.trans = None
- self.stateLife = 0
- self.owner = owner
- self.name = None
- self.last_state_notes = None
-
- def AddTransition(self, transName, transition):
- self.transitions[transName] = transition
-
- def AddState(self, stateName, state):
- self.states[stateName] = state
- self.states[stateName].name = state
-
- def SetState(self, stateName):
- self.prevState = self.curState
- self.curState = self.states[stateName]
-
- def ToTransition(self, toTrans):
- self.trans = self.transitions[toTrans]
-
- def Execute(self, owner):
- if (self.trans):
- self.owner = owner
- self.curState.Exit()
- self.trans.Execute()
- self.SetState(self.trans.toState)
- self.curState.Enter()
- self.trans = None
-
- self.curState.Execute()
-
- #====================================
-
- Char = type("Char",(object,),{})
-
- #===================================
-
-
- #===================================
-
- class ProgFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
- state_list = [
- 'Example',
- 'Main',
- 'Startup',
- 'Intro',
- 'LoadDefault',
- 'PadPlayer',
- 'SeqPlayer',
- 'SelectSound',
- 'SelectPattern',
- 'EditSoundSequence',
- 'EditSong',
- 'Util',
- 'File',
- 'Ball',
- 'Clock',
- 'Exit',
- 'SelTheme',
- 'OpenSong',
- 'EnterText'
- ]
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesProg, s)(self.FSM))
- t = 'to' + s
- self.FSM.AddTransition(t, Transition(s))
-
- if self.FSM.curState == None:
- self.FSM.SetState('Startup')
-
- def Execute(self):
- self.FSM.Execute(self.owner)
-
- #===================================
-
|