Browse Source

fixed factory crosstalk problem

Darren Ranalli 22 years ago
parent
commit
6a87e89a43

+ 1 - 1
direct/src/level/CutScene.py

@@ -183,7 +183,7 @@ class CutScene(BasicEntities.NodePathEntity, DirectObject.DirectObject):
         assert(self.debugPrint("setStartStop(event=%s)"%(event,)))
         assert(self.debugPrint("setStartStop(event=%s)"%(event,)))
         if self.startStopEvent:
         if self.startStopEvent:
             self.ignore(self.startStopEvent)
             self.ignore(self.startStopEvent)
-        self.startStopEvent = "switch-%s"%(event,)
+        self.startStopEvent = self.getOutputEventName(event)
         if self.startStopEvent:
         if self.startStopEvent:
             self.accept(self.startStopEvent, self.startOrStop)
             self.accept(self.startStopEvent, self.startOrStop)
     
     

+ 13 - 0
direct/src/level/Entity.py

@@ -49,6 +49,19 @@ class Entity(DirectObject):
         del self.level
         del self.level
         del self.entId
         del self.entId
         
         
+    def getUniqueName(self, name, entId=None):
+        """returns a name that is unique for a particular entity;
+        defaults to this entity"""
+        if entId is None:
+            entId = self.entId
+        return '%s-%s-%s' % (name, self.level.levelId, entId)
+
+    def getOutputEventName(self, entId=None):
+        """returns the event generated by an entity; defaults to this entity"""
+        if entId is None:
+            entId = self.entId
+        return self.getUniqueName('entityOutput', entId)
+
     def getZoneEntId(self):
     def getZoneEntId(self):
         """returns entId of zone that contains this entity"""
         """returns entId of zone that contains this entity"""
         return self.level.getEntityZoneEntId(self.entId)
         return self.level.getEntityZoneEntId(self.entId)

+ 3 - 1
direct/src/level/Level.py

@@ -38,7 +38,9 @@ class Level:
 
 
     def initializeLevel(self, levelId, levelSpec, scenarioIndex):
     def initializeLevel(self, levelId, levelSpec, scenarioIndex):
         """subclass should call this as soon as it has located
         """subclass should call this as soon as it has located
-        its spec data"""
+        its spec data. levelId should be a unique integer (a doId works
+        just fine) that differentiates this level from all other levels
+        that may exist concurrently."""
         self.levelId = levelId
         self.levelId = levelId
         self.levelSpec = levelSpec
         self.levelSpec = levelSpec
         self.scenarioIndex = scenarioIndex
         self.scenarioIndex = scenarioIndex

+ 8 - 8
direct/src/level/LogicGate.py

@@ -38,32 +38,32 @@ import Entity
 def andTest(self, a, b):
 def andTest(self, a, b):
     assert(self.debugPrint("andTest(a=%s, b=%s)"%(a, b)))
     assert(self.debugPrint("andTest(a=%s, b=%s)"%(a, b)))
     if b:
     if b:
-        messenger.send(self.getName(), [a])
+        messenger.send(self.getOutputEventName(), [a])
 
 
 def orTest(self, a, b):
 def orTest(self, a, b):
     assert(self.debugPrint("orTest(a=%s, b=%s)"%(a, b)))
     assert(self.debugPrint("orTest(a=%s, b=%s)"%(a, b)))
     if not b:
     if not b:
-        messenger.send(self.getName(), [a])
+        messenger.send(self.getOutputEventName(), [a])
     # else: ...we already sent the messege when b was set.
     # else: ...we already sent the messege when b was set.
 
 
 def xorTest(self, a, b):
 def xorTest(self, a, b):
     assert(self.debugPrint("xorTest(a=%s, b=%s)"%(a, b)))
     assert(self.debugPrint("xorTest(a=%s, b=%s)"%(a, b)))
