toontown-just-works/toontown/fishing/DistributedFishingTargetAI.py
2024-07-07 18:08:39 -05:00

57 lines
2.2 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedNodeAI import DistributedNodeAI
from direct.distributed.ClockDelta import *
from toontown.fishing import FishingTargetGlobals
from direct.task import Task
import random
import math
class DistributedFishingTargetAI(DistributedNodeAI):
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedFishingTargetAI")
def __init__(self, air):
DistributedNodeAI.__init__(self, air)
self.pondId = 0
self.angle = 0
self.targetRadius = 0
self.time = 0
self.centerPoint = [0, 0, 0]
def generate(self):
DistributedNodeAI.generate(self)
self.updateState()
if not self.pondId:
#We dont have a pond ID for some reason...
return
pond = self.air.doId2do[self.pondId]
pond.addTarget(self)
self.centerPoint = FishingTargetGlobals.getTargetCenter(pond.getArea())
def delete(self):
taskMgr.remove('updateFishingTarget%d' % self.doId)
DistributedNodeAI.delete(self)
def setPondDoId(self, pondId):
self.pondId = pondId
def getPondDoId(self):
return self.pondId
def setState(self, stateIndex, angle, radius, time, timeStamp):
self.angle = angle
self.targetRadius = radius
self.time = time
def getState(self):
return [0, self.angle, self.targetRadius, self.time, globalClockDelta.getRealNetworkTime()]
def updateState(self):
if not self.pondId in self.air.doId2do:
return
self.b_setPosHpr(self.targetRadius * math.cos(self.angle) + self.centerPoint[0], self.targetRadius * math.sin(self.angle) + self.centerPoint[1], self.centerPoint[2], 0, 0, 0)
self.angle = random.randrange(359)
self.targetRadius = random.uniform(FishingTargetGlobals.getTargetRadius(self.air.doId2do[self.pondId].getArea()), 0)
self.time = random.uniform(10.0, 5.0)
self.sendUpdate('setState', [0, self.angle, self.targetRadius, self.time, globalClockDelta.getRealNetworkTime()])
taskMgr.doMethodLater(self.time + random.uniform(5, 2.5), DistributedFishingTargetAI.updateState, 'updateFishingTarget%d' % self.doId, [self])