66 lines
No EOL
2 KiB
Python
66 lines
No EOL
2 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from DistributedLawnDecorAI import DistributedLawnDecorAI
|
|
|
|
import GardenGlobals
|
|
import time
|
|
|
|
FOUR_DAYS = 86400 * 4
|
|
|
|
class DistributedStatuaryAI(DistributedLawnDecorAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedStatuaryAI")
|
|
|
|
def calculate(self, lastCheck):
|
|
self.attributes = GardenGlobals.PlantAttributes[self.index]
|
|
self.growthThresholds = self.attributes.get('growthThresholds', (0, 0))
|
|
|
|
now = int(time.time())
|
|
self.lastCheck = lastCheck
|
|
if self.lastCheck == 0:
|
|
self.lastCheck = now
|
|
|
|
self.growthLevel = min((now - self.lastCheck) // FOUR_DAYS, self.growthThresholds[-1] + 1)
|
|
self.update()
|
|
|
|
def getTypeIndex(self):
|
|
return self.index
|
|
|
|
def getWaterLevel(self):
|
|
return 1
|
|
|
|
def getGrowthLevel(self):
|
|
return self.growthLevel
|
|
|
|
def getOptional(self):
|
|
return self.data
|
|
|
|
def update(self):
|
|
self.mgr.data['statuary'] = self.mgr.S_pack(self.data, self.lastCheck, self.index, self.growthLevel)
|
|
self.mgr.update()
|
|
|
|
def removeItem(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
self.d_setMovie(GardenGlobals.MOVIE_REMOVE)
|
|
|
|
def _remove(task):
|
|
if not self.air:
|
|
return
|
|
|
|
plot = self.mgr.placePlot(-1)
|
|
plot.setPlot(self.plot)
|
|
plot.setPos(self.getPos())
|
|
plot.setH(self.getH())
|
|
plot.setOwnerIndex(self.ownerIndex)
|
|
plot.generateWithRequired(self.zoneId)
|
|
|
|
self.air.writeServerEvent('remove-statuary', avId, plot=self.plot)
|
|
self.requestDelete()
|
|
|
|
self.mgr.objects.remove(self)
|
|
|
|
self.mgr.data['statuary'] = 0
|
|
self.mgr.update()
|
|
|
|
return task.done
|
|
|
|
taskMgr.doMethodLater(7, _remove, self.uniqueName('do-remove'))
|
|
|