-    messenger.send(self.getName(), [(not (a and b)) and (a or b)])
+    messenger.send(self.getOutputEventName(), [(not (a and b)) and (a or b)])
 
 
 def nandTest(self, a, b):
 def nandTest(self, a, b):
     assert(self.debugPrint("nandTest(a=%s, b=%s)"%(a, b)))
     assert(self.debugPrint("nandTest(a=%s, b=%s)"%(a, b)))
     if b:
     if b:
-        messenger.send(self.getName(), [not (a and b)])
+        messenger.send(self.getOutputEventName(), [not (a and b)])
 
 
 def norTest(self, a, b):
 def norTest(self, a, b):
     assert(self.debugPrint("norTest(a=%s, b=%s)"%(a, b)))
     assert(self.debugPrint("norTest(a=%s, b=%s)"%(a, b)))
     if not b:
     if not b:
-        messenger.send(self.getName(), [not (a or b)])
+        messenger.send(self.getOutputEventName(), [not (a or b)])
     # else: ...we already sent the messege when b was set.
     # else: ...we already sent the messege when b was set.
 
 
 def xnorTest(self, a, b):
 def xnorTest(self, a, b):
     assert(self.debugPrint("xnorTest(a=%s, b=%s)"%(a, b)))
     assert(self.debugPrint("xnorTest(a=%s, b=%s)"%(a, b)))
-    messenger.send(self.getName(), [(a and b) or (not (a or b))])
+    messenger.send(self.getOutputEventName(), [(a and b) or (not (a or b))])
 
 
 
 
 class LogicGate(Entity.Entity, PandaObject.PandaObject):
 class LogicGate(Entity.Entity, PandaObject.PandaObject):
@@ -126,7 +126,7 @@ class LogicGate(Entity.Entity, PandaObject.PandaObject):
         assert(self.debugPrint("setInput1Event(event=%s)"%(event,)))
         assert(self.debugPrint("setInput1Event(event=%s)"%(event,)))
         if self.input1Event:
         if self.input1Event:
             self.ignore(self.input1Event)
             self.ignore(self.input1Event)
-        self.input1Event = "switch-%s"%(event,)
+        self.input1Event = self.getOutputEventName(event)
         if self.input1Event:
         if self.input1Event:
             self.accept(self.input1Event, self.setIsInput1)
             self.accept(self.input1Event, self.setIsInput1)
     
     
@@ -134,7 +134,7 @@ class LogicGate(Entity.Entity, PandaObject.PandaObject):
         assert(self.debugPrint("setInput2Event(event=%s)"%(event,)))
         assert(self.debugPrint("setInput2Event(event=%s)"%(event,)))
         if self.input2Event:
         if self.input2Event:
             self.ignore(self.input2Event)
             self.ignore(self.input2Event)
-        self.input2Event = "switch-%s"%(event,)
+        self.input2Event = self.getOutputEventName(event)
         if self.input2Event:
         if self.input2Event:
             self.accept(self.input2Event, self.setIsInput2)
             self.accept(self.input2Event, self.setIsInput2)
     
     

+ 6 - 3
direct/src/level/VisibilityExtender.py

@@ -10,11 +10,14 @@ class VisibilityExtender(Entity.Entity):
     def initVisExt(self):
     def initVisExt(self):
         self.extended = 0
         self.extended = 0
         self.zoneEntId = self.getZoneEntId()
         self.zoneEntId = self.getZoneEntId()
-        self.eventName = 'switch-%s' % self.event
-        self.accept(self.eventName, self.handleEvent)
+        self.eventName = None
+        if self.event is not None:
+            self.eventName = self.getOutputEventName(self.event)
+            self.accept(self.eventName, self.handleEvent)
 
 
     def destroyVisExt(self):
     def destroyVisExt(self):
-        self.ignore(self.eventName)
+        if self.eventName is not None:
+            self.ignore(self.eventName)
         if self.extended:
         if self.extended:
             self.retract()
             self.retract()