2015-03-03 16:10:12 -06:00
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
2015-04-29 03:12:56 -05:00
DistributedSmoothNodeAI . delete ( self )