|
|
@@ -10,13 +10,40 @@ class ZoneEntity(ZoneEntityBase.ZoneEntityBase, BasicEntities.NodePathAttribs):
|
|
|
self.nodePath = self.level.getZoneNode(self.modelZoneNum)
|
|
|
BasicEntities.NodePathAttribs.initNodePathAttribs(self, doReparent=0)
|
|
|
|
|
|
+ # dict of zoneNum to 'visible' reference count
|
|
|
+ self.visibleZoneNums = {}
|
|
|
+
|
|
|
+ # inc ref counts for the zones that are always visible from this zone
|
|
|
+ self.incrementRefCounts(self.visibility)
|
|
|
+
|
|
|
def destroy(self):
|
|
|
+ # no need to dec our reference counts
|
|
|
BasicEntities.NodePathAttribs.destroy(self)
|
|
|
ZoneEntityBase.ZoneEntityBase.destroy(self)
|
|
|
|
|
|
def getNodePath(self):
|
|
|
return self.nodePath
|
|
|
|
|
|
- def setVisibility(self, visibility):
|
|
|
- self.visibility = visibility
|
|
|
- self.level.handleVisChange()
|
|
|
+ def getVisibleZoneNums(self):
|
|
|
+ return self.visibleZoneNums.keys()
|
|
|
+
|
|
|
+ # call these with lists of zoneNums to increment or decrement their
|
|
|
+ # 'visible' reference counts
|
|
|
+ # zone is visible as long as its ref count is nonzero
|
|
|
+ def incrementRefCounts(self, zoneNumList):
|
|
|
+ for zoneNum in zoneNumList:
|
|
|
+ self.visibleZoneNums.setdefault(zoneNum, 0)
|
|
|
+ self.visibleZoneNums[zoneNum] += 1
|
|
|
+ def decrementRefCounts(self, zoneNumList):
|
|
|
+ for zoneNum in zoneNumList:
|
|
|
+ self.visibleZoneNums[zoneNum] -= 1
|
|
|
+ if self.visibleZoneNums[zoneNum] == 0:
|
|
|
+ del self.visibleZoneNums[zoneNum]
|
|
|
+
|
|
|
+ if __debug__:
|
|
|
+ def setVisibility(self, visibility):
|
|
|
+ self.decrementRefCounts(self.visibility)
|
|
|
+ self.visibility = visibility
|
|
|
+ self.incrementRefCounts(self.visibility)
|
|
|
+
|
|
|
+ self.level.handleVisChange()
|