mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
faster entId allocation
This commit is contained in:
parent
3576ea4cc9
commit
4927912722
@ -1,7 +1,7 @@
|
|||||||
"""EditMgrAI module: contains the EditMgrAI class"""
|
"""EditMgrAI module: contains the EditMgrAI class"""
|
||||||
|
|
||||||
import EditMgrBase
|
import EditMgrBase
|
||||||
if __debug__:
|
if __dev__:
|
||||||
from PythonUtil import list2dict
|
from PythonUtil import list2dict
|
||||||
import EditorGlobals
|
import EditorGlobals
|
||||||
|
|
||||||
@ -14,20 +14,37 @@ class EditMgrAI(EditMgrBase.EditMgrBase):
|
|||||||
entIds = spec.getAllEntIds()
|
entIds = spec.getAllEntIds()
|
||||||
entIdDict = list2dict(entIds)
|
entIdDict = list2dict(entIds)
|
||||||
|
|
||||||
# dumb linear search for now
|
|
||||||
# TODO: make this smarter (cache last-allocated id)
|
|
||||||
# Note that this uses the ID range associated with the
|
# Note that this uses the ID range associated with the
|
||||||
# AI's username, not the username of the user who requested
|
# AI's username, not the username of the user who requested
|
||||||
# the new entity.
|
# the new entity.
|
||||||
for id in xrange(*EditorGlobals.getEntIdAllocRange()):
|
allocRange = EditorGlobals.getEntIdAllocRange()
|
||||||
if not id in entIdDict:
|
|
||||||
break
|
if not hasattr(self, 'lastAllocatedEntId'):
|
||||||
else:
|
self.lastAllocatedEntId = allocRange[0]
|
||||||
self.notify.error('out of entIds')
|
|
||||||
|
idChosen = 0
|
||||||
|
while not idChosen:
|
||||||
|
# linear search for an unused entId starting with the
|
||||||
|
# last-allocated id
|
||||||
|
for id in xrange(self.lastAllocatedEntId, allocRange[1]):
|
||||||
|
print id
|
||||||
|
if not id in entIdDict:
|
||||||
|
idChosen = 1
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# we ran off the end of the range.
|
||||||
|
if self.lastAllocatedEntId != allocRange[0]:
|
||||||
|
# if we started in the middle, try again from
|
||||||
|
# the beginning
|
||||||
|
self.lastAllocatedEntId = allocRange[0]
|
||||||
|
else:
|
||||||
|
# every entId is used!!
|
||||||
|
self.notify.error('out of entIds')
|
||||||
|
|
||||||
# OK, we've chosen an unused entId. Add the entId to the data
|
# OK, we've chosen an unused entId. Add the entId to the data
|
||||||
# dict and do the insert
|
# dict and do the insert
|
||||||
data.update({'entId': id})
|
data.update({'entId': id})
|
||||||
|
self.lastAllocatedEntId = id
|
||||||
self.level.setAttribChange(self.entId, 'insertEntity', data)
|
self.level.setAttribChange(self.entId, 'insertEntity', data)
|
||||||
|
|
||||||
# clear out the attrib, it shouldn't be kept in the spec
|
# clear out the attrib, it shouldn't be kept in the spec
|
||||||
|
Loading…
x
Reference in New Issue
Block a user