浏览代码

verbose error msgs when model and spec get out-of-sync

Darren Ranalli 22 年之前
父节点
当前提交
1d31baefae
共有 2 个文件被更改,包括 16 次插入4 次删除
  1. 11 4
      direct/src/level/DistributedLevel.py
  2. 5 0
      direct/src/level/ZoneEntity.py

+ 11 - 4
direct/src/level/DistributedLevel.py

@@ -147,6 +147,14 @@ class DistributedLevel(DistributedObject.DistributedObject,
             self.privGotSpec(levelSpec)
 
     if __dev__:
+        def reportModelSpecSyncError(self, msg):
+            DistributedLevel.notify.error(
+                '%s\n'
+                '\n'
+                'your spec does not match the level model\n'
+                'use SpecUtil.updateSpec, then restart your AI and client' %
+                (msg))
+
         def setSpecDeny(self, reason):
             DistributedLevel.notify.error(reason)
             
@@ -186,9 +194,8 @@ class DistributedLevel(DistributedObject.DistributedObject,
         modelZoneNums = self.zoneNums
         entityZoneNums = self.zoneNum2entId.keys()
         if not sameElements(modelZoneNums, entityZoneNums):
-            DistributedLevel.notify.error(
-                'model zone nums (%s) do not match entity zone nums (%s)\n'
-                'use SpecUtil.updateSpec' %
+            self.reportModelSpecSyncError(
+                'model zone nums (%s) do not match entity zone nums (%s)' %
                 (modelZoneNums, entityZoneNums))
 
         # load stuff
@@ -324,7 +331,7 @@ class DistributedLevel(DistributedObject.DistributedObject,
         self.stopOuch()
         
     def getZoneNode(self, zoneNum):
-        return self.zoneNum2node[zoneNum]
+        return self.zoneNum2node.get(zoneNum)
 
     def requestReparent(self, entity, parentId):
         if __debug__:

+ 5 - 0
direct/src/level/ZoneEntity.py

@@ -8,6 +8,11 @@ class ZoneEntity(ZoneEntityBase.ZoneEntityBase, BasicEntities.NodePathAttribs):
         ZoneEntityBase.ZoneEntityBase.__init__(self, level, entId)
 
         self.nodePath = self.level.getZoneNode(self.modelZoneNum)
+        if __dev__:
+            if self.nodePath is None:
+                self.level.reportModelSpecSyncError(
+                    'unknown modelZoneNum %s; zone was removed from model?' %
+                    self.modelZoneNum)
         BasicEntities.NodePathAttribs.initNodePathAttribs(self, doReparent=0)
 
         # dict of zoneNum to 'visible' reference count