mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2025-01-09 17:53:50 +00:00
Disney estate cannons.
This commit is contained in:
parent
fda14d3153
commit
9ab1bd9534
2 changed files with 98 additions and 81 deletions
|
@ -1,101 +1,121 @@
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
|
||||||
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
||||||
from direct.distributed.ClockDelta import *
|
|
||||||
from toontown.minigame import CannonGameGlobals
|
|
||||||
from toontown.toonbase import ToontownGlobals
|
from toontown.toonbase import ToontownGlobals
|
||||||
|
from direct.distributed.ClockDelta import *
|
||||||
|
from direct.fsm import ClassicFSM
|
||||||
|
from direct.fsm import State
|
||||||
|
from direct.task import Task
|
||||||
|
from toontown.minigame import CannonGameGlobals
|
||||||
|
from direct.distributed import DistributedObjectAI
|
||||||
|
from toontown.minigame import Trajectory
|
||||||
import CannonGlobals
|
import CannonGlobals
|
||||||
|
|
||||||
class DistributedCannonAI(DistributedObjectAI):
|
class DistributedCannonAI(DistributedObjectAI.DistributedObjectAI):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedCannonAI")
|
notify = directNotify.newCategory('DistributedCannonAI')
|
||||||
|
|
||||||
def __init__(self, air):
|
def __init__(self, air, estateId, targetId, x, y, z, h, p, r):
|
||||||
DistributedObjectAI.__init__(self, air)
|
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
|
||||||
self.estateId = 0
|
self.posHpr = [x,
|
||||||
self.targetId = 0
|
y,
|
||||||
self.posHpr = (0, 0, 0, 0, 0, 0)
|
z,
|
||||||
self.bumperPos = ToontownGlobals.PinballCannonBumperInitialPos
|
h,
|
||||||
self.active = 0
|
p,
|
||||||
|
r]
|
||||||
self.avId = 0
|
self.avId = 0
|
||||||
|
|
||||||
def setEstateId(self, estateId):
|
|
||||||
self.estateId = estateId
|
self.estateId = estateId
|
||||||
|
self.timeoutTask = None
|
||||||
def getEstateId(self):
|
|
||||||
return self.estateId
|
|
||||||
|
|
||||||
def setTargetId(self, targetId):
|
|
||||||
self.targetId = targetId
|
self.targetId = targetId
|
||||||
|
self.cannonBumperPos = list(ToontownGlobals.PinballCannonBumperInitialPos)
|
||||||
|
return
|
||||||
|
|
||||||
def getTargetId(self):
|
def delete(self):
|
||||||
return self.targetId
|
self.ignoreAll()
|
||||||
|
self.__stopTimeout()
|
||||||
|
DistributedObjectAI.DistributedObjectAI.delete(self)
|
||||||
|
|
||||||
def setPosHpr(self, x, y, z, h, p, r):
|
def requestEnter(self):
|
||||||
self.posHpr = (x, y, z, h, p, r)
|
avId = self.air.getAvatarIdFromSender()
|
||||||
|
if self.avId == 0:
|
||||||
|
self.avId = avId
|
||||||
|
self.__stopTimeout()
|
||||||
|
self.setMovie(CannonGlobals.CANNON_MOVIE_LOAD, self.avId)
|
||||||
|
self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId])
|
||||||
|
self.acceptOnce('bootAvFromEstate-' + str(avId), self.__handleBootMessage, extraArgs=[avId])
|
||||||
|
self.__startTimeout(CannonGlobals.CANNON_TIMEOUT)
|
||||||
|
else:
|
||||||
|
self.air.writeServerEvent('suspicious', avId, 'DistributedCannonAI.requestEnter cannon already occupied')
|
||||||
|
self.notify.warning('requestEnter() - cannon already occupied')
|
||||||
|
self.sendUpdateToAvatarId(avId, 'requestExit', [])
|
||||||
|
|
||||||
|
def setMovie(self, mode, avId):
|
||||||
|
self.avId = avId
|
||||||
|
self.sendUpdate('setMovie', [mode, avId])
|
||||||
|
|
||||||
|
def getCannonBumperPos(self):
|
||||||
|
self.notify.debug('---------getCannonBumperPos %s' % self.cannonBumperPos)
|
||||||
|
return self.cannonBumperPos
|
||||||
|
|
||||||
|
def requestBumperMove(self, x, y, z):
|
||||||
|
self.cannonBumperPos = [x, y, z]
|
||||||
|
self.sendUpdate('setCannonBumperPos', [x, y, z])
|
||||||
|
|
||||||
def getPosHpr(self):
|
def getPosHpr(self):
|
||||||
return self.posHpr
|
return self.posHpr
|
||||||
|
|
||||||
def setActive(self, active):
|
def getEstateId(self):
|
||||||
self.active = active
|
return self.estateId
|
||||||
self.sendUpdate("setActiveState", [active])
|
|
||||||
|
|
||||||
def requestEnter(self):
|
def getTargetId(self):
|
||||||
|
return self.targetId
|
||||||
|
|
||||||
|
def setCannonPosition(self, zRot, angle):
|
||||||
avId = self.air.getAvatarIdFromSender()
|
avId = self.air.getAvatarIdFromSender()
|
||||||
av = self.air.doId2do.get(avId)
|
self.notify.debug('setCannonPosition: ' + str(avId) + ': zRot=' + str(zRot) + ', angle=' + str(angle))
|
||||||
if not av:
|
self.sendUpdate('updateCannonPosition', [avId, zRot, angle])
|
||||||
|
|
||||||
|
def setCannonLit(self, zRot, angle):
|
||||||
|
avId = self.air.getAvatarIdFromSender()
|
||||||
|
self.__stopTimeout()
|
||||||
|
self.notify.debug('setCannonLit: ' + str(avId) + ': zRot=' + str(zRot) + ', angle=' + str(angle))
|
||||||
|
fireTime = CannonGameGlobals.FUSE_TIME
|
||||||
|
self.sendUpdate('setCannonWillFire', [avId,
|
||||||
|
fireTime,
|
||||||
|
zRot,
|
||||||
|
angle,
|
||||||
|
globalClockDelta.getRealNetworkTime()])
|
||||||
|
|
||||||
|
def setLanded(self):
|
||||||
|
self.ignore(self.air.getAvatarExitEvent(self.avId))
|
||||||
|
self.setMovie(CannonGlobals.CANNON_MOVIE_LANDED, 0)
|
||||||
|
self.avId = 0
|
||||||
|
|
||||||
|
def setActive(self, active):
|
||||||
|
if active < 0 or active > 1:
|
||||||
|
self.air.writeServerEvent('suspicious', active, 'DistributedCannon.setActive value should be 0-1 range')
|
||||||
|
return
|
||||||
|
self.active = active
|
||||||
|
self.sendUpdate('setActiveState', [active])
|
||||||
|
|
||||||
|
def __startTimeout(self, timeLimit):
|
||||||
|
self.__stopTimeout()
|
||||||
|
self.timeoutTask = taskMgr.doMethodLater(timeLimit, self.__handleTimeout, self.taskName('timeout'))
|
||||||
|
|
||||||
|
def __stopTimeout(self):
|
||||||
|
if self.timeoutTask != None:
|
||||||
|
taskMgr.remove(self.timeoutTask)
|
||||||
|
self.timeoutTask = None
|
||||||
return
|
return
|
||||||
|
|
||||||
if not self.avId:
|
def __handleTimeout(self, task):
|
||||||
self.avId = avId
|
self.notify.debug('Timeout expired!')
|
||||||
self.d_setMovie(CannonGlobals.CANNON_MOVIE_LOAD)
|
self.__doExit()
|
||||||
self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId])
|
return Task.done
|
||||||
else:
|
|
||||||
self.air.writeServerEvent('suspicious', avId, 'DistributedCannonAI.requestEnter cannon already occupied')
|
|
||||||
self.notify.warning('requestEnter() - cannon already occupied')
|
|
||||||
|
|
||||||
def setMovie(self, mode, avId, extraInfo):
|
|
||||||
self.avId = avId
|
|
||||||
self.sendUpdate('setMovie', [mode, avId, extraInfo])
|
|
||||||
|
|
||||||
def __handleUnexpectedExit(self, avId):
|
def __handleUnexpectedExit(self, avId):
|
||||||
self.notify.warning('avatar:' + str(avId) + ' has exited unexpectedly')
|
self.notify.warning('avatar:' + str(avId) + ' has exited unexpectedly')
|
||||||
self.__doExit()
|
self.__doExit()
|
||||||
|
|
||||||
def __doExit(self, movie=CannonGlobals.CANNON_MOVIE_FORCE_EXIT):
|
def __handleBootMessage(self, avId):
|
||||||
self.ignore(self.air.getAvatarExitEvent(self.avId))
|
self.notify.warning('avatar:' + str(avId) + ' got booted ')
|
||||||
self.d_setMovie(movie)
|
self.__doExit()
|
||||||
self.avId = 0
|
|
||||||
|
|
||||||
def requestExit(self):
|
def __doExit(self):
|
||||||
pass
|
self.setMovie(CannonGlobals.CANNON_MOVIE_FORCE_EXIT, self.avId)
|
||||||
|
|
||||||
def d_setMovie(self, movie):
|
|
||||||
self.sendUpdate("setMovie", [movie, self.avId])
|
|
||||||
|
|
||||||
def setCannonPosition(self, zRot, angle):
|
|
||||||
self.sendUpdate("updateCannonPosition", [self.avId, zRot, angle])
|
|
||||||
|
|
||||||
def setCannonLit(self, zRot, angle):
|
|
||||||
avId = self.air.getAvatarIdFromSender()
|
|
||||||
if avId != self.avId:
|
|
||||||
return
|
|
||||||
|
|
||||||
fireTime = CannonGameGlobals.FUSE_TIME
|
|
||||||
self.sendUpdate('setCannonWillFire', [avId, fireTime, zRot, angle, globalClockDelta.getRealNetworkTime()])
|
|
||||||
|
|
||||||
def setFired(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def setLanded(self):
|
|
||||||
self.__doExit(CannonGlobals.CANNON_MOVIE_CLEAR)
|
|
||||||
self.sendUpdate('setCannonExit', [self.avId])
|
|
||||||
|
|
||||||
def setCannonExit(self, todo0):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def requestBumperMove(self, x, y, z):
|
|
||||||
self.bumperPos = (x, y, z)
|
|
||||||
self.sendUpdate('setCannonBumperPos', self.getCannonBumperPos())
|
|
||||||
|
|
||||||
def getCannonBumperPos(self):
|
|
||||||
return self.bumperPos
|
|
||||||
|
|
|
@ -414,10 +414,7 @@ class CannonRental(Rental):
|
||||||
target.generateWithRequired(self.estate.zoneId)
|
target.generateWithRequired(self.estate.zoneId)
|
||||||
|
|
||||||
for drop in CannonGlobals.cannonDrops:
|
for drop in CannonGlobals.cannonDrops:
|
||||||
cannon = DistributedCannonAI(self.estate.air)
|
cannon = DistributedCannonAI(self.estate.air, self.estate.zoneId, target.doId, *drop)
|
||||||
cannon.setEstateId(self.estate.doId)
|
|
||||||
cannon.setTargetId(target.doId)
|
|
||||||
cannon.setPosHpr(*drop)
|
|
||||||
cannon.generateWithRequired(self.estate.zoneId)
|
cannon.generateWithRequired(self.estate.zoneId)
|
||||||
self.objects.add(cannon)
|
self.objects.add(cannon)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue