From bab3da450c8335ffe6f4d1f7ac421f96899100b1 Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Fri, 1 Apr 2005 00:51:43 +0000 Subject: [PATCH] added state change broadcast support --- direct/src/fsm/FSM.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/direct/src/fsm/FSM.py b/direct/src/fsm/FSM.py index d129e245b7..b745b3f14d 100644 --- a/direct/src/fsm/FSM.py +++ b/direct/src/fsm/FSM.py @@ -123,8 +123,13 @@ class FSM(DirectObject.DirectObject): notify = DirectNotifyGlobal.directNotify.newCategory("FSM") + SerialNum = 0 + def __init__(self, name): self.name = name + self._serialNum = FSM.SerialNum + FSM.SerialNum += 1 + self._broadcastStateChanges = False # Initially, we are in the Off state by convention. self.state = 'Off' @@ -155,6 +160,15 @@ class FSM(DirectObject.DirectObject): if self.state != 'Off': self.__setState('Off') + def setBroadcastStateChanges(self, doBroadcast): + self._broadcastStateChanges = doBroadcast + def getStateChangeEvent(self): + # if setBroadcastStateChanges(True), this event will be sent through + # the messenger on every state change. The new and old states are + # accessible as self.oldState and self.newState, and the transition + # functions will already have been called. + return 'FSM-%s-%s-stateChange' % (self._serialNum, self.name) + def getCurrentOrNextState(self): # Returns the current state if we are in a state now, or the # state we are transitioning into if we are currently within @@ -355,6 +369,9 @@ class FSM(DirectObject.DirectObject): del self.oldState del self.newState raise + + if self._broadcastStateChanges: + messenger.send(self.getStateChangeEvent()) self.state = newState del self.oldState