Poodletooth-iLand/toontown/fishing/DistributedFishingPond.py

126 lines
4 KiB
Python

from direct.distributed import DistributedObject
from direct.directnotify import DirectNotifyGlobal
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import TTLocalizer
import FishGlobals
from toontown.fishing import DistributedPondBingoManager
from pandac.PandaModules import Vec3
from direct.task import Task
class DistributedFishingPond(DistributedObject.DistributedObject):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFishingPond')
pollInterval = 0.5
def __init__(self, cr):
DistributedObject.DistributedObject.__init__(self, cr)
self.notify.debug('init')
self.targets = {}
self.area = None
self.localToonBobPos = None
self.localToonSpot = None
self.pondBingoMgr = None
self.visitedSpots = {}
return
def disable(self):
self.visitedSpots.clear()
self.stopCheckingTargets()
DistributedObject.DistributedObject.disable(self)
def setArea(self, area):
self.area = area
def getArea(self):
return self.area
def addTarget(self, target):
self.notify.debug('addTarget: %s' % target)
self.targets[target.getDoId()] = target
def removeTarget(self, target):
self.notify.debug('removeTarget: %s' % target)
del self.targets[target.getDoId()]
def startCheckingTargets(self, spot, bobPos):
self.notify.debug('startCheckingTargets')
if base.wantBingo:
pass
self.localToonSpot = spot
self.localToonBobPos = bobPos
taskMgr.doMethodLater(self.pollInterval * 2, self.checkTargets, self.taskName('checkTargets'))
def stopCheckingTargets(self):
self.notify.debug('stopCheckingTargets')
taskMgr.remove(self.taskName('checkTargets'))
if not base.wantBingo:
self.localToonSpot = None
self.localToonBobPos = None
return
def checkTargets(self, task = None):
self.notify.debug('checkTargets')
if self.localToonSpot != None:
for target in self.targets.values():
targetPos = target.getPos(render)
distVec = Vec3(targetPos - self.localToonBobPos)
dist = distVec.length()
if dist < target.getRadius():
self.notify.debug('checkTargets: hit target: %s' % target.getDoId())
self.d_hitTarget(target)
return Task.done
taskMgr.doMethodLater(self.pollInterval, self.checkTargets, self.taskName('checkTargets'))
else:
self.notify.warning('localToonSpot became None while checking targets')
return Task.done
def d_hitTarget(self, target):
self.localToonSpot.hitTarget()
self.sendUpdate('hitTarget', [target.getDoId()])
def setPondBingoManager(self, pondBingoMgr):
self.pondBingoMgr = pondBingoMgr
def removePondBingoManager(self):
del self.pondBingoMgr
self.pondBingoMgr = None
return
def getPondBingoManager(self):
return self.pondBingoMgr
def hasPondBingoManager(self):
return self.pondBingoMgr is not None
def handleBingoCatch(self, catch):
if self.pondBingoMgr:
self.pondBingoMgr.setLastCatch(catch)
def handleBingoBoot(self):
if self.pondBingoMgr:
self.pondBingoMgr.handleBoot()
def cleanupBingoMgr(self):
if self.pondBingoMgr:
self.pondBingoMgr.cleanup()
def setLocalToonSpot(self, spot = None):
self.localToonSpot = spot
if spot is not None and spot.getDoId() not in self.visitedSpots:
self.visitedSpots[spot.getDoId()] = spot
return
def showBingoGui(self):
if self.pondBingoMgr:
self.pondBingoMgr.showCard()
def getLocalToonSpot(self):
return self.localToonSpot
def resetSpotGui(self):
for spot in self.visitedSpots.values():
spot.resetCastGui()
def setSpotGui(self):
for spot in self.visitedSpots.values():
spot.setCastGui()