123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import bge
-
- import StatesNpcPed
- import StatesCamera
-
- #====================================
- 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
-
- 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 NpcPed(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
- state_list = [
- 'Example']
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesNpcPed, s)(self.FSM))
- t = 'to' + s
- self.FSM.AddTransition(t, Transition(s))
-
- if self.FSM.curState == None:
- self.FSM.SetState('Example')
-
- def Execute(self):
- self.FSM.Execute(self.owner)
-
- #===================================
-
- class CameraFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
- state_list = [
- 'Example']
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesCamera, s)(self.FSM))
- t = 'to' + s
- self.FSM.AddTransition(t, Transition(s))
-
- if self.FSM.curState == None:
- self.FSM.SetState('Example')
-
- def Execute(self):
- self.FSM.Execute(self.owner)
|