Bläddra i källkod

fixes for isOn and isOpen

Dave Schuyler 22 år sedan
förälder
incheckning
1061e277bf
2 ändrade filer med 58 tillägg och 38 borttagningar
  1. 16 20
      direct/src/fsm/FourState.py
  2. 42 18
      direct/src/fsm/FourStateAI.py

+ 16 - 20
direct/src/fsm/FourState.py

@@ -85,10 +85,7 @@ class FourState:
         off (and so is state 2 which is oposite of 4 and therefore 
         off (and so is state 2 which is oposite of 4 and therefore 
         oposite of 'on').
         oposite of 'on').
         """
         """
-        self.isOn = 0 # used in debugPrint()
-        assert(self.debugPrint(
-                "FourState(names=%s)"
-                %(names)))
+        assert(self.debugPrint("FourState(names=%s)"%(names)))
         self.doLaterTask = None
         self.doLaterTask = None
         self.names = names
         self.names = names
         self.durations = durations
         self.durations = durations
@@ -127,28 +124,25 @@ class FourState:
                           )
                           )
         self.fsm.enterInitialState()
         self.fsm.enterInitialState()
     
     
-    def setIsOn(self, isOn):
-        assert(self.debugPrint("setIsOn(isOn=%s)"%(isOn,)))
-        if self.isOn != isOn:
-            self.isOn = isOn
-            self.changedOnState()
+    #def setIsOn(self, isOn):
+    #    assert(self.debugPrint("setIsOn(isOn=%s)"%(isOn,)))
+    #    pass
     
     
-    def getIsOn(self):
-        assert(self.debugPrint("getIsOn() returning %s"%(self.isOn,)))
-        return self.isOn
+    #def getIsOn(self):
+    #    assert(self.debugPrint("getIsOn() returning %s"%(self.isOn,)))
+    #    return self.stateIndex==4
 
 
-    def changedOnState(self):
+    def changedOnState(self, isOn):
         """
         """
         Allow derived classes to overide this.
         Allow derived classes to overide this.
         """
         """
-        pass
+        assert(self.debugPrint("changedOnState(isOn=%s)"%(isOn,)))
     
     
     ##### state 0 #####
     ##### state 0 #####
     
     
     def enterState0(self):
     def enterState0(self):
         assert(self.debugPrint("enter0()"))
         assert(self.debugPrint("enter0()"))
         self.stateIndex = 0
         self.stateIndex = 0
-        self.setIsOn(0)
     
     
     def exitState0(self):
     def exitState0(self):
         assert(self.debugPrint("exit0()"))
         assert(self.debugPrint("exit0()"))
@@ -156,8 +150,8 @@ class FourState:
     ##### state 1 #####
     ##### state 1 #####
     
     
     def enterState1(self):
     def enterState1(self):
+        assert(self.debugPrint("enterState1()"))
         self.stateIndex = 1
         self.stateIndex = 1
-        self.setIsOn(0)
     
     
     def exitState1(self):
     def exitState1(self):
         assert(self.debugPrint("exitState1()"))
         assert(self.debugPrint("exitState1()"))
@@ -165,8 +159,8 @@ class FourState:
     ##### state 2 #####
     ##### state 2 #####
     
     
     def enterState2(self):
     def enterState2(self):
+        assert(self.debugPrint("enterState2()"))
         self.stateIndex = 2
         self.stateIndex = 2
-        self.setIsOn(0)
     
     
     def exitState2(self):
     def exitState2(self):
         assert(self.debugPrint("exitState2()"))
         assert(self.debugPrint("exitState2()"))
@@ -174,8 +168,8 @@ class FourState:
     ##### state 3 #####
     ##### state 3 #####
     
     
     def enterState3(self):
     def enterState3(self):
+        assert(self.debugPrint("enterState3()"))
         self.stateIndex = 2
         self.stateIndex = 2
-        self.setIsOn(0)
     
     
     def exitState3(self):
     def exitState3(self):
         assert(self.debugPrint("exitState3()"))
         assert(self.debugPrint("exitState3()"))
@@ -183,15 +177,17 @@ class FourState:
     ##### state 4 #####
     ##### state 4 #####
     
     
     def enterState4(self):
     def enterState4(self):
+        assert(self.debugPrint("enterState4()"))
         self.stateIndex = 4
         self.stateIndex = 4
