88 lines
2.7 KiB
Python
88 lines
2.7 KiB
Python
from otp.level import DistributedEntityAI
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
|
|
class DistributedCrushableEntityAI(DistributedEntityAI.DistributedEntityAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCrushableEntityAI')
|
|
|
|
def __init__(self, level, entId):
|
|
self.isCrushable = 0
|
|
self.crushCellId = None
|
|
self.crushCell = None
|
|
self.grid = None
|
|
self.width = 1
|
|
DistributedEntityAI.DistributedEntityAI.__init__(self, level, entId)
|
|
return
|
|
|
|
def generate(self):
|
|
DistributedEntityAI.DistributedEntityAI.generate(self)
|
|
self.setActiveCrushCell()
|
|
if self.level:
|
|
self.attachToGrid()
|
|
|
|
def delete(self):
|
|
self.ignoreAll()
|
|
DistributedEntityAI.DistributedEntityAI.delete(self)
|
|
|
|
def destroy(self):
|
|
if self.crushCell != None:
|
|
self.crushCell.unregisterCrushable(self.entId)
|
|
self.crushCell = None
|
|
DistributedEntityAI.DistributedEntityAI.destroy(self)
|
|
return
|
|
|
|
def attachToGrid(self):
|
|
if self.gridId is not None:
|
|
|
|
def setGrid(gridId = self.gridId, self = self):
|
|
grid = self.level.entities.get(gridId, None)
|
|
if grid:
|
|
self.grid = grid
|
|
self.grid.addObjectByPos(self.entId, self.pos, self.width)
|
|
self.b_setPosition(self.getPosition())
|
|
self.initGridDependents()
|
|
return 1
|
|
return 0
|
|
|
|
self.level.setEntityCreateCallback(self.gridId, setGrid)
|
|
return
|
|
|
|
def initGridDependents(self):
|
|
pass
|
|
|
|
def setActiveCrushCell(self):
|
|
if self.crushCellId != None:
|
|
self.notify.debug('setActiveCrushCell, entId: %d' % self.entId)
|
|
self.crushCell = self.level.entities.get(self.crushCellId, None)
|
|
if self.crushCell == None:
|
|
self.accept(self.level.getEntityCreateEvent(self.crushCellId), self.setActiveCrushCell)
|
|
else:
|
|
self.isCrushable = 1
|
|
self.crushCell.registerCrushable(self.entId)
|
|
return
|
|
|
|
def b_setPosition(self, pos):
|
|
self.d_setPosition(pos)
|
|
self.setPosition(pos)
|
|
|
|
def d_setPosition(self, pos):
|
|
self.sendUpdate('setPosition', [pos[0], pos[1], pos[2]])
|
|
|
|
def setPosition(self, pos):
|
|
self.pos = pos
|
|
|
|
def getPosition(self):
|
|
return self.grid.getObjPos(self.entId)
|
|
|
|
def updateGrid(self):
|
|
pass
|
|
|
|
def doCrush(self, crusherId, axis):
|
|
pass
|
|
|
|
def setGridId(self, gridId):
|
|
self.gridId = gridId
|
|
self.attachToGrid()
|
|
|
|
def setCrushCellId(self, crushCellId):
|
|
self.crushCellId = crushCellId
|
|
self.setActiveCrushCell()
|