mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
added attribute checks/fixes
This commit is contained in:
parent
3562ae962e
commit
d24581e411
@ -1,14 +1,18 @@
|
||||
"""LevelSpec module: contains the LevelSpec class"""
|
||||
|
||||
from PythonUtil import list2dict
|
||||
import DirectNotifyGlobal
|
||||
from PythonUtil import list2dict, uniqueElements
|
||||
import string
|
||||
|
||||
class LevelSpec:
|
||||
"""contains spec data for a level, is responsible for handing the data
|
||||
out upon request, as well as recording changes made during editing, and
|
||||
saving out modified spec data"""
|
||||
def __init__(self, specDict, scenario=0):
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory("LevelSpec")
|
||||
|
||||
def __init__(self, specDict, scenario=0, entTypeReg=None):
|
||||
self.specDict = specDict
|
||||
self.entTypeReg = entTypeReg
|
||||
|
||||
# this maps an entId to the dict that holds its spec;
|
||||
# entities are either in the global dict or a scenario dict
|
||||
@ -22,6 +26,44 @@ class LevelSpec:
|
||||
list2dict(self.getScenarioEntIds(i),
|
||||
value=self.privGetScenarioEntityDict(i)))
|
||||
|
||||
if __debug__:
|
||||
# make sure there are no duplicate entIds
|
||||
entIds = self.getGlobalEntIds()
|
||||
assert uniqueElements(entIds)
|
||||
entIds = list2dict(entIds)
|
||||
for i in range(self.getNumScenarios()):
|
||||
for id in self.getScenarioEntIds(i):
|
||||
assert not entIds.has_key(id)
|
||||
entIds[id] = None
|
||||
|
||||
if self.entTypeReg is not None:
|
||||
# check each spec
|
||||
allEntIds = entIds
|
||||
for entId in allEntIds:
|
||||
spec = self.getEntitySpec(entId)
|
||||
|
||||
assert spec.has_key('type')
|
||||
attribNames = entTypeReg.getAttribNames(spec['type'])
|
||||
attribDescs = entTypeReg.getAttribDescs(spec['type'])
|
||||
|
||||
# are there any unknown attribs in the spec?
|
||||
for attrib in spec.keys():
|
||||
if attrib not in attribNames:
|
||||
LevelSpec.notify.warning(
|
||||
"entId %s (%s): unknown attrib '%s', omitting"
|
||||
% (entId, spec['type'], attrib))
|
||||
del spec[attrib]
|
||||
|
||||
# does the spec have all of its attributes?
|
||||
for attribName in attribNames:
|
||||
if not spec.has_key(attribName):
|
||||
default = attribDescs[attribName].getDefaultValue()
|
||||
LevelSpec.notify.warning(
|
||||
"entId %s (%s): missing attrib '%s', setting "
|
||||
"to default (%s)" % (entId, spec['type'],
|
||||
attribName, repr(default)))
|
||||
spec[attribName] = default
|
||||
|
||||
self.setScenario(scenario)
|
||||
|
||||
def getNumScenarios(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user