-        self.setIsOn(1)
+        self.changedOnState(1)
     
     
     def exitState4(self):
     def exitState4(self):
         assert(self.debugPrint("exitState4()"))
         assert(self.debugPrint("exitState4()"))
+        self.changedOnState(0)
     
     
     if __debug__:
     if __debug__:
         def debugPrint(self, message):
         def debugPrint(self, message):
             """for debugging"""
             """for debugging"""
             return self.notify.debug("%d (%d) %s"%(
             return self.notify.debug("%d (%d) %s"%(
-                    id(self), self.isOn, message))
+                    id(self), self.stateIndex==4, message))
 
 

+ 42 - 18
direct/src/fsm/FourStateAI.py

@@ -91,7 +91,6 @@ class FourStateAI:
         off (and so is state 2 which is oposite of state 4 and therefore 
         off (and so is state 2 which is oposite of state 4 and therefore 
         oposite of 'on').
         oposite of 'on').
         """
         """
-        self.isOn = 0 # used in debugPrint()
         assert(self.debugPrint(
         assert(self.debugPrint(
                 "FourStateAI(names=%s, durations=%s)"
                 "FourStateAI(names=%s, durations=%s)"
                 %(names, durations)))
                 %(names, durations)))
@@ -144,28 +143,46 @@ class FourStateAI:
         del self.fsm
         del self.fsm
     
     
     def getInitialState(self):
     def getInitialState(self):
+        assert(self.debugPrint("getInitialState() returning %s"%(self.stateIndex,)))
         return self.stateIndex
         return self.stateIndex
     
     
+    def setInitialState(self):
+        assert(self.debugPrint("setInitialState()"))
+        self.sendUpdate('setInitialState', [self.getInitialState()])
+    
     def setIsOn(self, isOn):
     def setIsOn(self, isOn):
         assert(self.debugPrint("setIsOn(isOn=%s)"%(isOn,)))
         assert(self.debugPrint("setIsOn(isOn=%s)"%(isOn,)))
-        if self.isOn != isOn:
-            self.isOn = isOn
-            self.changedOnState()
+        if isOn:
+            if self.stateIndex == 3:
+                self.stateIndex = 4
+                self.fsm.request(self.states[self.stateIndex])
+            elif self.stateIndex != 4:
+                self.stateIndex = 3
+                self.fsm.request(self.states[self.stateIndex])
+        else:
+            if self.stateIndex == 3:
+                self.stateIndex = 4
+                self.fsm.request(self.states[self.stateIndex])
+            elif self.stateIndex == 4:
+                self.stateIndex = 1
+                self.fsm.request(self.states[self.stateIndex])
     
     
-    def getIsOn(self):
-        assert(self.debugPrint("getIsOn() returning %s"%(self.isOn,)))
-        return self.isOn
+    #def getIsOn(self):
+    #    assert(self.debugPrint("getIsOn() returning %s"%(self.stateIndex==4,)))
+    #    return self.stateIndex==4
 
 
-    def changedOnState(self):
+    def changedOnState(self, isOn):
         """
         """
         Allow derived classes to overide this.
         Allow derived classes to overide this.
+        The self.isOn value has toggled.  Call getIsOn() to
+        get the current state.
         """
         """
-        pass
+        assert(self.debugPrint("changedOnState(isOn=%s)"%(isOn,)))
 
 
     ##### states #####
     ##### states #####
 
 
     def switchToNextStateTask(self, task):
     def switchToNextStateTask(self, task):
-        assert(self.debugPrint("switchToState1Task()"))
+        assert(self.debugPrint("switchToNextStateTask()"))
         self.fsm.request(self.states[self.nextStateIndex])
         self.fsm.request(self.states[self.nextStateIndex])
         return Task.done
         return Task.done
 
 
@@ -174,14 +191,15 @@ class FourStateAI:
         This function is intentionaly simple so that derived classes 
         This function is intentionaly simple so that derived classes 
         may easily alter the network message.
         may easily alter the network message.
         """
         """
+        assert(self.debugPrint("distributeStateChange()"))
+        self.setInitialState()
         self.sendUpdate('setState', [self.stateIndex, globalClockDelta.getRealNetworkTime()])
         self.sendUpdate('setState', [self.stateIndex, globalClockDelta.getRealNetworkTime()])
     
     
