68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.DistributedSmoothNodeAI import DistributedSmoothNodeAI
|
|
from toontown.catalog import CatalogItem
|
|
import HouseGlobals
|
|
|
|
class DistributedFurnitureItemAI(DistributedSmoothNodeAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedFurnitureItemAI")
|
|
|
|
def __init__(self, air, furnitureMgr, catalogItem):
|
|
DistributedSmoothNodeAI.__init__(self, air)
|
|
|
|
self.furnitureMgr = furnitureMgr
|
|
self.catalogItem = catalogItem
|
|
|
|
self.mode = HouseGlobals.FURNITURE_MODE_OFF
|
|
self.modeAvId = 0
|
|
|
|
def announceGenerate(self):
|
|
x, y, z, h, p, r = self.catalogItem.posHpr
|
|
self.b_setPosHpr(x, y, z, h, 0, 0)
|
|
|
|
def getItem(self):
|
|
return (self.furnitureMgr.doId, self.catalogItem.getBlob(CatalogItem.Customization))
|
|
|
|
def requestPosHpr(self, final, x, y, z, h, p, r, t):
|
|
senderId = self.air.getAvatarIdFromSender()
|
|
if (not self.furnitureMgr.director or senderId != self.furnitureMgr.director.doId):
|
|
self.air.writeServerEvent('suspicious', avId=senderId, issue='DistributedFurnitureItemAI.requestPosHpr Tried to move furniture without being the director!')
|
|
return
|
|
|
|
self.catalogItem.posHpr = x, y, z, h, 0, 0
|
|
|
|
if not final and self.mode != HouseGlobals.FURNITURE_MODE_START:
|
|
self.b_setMode(HouseGlobals.FURNITURE_MODE_START, senderId)
|
|
elif final and self.mode == HouseGlobals.FURNITURE_MODE_START:
|
|
self.b_setMode(HouseGlobals.FURNITURE_MODE_STOP, 0)
|
|
return
|
|
|
|
self.sendUpdate('setSmPosHpr', [x, y, z, h, 0, 0, t])
|
|
|
|
def setMode(self, mode, avId):
|
|
self.mode = mode
|
|
self.modeAvId = avId
|
|
|
|
if mode == HouseGlobals.FURNITURE_MODE_STOP:
|
|
x, y, z, h, p, r = self.catalogItem.posHpr
|
|
self.b_setPosHpr(x, y, z, h, 0, 0)
|
|
|
|
def d_setMode(self, mode, avId):
|
|
self.sendUpdate('setMode', [mode, avId])
|
|
|
|
def b_setMode(self, mode, avId):
|
|
self.setMode(mode, avId)
|
|
self.d_setMode(mode, avId)
|
|
|
|
def getMode(self):
|
|
return self.mode, self.modeAvId
|
|
|
|
def destroy(self):
|
|
# Presently, we just delete ourselves... No real shutdown needed.
|
|
self.requestDelete()
|
|
|
|
def delete(self):
|
|
if hasattr(self, 'do_deleted'):
|
|
return
|
|
|
|
self.do_deleted = True
|
|
DistributedSmoothNodeAI.delete(self)
|