From 79de5d6173c653be0ac399eae5aa7caca52f4b3e Mon Sep 17 00:00:00 2001 From: Jason Persampieri Date: Fri, 3 Sep 2004 00:06:16 +0000 Subject: [PATCH] added ability to have an ordered list of states --- direct/src/fsm/FSM.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/direct/src/fsm/FSM.py b/direct/src/fsm/FSM.py index 0a6ab15862..45eca6ac0e 100644 --- a/direct/src/fsm/FSM.py +++ b/direct/src/fsm/FSM.py @@ -227,6 +227,29 @@ class FSM(DirectObject.DirectObject): return self.defaultFilter(request, args) + def setStateArray(self, stateArray): + """array of unique states to iterate through""" + self.stateArray = stateArray + + def requestNext(self, *args): + """request the 'next' state in the predefined state array""" + assert (self.state in self.stateArray) + + curIndex = self.stateArray.index(self.state) + newIndex = (curIndex + 1) % len(self.stateArray) + + self.request(self.stateArray[newIndex], args) + + def requestPrev(self, *args): + """request the 'previous' state in the predefined state array""" + assert (self.state in self.stateArray) + + curIndex = self.stateArray.index(self.state) + newIndex = (curIndex - 1) % len(self.stateArray) + + self.request(self.stateArray[newIndex], args) + + def __setState(self, newState, *args): # Internal function to change unconditionally to the indicated # state. @@ -246,7 +269,7 @@ class FSM(DirectObject.DirectObject): # Calls the appropriate enter or exit function when # transitioning between states, if it exists. assert(self.state == None) - + func = getattr(self, name, None) if func: func(*args)