added attribute checks/fixes

This commit is contained in:
Darren Ranalli 2003-10-03 23:10:27 +00:00
parent 3562ae962e
commit d24581e411

View File

@ -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):