diff --git a/direct/src/level/DistributedLevelAI.py b/direct/src/level/DistributedLevelAI.py index 899c489d57..9d3c5363cb 100755 --- a/direct/src/level/DistributedLevelAI.py +++ b/direct/src/level/DistributedLevelAI.py @@ -95,12 +95,11 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI, if __debug__: # level editors should call this func to tweak attributes of level # entities - def setAttribChange(self, entId, attribName, valueStr): - value = eval(valueStr) + def setAttribChange(self, entId, attribName, value): # send a copy to the client-side level obj FIRST # (it may be a message that creates an entity) self.sendUpdate('setAttribChange', - [entId, attribName, valueStr]) + [entId, attribName, repr(value)]) self.levelSpec.setAttribChange(entId, attribName, value) self.modified = 1 diff --git a/direct/src/level/EditMgr.py b/direct/src/level/EditMgr.py index 4c4e864fc7..a5cea0be68 100755 --- a/direct/src/level/EditMgr.py +++ b/direct/src/level/EditMgr.py @@ -1,27 +1,7 @@ """EditMgr module: contains the EditMgr class""" -import Entity +import EditMgrBase -class EditMgr(Entity.Entity): - """This class handles entity/level functionality used by the level editor""" - def __init__(self, level, entId): - Entity.Entity.__init__(self, level, entId) - - def destroy(self): - Entity.Entity.destroy(self) - self.ignoreAll() - - def setInsertEntity(self, data): - self.level.levelSpec.insertEntity(data['entId'], - data['entType'], - data['parentEntId'], - ) - - def setRemoveEntity(self, data): - self.level.levelSpec.removeEntity(data['entId'], - ) - - def getSpecSaveEvent(self): - return 'requestSave-%s' % self.level.levelId - def setRequestSave(self, data): - messenger.send(self.getSpecSaveEvent()) +class EditMgr(EditMgrBase.EditMgrBase): + """This class handles client-side editor-specific functionality""" + pass diff --git a/direct/src/level/EditMgrAI.py b/direct/src/level/EditMgrAI.py new file mode 100755 index 0000000000..53ff54573a --- /dev/null +++ b/direct/src/level/EditMgrAI.py @@ -0,0 +1,21 @@ +"""EditMgrAI module: contains the EditMgrAI class""" + +import EditMgrBase +from PythonUtil import list2dict + +class EditMgrAI(EditMgrBase.EditMgrBase): + """This class handles AI-side editor-specific functionality""" + def setRequestNewEntity(self, data): + # pick an unused entId + spec = self.level.levelSpec + entIds = spec.getAllEntIds() + entIdDict = list2dict(entIds) + # dumb linear search for now + id = 100 + while id in entIdDict: + id += 1 + + # OK, we've chosen an unused entId. Add the entId to the data + # dict and do the insert + data.update({'entId': id}) + self.level.setAttribChange(self.entId, 'insertEntity', data) diff --git a/direct/src/level/EditMgrBase.py b/direct/src/level/EditMgrBase.py new file mode 100755 index 0000000000..cabdfb5069 --- /dev/null +++ b/direct/src/level/EditMgrBase.py @@ -0,0 +1,27 @@ +"""EditMgrBase module: contains the EditMgrBase class""" + +import Entity + +class EditMgrBase(Entity.Entity): + """This class contains EditMgr code shared between AI and client""" + def __init__(self, level, entId): + Entity.Entity.__init__(self, level, entId) + + def destroy(self): + Entity.Entity.destroy(self) + self.ignoreAll() + + def setInsertEntity(self, data): + self.level.levelSpec.insertEntity(data['entId'], + data['entType'], + data['parentEntId'], + ) + + def setRemoveEntity(self, data): + self.level.levelSpec.removeEntity(data['entId'], + ) + + def getSpecSaveEvent(self): + return 'requestSave-%s' % self.level.levelId + def setRequestSave(self, data): + messenger.send(self.getSpecSaveEvent()) diff --git a/direct/src/level/EntityCreatorAI.py b/direct/src/level/EntityCreatorAI.py index 817d7b00dc..527da0fd23 100755 --- a/direct/src/level/EntityCreatorAI.py +++ b/direct/src/level/EntityCreatorAI.py @@ -2,7 +2,7 @@ import EntityCreatorBase import LogicGateAI -import EditMgr +import EditMgrAI import LevelMgrAI import ZoneEntityAI from PythonUtil import Functor @@ -43,7 +43,7 @@ class EntityCreatorAI(EntityCreatorBase.EntityCreatorBase): self.privRegisterTypes({ 'cutScene': nothing, - 'editMgr': Functor(cLE, EditMgr.EditMgr), + 'editMgr': Functor(cLE, EditMgrAI.EditMgrAI), 'levelMgr': Functor(cLE, LevelMgrAI.LevelMgrAI), 'logicGate': Functor(cLE, LogicGateAI.LogicGateAI), 'nodepath': nothing, diff --git a/direct/src/level/EntityTypes.py b/direct/src/level/EntityTypes.py index 0656974c10..2b239d73d1 100755 --- a/direct/src/level/EntityTypes.py +++ b/direct/src/level/EntityTypes.py @@ -35,6 +35,7 @@ class EditMgr(Entity): type = 'editMgr' attribs = ( ('requestSave', None), + ('requestNewEntity', None), ('insertEntity', None), ('removeEntity', None), )