toontown-just-works/toontown/safezone/RegenTreasurePlannerAI.py
2024-07-07 18:08:39 -05:00

43 lines
1.6 KiB
Python

from direct.distributed.ClockDelta import *
from direct.showbase import DirectObject
from direct.directnotify import DirectNotifyGlobal
from direct.task import Task
import random
import TreasurePlannerAI
class RegenTreasurePlannerAI(TreasurePlannerAI.TreasurePlannerAI):
notify = DirectNotifyGlobal.directNotify.newCategory('RegenTreasurePlannerAI')
def __init__(self, zoneId, treasureType, taskName, spawnInterval, maxTreasures, callback = None):
TreasurePlannerAI.TreasurePlannerAI.__init__(self, zoneId, treasureType, callback)
self.taskName = '%s-%s' % (taskName, zoneId)
self.spawnInterval = spawnInterval
self.maxTreasures = maxTreasures
def start(self):
self.preSpawnTreasures()
self.startSpawning()
def stop(self):
self.stopSpawning()
def stopSpawning(self):
taskMgr.remove(self.taskName)
def startSpawning(self):
self.stopSpawning()
taskMgr.doMethodLater(self.spawnInterval, self.upkeepTreasurePopulation, self.taskName)
def upkeepTreasurePopulation(self, task):
if self.numTreasures() < self.maxTreasures:
self.placeRandomTreasure()
taskMgr.doMethodLater(self.spawnInterval, self.upkeepTreasurePopulation, self.taskName)
return Task.done
def placeRandomTreasure(self):
spawnPointIndex = self.nthEmptyIndex(random.randrange(self.countEmptySpawnPoints()))
self.placeTreasure(spawnPointIndex)
def preSpawnTreasures(self):
for i in xrange(self.maxTreasures):
self.placeRandomTreasure()