fixed factory crosstalk problem

This commit is contained in:
Darren Ranalli 2003-12-20 01:17:51 +00:00
parent 5425755442
commit 6a87e89a43
5 changed files with 31 additions and 13 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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()