From 6a87e89a43c4fd5a43d9d0e2ae178d20350ef398 Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Sat, 20 Dec 2003 01:17:51 +0000 Subject: [PATCH] fixed factory crosstalk problem --- direct/src/level/CutScene.py | 2 +- direct/src/level/Entity.py | 13 +++++++++++++ direct/src/level/Level.py | 4 +++- direct/src/level/LogicGate.py | 16 ++++++++-------- direct/src/level/VisibilityExtender.py | 9 ++++++--- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/direct/src/level/CutScene.py b/direct/src/level/CutScene.py index 31e6e0e4cd..20bde14257 100755 --- a/direct/src/level/CutScene.py +++ b/direct/src/level/CutScene.py @@ -183,7 +183,7 @@ class CutScene(BasicEntities.NodePathEntity, DirectObject.DirectObject): assert(self.debugPrint("setStartStop(event=%s)"%(event,))) if self.startStopEvent: self.ignore(self.startStopEvent) - self.startStopEvent = "switch-%s"%(event,) + self.startStopEvent = self.getOutputEventName(event) if self.startStopEvent: self.accept(self.startStopEvent, self.startOrStop) diff --git a/direct/src/level/Entity.py b/direct/src/level/Entity.py index e5f4e3de9c..fe7d1a675f 100755 --- a/direct/src/level/Entity.py +++ b/direct/src/level/Entity.py @@ -49,6 +49,19 @@ class Entity(DirectObject): del self.level 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): """returns entId of zone that contains this entity""" return self.level.getEntityZoneEntId(self.entId) diff --git a/direct/src/level/Level.py b/direct/src/level/Level.py index 08b6553d00..4b3922c5ef 100755 --- a/direct/src/level/Level.py +++ b/direct/src/level/Level.py @@ -38,7 +38,9 @@ class Level: def initializeLevel(self, levelId, levelSpec, scenarioIndex): """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.levelSpec = levelSpec self.scenarioIndex = scenarioIndex diff --git a/direct/src/level/LogicGate.py b/direct/src/level/LogicGate.py index db7d56ef76..6ee7d68c1c 100755 --- a/direct/src/level/LogicGate.py +++ b/direct/src/level/LogicGate.py @@ -38,32 +38,32 @@ import Entity def andTest(self, a, b): assert(self.debugPrint("andTest(a=%s, b=%s)"%(a, b))) if b: - messenger.send(self.getName(), [a]) + messenger.send(self.getOutputEventName(), [a]) def orTest(self, a, b): assert(self.debugPrint("orTest(a=%s, b=%s)"%(a, b))) if not b: - messenger.send(self.getName(), [a]) + messenger.send(self.getOutputEventName(), [a]) # else: ...we already sent the messege when b was set. def xorTest(self, 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): assert(self.debugPrint("nandTest(a=%s, b=%s)"%(a, b))) if b: - messenger.send(self.getName(), [not (a and b)]) + messenger.send(self.getOutputEventName(), [not (a and b)]) def norTest(self, a, b): assert(self.debugPrint("norTest(a=%s, b=%s)"%(a, 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. def xnorTest(self, 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): @@ -126,7 +126,7 @@ class LogicGate(Entity.Entity, PandaObject.PandaObject): assert(self.debugPrint("setInput1Event(event=%s)"%(event,))) if self.input1Event: self.ignore(self.input1Event) - self.input1Event = "switch-%s"%(event,) + self.input1Event = self.getOutputEventName(event) if self.input1Event: self.accept(self.input1Event, self.setIsInput1) @@ -134,7 +134,7 @@ class LogicGate(Entity.Entity, PandaObject.PandaObject): assert(self.debugPrint("setInput2Event(event=%s)"%(event,))) if self.input2Event: self.ignore(self.input2Event) - self.input2Event = "switch-%s"%(event,) + self.input2Event = self.getOutputEventName(event) if self.input2Event: self.accept(self.input2Event, self.setIsInput2) diff --git a/direct/src/level/VisibilityExtender.py b/direct/src/level/VisibilityExtender.py index fce068c3ad..8ee50953fc 100755 --- a/direct/src/level/VisibilityExtender.py +++ b/direct/src/level/VisibilityExtender.py @@ -10,11 +10,14 @@ class VisibilityExtender(Entity.Entity): def initVisExt(self): self.extended = 0 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): - self.ignore(self.eventName) + if self.eventName is not None: + self.ignore(self.eventName) if self.extended: self.retract()