Jelajahi Sumber

prelim per-user entId ranges

Darren Ranalli 22 tahun lalu
induk
melakukan
d9741e886d
2 mengubah file dengan 60 tambahan dan 28 penghapusan
  1. 49 15
      direct/src/level/EditMgrAI.py
  2. 11 13
      direct/src/level/EditMgrBase.py

+ 49 - 15
direct/src/level/EditMgrAI.py

@@ -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
-
-        # 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)
+    if __debug__:
+        def setRequestNewEntity(self, data):
+            # pick an unused entId
+            spec = self.level.levelSpec
+            entIds = spec.getAllEntIds()
+            entIdDict = list2dict(entIds)
+
+            # 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())

+ 11 - 13
direct/src/level/EditMgrBase.py

@@ -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'],
+                                              )