diff --git a/direct/src/fsm/FSM.py b/direct/src/fsm/FSM.py index 057a98b861..1aa39185c8 100644 --- a/direct/src/fsm/FSM.py +++ b/direct/src/fsm/FSM.py @@ -192,7 +192,8 @@ class FSM(DirectObject): self.__enter(aState, enterArgList) assert(not self.__internalStateInFlux) - def request(self, aStateName, enterArgList=[], exitArgList=[]): + def request(self, aStateName, enterArgList=[], exitArgList=[], + force=0): """request(self, string) Attempt transition from currentState to given one. Return true is transition exists to given state, @@ -224,7 +225,7 @@ class FSM(DirectObject): FSM.notify.error("[%s]: request: %s, no such state" % (self.__name, aStateName)) - if (aStateName in self.__currentState.getTransitions()): + if force or (aStateName in self.__currentState.getTransitions()): self.__transition(aState, enterArgList, exitArgList) @@ -261,6 +262,10 @@ class FSM(DirectObject): return 0 + def forceTransition(self, aStateName, enterArgList=[], exitArgList=[]): + """ force a transition """ + self.request(aStateName, enterArgList, exitArgList, force=1) + def conditional_request(self, aStateName, enterArgList=[], exitArgList=[]): """request(self, string) Attempt transition from currentState to given one, if it exists.