-    def enterStateN(self, isOn, stateIndex, nextStateIndex):
+    def enterStateN(self, stateIndex, nextStateIndex):
         assert(self.debugPrint("enterStateN(stateIndex=%s, nextStateIndex=%s)"%(
         assert(self.debugPrint("enterStateN(stateIndex=%s, nextStateIndex=%s)"%(
             stateIndex, nextStateIndex)))
             stateIndex, nextStateIndex)))
         self.stateIndex = stateIndex
         self.stateIndex = stateIndex
         self.nextStateIndex = nextStateIndex
         self.nextStateIndex = nextStateIndex
-        self.setIsOn(isOn)
         self.distributeStateChange()
         self.distributeStateChange()
         if self.durations[stateIndex] is not None:
         if self.durations[stateIndex] is not None:
             assert self.doLaterTask is None
             assert self.doLaterTask is None
@@ -191,6 +209,7 @@ class FourStateAI:
                 "enterStateN-timer-%s"%id(self))
                 "enterStateN-timer-%s"%id(self))
     
     
     def exitStateN(self):
     def exitStateN(self):
+        assert(self.debugPrint("exitStateN()"))
         if self.doLaterTask:
         if self.doLaterTask:
             taskMgr.remove(self.doLaterTask)
             taskMgr.remove(self.doLaterTask)
             self.doLaterTask=None
             self.doLaterTask=None
@@ -200,7 +219,6 @@ class FourStateAI:
     def enterState0(self):
     def enterState0(self):
         assert(self.debugPrint("enter0()"))
         assert(self.debugPrint("enter0()"))
         self.stateIndex = 0
         self.stateIndex = 0
-        self.isOn = 0
     
     
     def exitState0(self):
     def exitState0(self):
         assert(self.debugPrint("exit0()"))
         assert(self.debugPrint("exit0()"))
@@ -208,7 +226,8 @@ class FourStateAI:
     ##### state 1 #####
     ##### state 1 #####
     
     
     def enterState1(self):
     def enterState1(self):
-        self.enterStateN(0, 1, 2)
+        #assert(self.debugPrint("enterState1()"))
+        self.enterStateN(1, 2)
     
     
     def exitState1(self):
     def exitState1(self):
         assert(self.debugPrint("exitState1()"))
         assert(self.debugPrint("exitState1()"))
@@ -217,7 +236,8 @@ class FourStateAI:
     ##### state 2 #####
     ##### state 2 #####
     
     
     def enterState2(self):
     def enterState2(self):
-        self.enterStateN(0, 2, 3)
+        #assert(self.debugPrint("enterState2()"))
+        self.enterStateN(2, 3)
     
     
     def exitState2(self):
     def exitState2(self):
         assert(self.debugPrint("exitState2()"))
         assert(self.debugPrint("exitState2()"))
@@ -226,7 +246,8 @@ class FourStateAI:
     ##### state 3 #####
     ##### state 3 #####
     
     
     def enterState3(self):
     def enterState3(self):
-        self.enterStateN(0, 3, 4)
+        #assert(self.debugPrint("enterState3()"))
+        self.enterStateN(3, 4)
     
     
     def exitState3(self):
     def exitState3(self):
         assert(self.debugPrint("exitState3()"))
         assert(self.debugPrint("exitState3()"))
@@ -235,15 +256,18 @@ class FourStateAI:
     ##### state 4 #####
     ##### state 4 #####
     
     
     def enterState4(self):
     def enterState4(self):
-        self.enterStateN(1, 4, 1)
+        assert(self.debugPrint("enterState4()"))
+        self.enterStateN(4, 1)
+        self.changedOnState(1)
     
     
     def exitState4(self):
     def exitState4(self):
         assert(self.debugPrint("exitState4()"))
         assert(self.debugPrint("exitState4()"))
         self.exitStateN()
         self.exitStateN()
+        self.changedOnState(0)
     
     
     if __debug__:
     if __debug__:
         def debugPrint(self, message):
         def debugPrint(self, message):
             """for debugging"""
             """for debugging"""
             return self.notify.debug("%d (%d) %s"%(
             return self.notify.debug("%d (%d) %s"%(
-                    id(self), self.isOn, message))
+                    id(self), self.stateIndex==4, message))