82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
from direct.task import Task
|
|
import PartyGlobals
|
|
|
|
class DistributedPartyCannonAI(DistributedObjectAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedPartyCannonAI")
|
|
|
|
def __init__(self, air):
|
|
DistributedObjectAI.__init__(self, air)
|
|
self.actId = 0
|
|
self.posHpr = [0, 0, 0, 0, 0, 0]
|
|
self.avId = 0
|
|
|
|
|
|
def delete(self):
|
|
taskMgr.remove('removeToon%d' % self.doId)
|
|
DistributedObjectAI.delete(self)
|
|
|
|
def setActivityDoId(self, actId):
|
|
self.actId = actId
|
|
|
|
def getActivityDoId(self):
|
|
return self.actId
|
|
|
|
def setPosHpr(self, x, y, z, h, p, r):
|
|
self.posHpr = [x, y, z, h, p, r]
|
|
|
|
def getPosHpr(self):
|
|
return self.posHpr
|
|
|
|
def requestEnter(self):
|
|
if not self.avId:
|
|
self.avId = self.air.getAvatarIdFromSender()
|
|
self.d_setMovie(PartyGlobals.CANNON_MOVIE_LOAD, self.avId)
|
|
|
|
def requestExit(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.avId == avId:
|
|
self.sendUpdate('setCannonExit', [avId])
|
|
self.avId = 0
|
|
|
|
def d_setMovie(self, movie, avId):
|
|
self.sendUpdate('setMovie', [movie, avId])
|
|
|
|
def setCannonPosition(self, rot, angle):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId == self.avId:
|
|
self.sendUpdate('updateCannonPosition', [avId, rot, angle])
|
|
|
|
def setCannonLit(self, rot, angle):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId == self.avId:
|
|
activity = self.air.doId2do[self.actId]
|
|
activity.b_setCannonWillFire(self.doId, rot, angle, avId)
|
|
self.d_setMovie(PartyGlobals.CANNON_MOVIE_CLEAR, avId)
|
|
self.sendUpdate('setCannonExit', [avId])
|
|
self.avId = 0
|
|
|
|
def setFired(self):
|
|
self.air.writeServerEvent('suspicious', avId=self.air.getAvatarIdFromSender(), issue='Toon tried to call unused setFired!')
|
|
|
|
def setLanded(self, toonId):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if toonId != avId:
|
|
self.air.writeServerEvent('suspicious', avId=avId, issue='Toon claimed to be another toon in cannon!')
|
|
return
|
|
self.d_setMovie(PartyGlobals.CANNON_MOVIE_LANDED, avId)
|
|
|
|
def setTimeout(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId != self.avId:
|
|
self.air.writeServerEvent('suspicious', avId=avId, issue='Toon tried to start timer for someone else!')
|
|
taskMgr.doMethodLater(PartyGlobals.CANNON_TIMEOUT, self.__removeToon, 'removeToon%d' % self.doId, extraArgs=[avId])
|
|
|
|
|
|
def __removeToon(self, avId):
|
|
if avId != self.avId:
|
|
return
|
|
self.avId = 0
|
|
self.d_setMovie(PartyGlobals.CANNON_MOVIE_FORCE_EXIT, avId)
|
|
self.sendUpdate('setCannonExit', [avId])
|