123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- import bge
-
- import StatesGame
- import StatesPlayer
- import StatesWalker
- import StatesCamera
- import StatesCar
- import StatesEa
- import StatesTrain
-
- #====================================
- 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 GameFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
- state_list = [
- 'Example',
- 'Startup',
- 'Initer',
- 'LoadLevel',
- 'GameOn']
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesGame, 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)
-
- #===================================
-
- class PlayerFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
- state_list = [
- 'Example',
- 'Startup',
- 'Walk',
- 'Roll']
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesPlayer, 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)
-
- #===================================
-
- #===================================
-
- 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)
-
- #===================================
-
- class CarFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
-
- state_list = [
- 'Example',
- 'Activate',
- 'ExitParallelPark',
- 'EnterParallelPark',
- 'NavigateToTarget',
- 'RequestPath',
- 'EnterPerpPark',
- 'ExitPerpPark']
-
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesCar, 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 WalkerFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
-
- state_list = [
- 'Example',
- 'Activate',
- 'ExitParallelPark',
- 'EnterParallelPark',
- 'NavigateToTarget',
- 'RequestPath',
- 'HitBySkater',
- 'WalkingHitBySkater',
- 'Dance1',
- 'GoToSleep']
-
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesWalker, 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 TrainFSM(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(StatesTrain, 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 EaFSM(Char):
- def __init__(self, owner):
- self.FSM = FSM(self, owner)
- self.owner = owner
-
-
- state_list = [
- 'Example',
- 'Land']
-
-
- for s in state_list:
- self.FSM.AddState(s, getattr(StatesEa, 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)
|