68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
|
import random
|
||
|
from direct.directnotify import DirectNotifyGlobal
|
||
|
from direct.distributed import DistributedObjectAI
|
||
|
from toontown.cogdominium import CogdoBarrelRoomConsts
|
||
|
|
||
|
class DistributedCogdoBarrelAI(DistributedObjectAI.DistributedObjectAI):
|
||
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCogdoBarrelAI')
|
||
|
|
||
|
def __init__(self, air, index, collectedCallback):
|
||
|
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
|
||
|
self.grabbedBy = []
|
||
|
self.index = index
|
||
|
self.state = CogdoBarrelRoomConsts.StateHidden
|
||
|
self.interactive = False
|
||
|
self.collectedCallback = collectedCallback
|
||
|
self.laff = random.randint(*CogdoBarrelRoomConsts.ToonUp)
|
||
|
|
||
|
def generate(self):
|
||
|
DistributedObjectAI.DistributedObjectAI.generate(self)
|
||
|
|
||
|
def delete(self):
|
||
|
DistributedObjectAI.DistributedObjectAI.delete(self)
|
||
|
|
||
|
def getIndex(self):
|
||
|
return self.index
|
||
|
|
||
|
def getState(self):
|
||
|
return self.state
|
||
|
|
||
|
def d_setState(self, state):
|
||
|
self.state = state
|
||
|
self.sendUpdate('setState', [
|
||
|
self.state])
|
||
|
if self.state == CogdoBarrelRoomConsts.StateAvailable:
|
||
|
self.grabbedBy = []
|
||
|
|
||
|
def requestGrab(self):
|
||
|
avId = self.air.getAvatarIdFromSender()
|
||
|
av = self.air.doId2do.get(avId)
|
||
|
if not av:
|
||
|
self.notify.warning('requestGrab found no avatar with id %s' % avId)
|
||
|
return
|
||
|
|
||
|
if self.__canGrab(av):
|
||
|
self.d_setGrab(avId)
|
||
|
else:
|
||
|
self.d_setReject()
|
||
|
|
||
|
def __canGrab(self, av):
|
||
|
return self.state == CogdoBarrelRoomConsts.StateAvailable and self.interactive and not av.isToonedUp() and av.doId not in self.grabbedBy
|
||
|
|
||
|
def d_setGrab(self, avId):
|
||
|
self.collectedCallback(self, avId)
|
||
|
self.grabbedBy.append(avId)
|
||
|
self.sendUpdate('setGrab', [
|
||
|
avId])
|
||
|
av = self.air.doId2do.get(avId)
|
||
|
if av:
|
||
|
av.toonUp(self.laff)
|
||
|
|
||
|
self.d_setState(CogdoBarrelRoomConsts.StateUsed)
|
||
|
|
||
|
def d_setReject(self):
|
||
|
self.sendUpdate('setReject', [])
|
||
|
|
||
|
def __str__(self):
|
||
|
return 'Barrel %s' % self.index
|