1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
-
- 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'
- ]
-
- 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)
-
- #===================================
-
|