57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed import DistributedObjectAI
|
|
from direct.directutil import DistributedLargeBlobSenderAI
|
|
from .SpecImports import *
|
|
|
|
class DistributedInGameEditorAI(DistributedObjectAI.DistributedObjectAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedInGameEditorAI')
|
|
|
|
def __init__(self, air, level, editorAvId, editUsername):
|
|
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
|
|
self.editorAvId = editorAvId
|
|
self.editUsername = editUsername
|
|
self.level = level
|
|
self.levelDoId = self.level.getDoId()
|
|
self.generateWithRequired(level.zoneId)
|
|
|
|
def generate(self):
|
|
self.notify.debug('generate')
|
|
DistributedObjectAI.DistributedObjectAI.generate(self)
|
|
simbase.levelEditor = self
|
|
self.acceptOnce(self.air.getAvatarExitEvent(self.editorAvId), self.setFinished)
|
|
self.accept(self.level.getAttribChangeEventName(), self.handleAttribChange)
|
|
|
|
def delete(self):
|
|
self.notify.debug('delete')
|
|
messenger.send(self.getDoneEvent())
|
|
DistributedObjectAI.DistributedObjectAI.delete(self)
|
|
self.ignoreAll()
|
|
|
|
def getDoneEvent(self):
|
|
return self.uniqueName('levelEditorDone')
|
|
|
|
def getEditorAvId(self):
|
|
return self.editorAvId
|
|
|
|
def getEditUsername(self):
|
|
return self.editUsername
|
|
|
|
def getLevelDoId(self):
|
|
return self.levelDoId
|
|
|
|
def requestCurrentLevelSpec(self):
|
|
print('requestCurrentLevelSpec')
|
|
spec = self.level.levelSpec
|
|
specStr = repr(spec)
|
|
largeBlob = DistributedLargeBlobSenderAI.DistributedLargeBlobSenderAI(self.air, self.zoneId, self.editorAvId, specStr, useDisk=simbase.air._specByDisk)
|
|
self.sendUpdateToAvatarId(self.editorAvId, 'setSpecSenderDoId', [largeBlob.doId])
|
|
|
|
def setEdit(self, entId, attribName, valueStr, username):
|
|
self.level.setAttribChange(entId, attribName, eval(valueStr), username)
|
|
|
|
def handleAttribChange(self, entId, attrib, value, username):
|
|
self.sendUpdateToAvatarId(self.editorAvId, 'setAttribChange', [
|
|
entId, attrib, repr(value), username])
|
|
|
|
def setFinished(self):
|
|
self.requestDelete()
|