ZoneEntity.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. """ZoneEntity module: contains the ZoneEntity class"""
  2. import ZoneEntityBase
  3. import BasicEntities
  4. class ZoneEntity(ZoneEntityBase.ZoneEntityBase, BasicEntities.NodePathAttribs):
  5. def __init__(self, level, entId):
  6. ZoneEntityBase.ZoneEntityBase.__init__(self, level, entId)
  7. self.nodePath = self.level.getZoneNode(self.entId)
  8. if self.nodePath is None:
  9. if __dev__:
  10. self.level.reportModelSpecSyncError(
  11. 'unknown zoneNum %s; zone was removed from model?' %
  12. self.entId)
  13. else:
  14. self.notify.error('zone %s not found in level model' %
  15. self.entId)
  16. BasicEntities.NodePathAttribs.initNodePathAttribs(self, doReparent=0)
  17. # dict of zoneNum to 'visible' reference count
  18. self.visibleZoneNums = {}
  19. # inc ref counts for the zones that are always visible from this zone
  20. self.incrementRefCounts(self.visibility)
  21. def destroy(self):
  22. # no need to dec our visibility reference counts
  23. BasicEntities.NodePathAttribs.destroy(self)
  24. ZoneEntityBase.ZoneEntityBase.destroy(self)
  25. def getNodePath(self):
  26. return self.nodePath
  27. def getVisibleZoneNums(self):
  28. return self.visibleZoneNums.keys()
  29. # call these with lists of zoneNums to increment or decrement their
  30. # 'visible' reference counts
  31. # zone is visible as long as its ref count is nonzero
  32. def incrementRefCounts(self, zoneNumList):
  33. for zoneNum in zoneNumList:
  34. self.visibleZoneNums.setdefault(zoneNum, 0)
  35. self.visibleZoneNums[zoneNum] += 1
  36. def decrementRefCounts(self, zoneNumList):
  37. for zoneNum in zoneNumList:
  38. self.visibleZoneNums[zoneNum] -= 1
  39. if self.visibleZoneNums[zoneNum] == 0:
  40. del self.visibleZoneNums[zoneNum]
  41. if __dev__:
  42. def setVisibility(self, visibility):
  43. self.decrementRefCounts(self.visibility)
  44. self.visibility = visibility
  45. self.incrementRefCounts(self.visibility)
  46. self.level.handleVisChange()