63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
from . import Entity
|
|
|
|
class VisibilityExtender(Entity.Entity):
|
|
|
|
def __init__(self, level, entId):
|
|
Entity.Entity.__init__(self, level, entId)
|
|
self.initVisExt()
|
|
|
|
def initVisExt(self):
|
|
self.extended = 0
|
|
self.zoneEntId = self.getZoneEntId()
|
|
self.eventName = None
|
|
if self.event is not None:
|
|
self.eventName = self.getOutputEventName(self.event)
|
|
self.accept(self.eventName, self.handleEvent)
|
|
return
|
|
|
|
def destroyVisExt(self):
|
|
if self.eventName is not None:
|
|
self.ignore(self.eventName)
|
|
if self.extended:
|
|
self.retract()
|
|
return
|
|
|
|
def handleEvent(self, doExtend):
|
|
if doExtend:
|
|
if not self.extended:
|
|
self.extend()
|
|
elif self.extended:
|
|
self.retract()
|
|
|
|
def extend(self):
|
|
zoneEnt = self.level.getEntity(self.getZoneEntId())
|
|
zoneEnt.incrementRefCounts(self.newZones)
|
|
self.extended = 1
|
|
self.level.handleVisChange()
|
|
|
|
def retract(self):
|
|
zoneEnt = self.level.getEntity(self.getZoneEntId())
|
|
zoneEnt.decrementRefCounts(self.newZones)
|
|
self.extended = 0
|
|
self.level.handleVisChange()
|
|
|
|
def destroy(self):
|
|
self.destroyVisExt()
|
|
Entity.Entity.destroy(self)
|
|
|
|
if __dev__:
|
|
|
|
def setNewZones(self, newZones):
|
|
extended = self.extended
|
|
self.destroyVisExt()
|
|
self.newZones = newZones
|
|
self.initVisExt()
|
|
if extended:
|
|
self.extend()
|
|
|
|
def attribChanged(self, *args):
|
|
extended = self.extended
|
|
self.destroyVisExt()
|
|
self.initVisExt()
|
|
if extended:
|
|
self.extend()
|