prelim per-user entId ranges

This commit is contained in:
Darren Ranalli 2003-10-14 22:02:07 +00:00
parent 5abb4121ca
commit d9741e886d
2 changed files with 59 additions and 27 deletions

View File

@ -1,21 +1,55 @@
"""EditMgrAI module: contains the EditMgrAI class"""
import EditMgrBase
from PythonUtil import list2dict
from PythonUtil import list2dict, uniqueElements
if __debug__:
EntIdRange = 5000
username2entIdBase = {
'darren': 1*EntIdRange,
'samir': 2*EntIdRange,
'skyler': 3*EntIdRange,
'joe': 4*EntIdRange,
'mark': 5*EntIdRange,
}
assert uniqueElements(username2entIdBase.values())
UndefinedUsername = 'UNDEFINED_USERNAME'
UsernameConfigVar = 'factory-edit-username'
username = config.GetString(UsernameConfigVar, UndefinedUsername)
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
if __debug__:
def setRequestNewEntity(self, data):
# pick an unused entId
spec = self.level.levelSpec
entIds = spec.getAllEntIds()
entIdDict = list2dict(entIds)
# 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)
# Feel free to add your name to the table if it's not in there yet
if username == UndefinedUsername:
self.setRequestSave(None)
self.notify.error("you must config '%s'" % UsernameConfigVar)
if username not in username2entIdBase:
self.notify.error("unknown editor username '%s'" % username)
# dumb linear search for now
# make this smarter (cache last-allocated id)
baseId = username2entIdBase[username]
id = baseId
for id in xrange(baseId, baseId + EntIdRange):
if not id in entIdDict:
break
else:
self.notify.error('out of entIds')
# 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)
def getSpecSaveEvent(self):
return 'requestSave-%s' % self.level.levelId
def setRequestSave(self, data):
messenger.send(self.getSpecSaveEvent())

View File

@ -1,9 +1,11 @@
"""EditMgrBase module: contains the EditMgrBase class"""
import Entity
import DirectNotifyGlobal
class EditMgrBase(Entity.Entity):
"""This class contains EditMgr code shared between AI and client"""
notify = DirectNotifyGlobal.directNotify.newCategory("EditMgr")
def __init__(self, level, entId):
Entity.Entity.__init__(self, level, entId)
@ -11,17 +13,13 @@ class EditMgrBase(Entity.Entity):
Entity.Entity.destroy(self)
self.ignoreAll()
def setInsertEntity(self, data):
self.level.levelSpec.insertEntity(data['entId'],
data['entType'],
data['parentEntId'],
)
if __debug__:
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())
def setRemoveEntity(self, data):
self.level.levelSpec.removeEntity(data['entId'],
)