toontown-just-works/toontown/estate/DistributedFlower.py
2024-07-07 18:08:39 -05:00

213 lines
No EOL
8.7 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from toontown.estate import DistributedPlantBase
from toontown.estate.DistributedGardenBox import DistributedGardenBox
from toontown.estate import FlowerBase
from toontown.estate import GardenGlobals
from toontown.toontowngui import TTDialog
from toontown.toonbase import TTLocalizer
DIRT_AS_WATER_INDICATOR = True
DIRT_MOUND_HEIGHT = 0.3
class DistributedFlower(DistributedPlantBase.DistributedPlantBase, FlowerBase.FlowerBase):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFlower')
deferFor = 2
def __init__(self, cr):
DistributedPlantBase.DistributedPlantBase.__init__(self, cr)
FlowerBase.FlowerBase.__init__(self, 49, 0)
self.confirmDialog = None
self.stickUp = 1.07
if DIRT_AS_WATER_INDICATOR:
self.stickUp += DIRT_MOUND_HEIGHT
self.collSphereRadius = 2.2
self.shadowScale = 0.5
self.collSphereOffset = 0.0
self.dirtMound = None
self.sandMound = None
self.resultDialog = None
def delete(self):
DistributedPlantBase.DistributedPlantBase.delete(self)
del self.dirtMound
del self.sandMound
def setTypeIndex(self, typeIndex):
DistributedPlantBase.DistributedPlantBase.setTypeIndex(self, typeIndex)
self.setSpecies(typeIndex)
def showWiltOrBloom(self):
if not self.model:
return
nodePath = self.model
desat = None
flowerColorIndex = GardenGlobals.PlantAttributes[self.getSpecies()]['varieties'][self.getVariety()][1]
colorTuple = GardenGlobals.FlowerColors[flowerColorIndex]
useWilted = self.waterLevel < 0
wilt = nodePath.find('**/*wilt*')
bloom = nodePath.find('**/*bloom*')
if useWilted:
wilt.show()
desat = wilt.find('**/*desat*')
bloom.hide()
leaves = wilt.findAllMatches('**/*leaf*')
for leafIndex in xrange(leaves.getNumPaths()):
leaf = leaves.getPath(leafIndex)
leaf.setColorScale(1.0, 0.3, 0.1, 1.0)
else:
bloom.show()
desat = bloom.find('**/*desat*')
wilt.hide()
if desat and not desat.isEmpty():
desat.setColorScale(colorTuple[0], colorTuple[1], colorTuple[2], 1.0)
elif not self.isSeedling():
nodePath.setColorScale(colorTuple[0], colorTuple[1], colorTuple[2], 1.0)
return
def loadModel(self):
DistributedPlantBase.DistributedPlantBase.loadModel(self)
self.showWiltOrBloom()
self.model.setH(180)
flowerScale = 2.0
invFlowerScale = 1.0 / flowerScale
self.model.setScale(flowerScale)
if DIRT_AS_WATER_INDICATOR:
dirtMoundScale = invFlowerScale * 0.63
self.dirtMound = loader.loadModel('phase_5.5/models/estate/dirt_mound')
self.dirtMound.reparentTo(self.model)
self.dirtMound.setScale(dirtMoundScale)
self.dirtMound.setZ(self.dirtMound.getZ() - DIRT_MOUND_HEIGHT / 2.0)
self.sandMound = loader.loadModel('phase_5.5/models/estate/sand_mound')
self.sandMound.reparentTo(self.model)
self.sandMound.setScale(dirtMoundScale)
self.sandMound.setZ(self.sandMound.getZ() - DIRT_MOUND_HEIGHT / 2.0)
self.adjustWaterIndicator()
def handlePicking(self):
messenger.send('wakeup')
fullName = GardenGlobals.getFlowerVarietyName(self.species, self.variety)
if self.isWilted():
self.confirmDialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.ConfirmWiltedFlower % {'plant': fullName}, command=self.confirmCallback)
elif not self.isFruiting():
self.confirmDialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.ConfirmUnbloomingFlower % {'plant': fullName}, command=self.confirmCallback)
elif base.localAvatar.isFlowerBasketFull():
self.confirmDialog = TTDialog.TTDialog(style=TTDialog.CancelOnly, text=TTLocalizer.ConfirmBasketFull, command=self.confirmCallback)
else:
shovel = base.localAvatar.shovel
skill = base.localAvatar.shovelSkill
shovelPower = GardenGlobals.getShovelPower(shovel, skill)
giveSkillUp = True
beansRequired = GardenGlobals.getNumBeansRequired(self.species, self.variety)
if not shovelPower == beansRequired:
giveSkillUp = False
if giveSkillUp:
if skill == GardenGlobals.getMaxShovelSkill():
text = (TTLocalizer.ConfirmMaxedSkillFlower % {'plant': fullName},)
else:
text = TTLocalizer.ConfirmSkillupFlower % {'plant': fullName}
self.confirmDialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=text, command=self.confirmCallback)
else:
self.confirmDialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.ConfirmNoSkillupFlower % {'plant': fullName}, command=self.confirmCallback)
self.confirmDialog.show()
base.localAvatar.setInGardenAction(self)
base.cr.playGame.getPlace().detectedGardenPlotUse()
def confirmCallback(self, value):
self.notify.debug('value=%d' % value)
self.confirmDialog.destroy()
self.confirmDialog = None
if value > 0:
self.doPicking()
else:
self.finishInteraction()
return
def doPicking(self):
if not self.canBePicked():
self.notify.debug("I don't own this flower, just returning")
return
base.localAvatar.showGardeningGui()
base.localAvatar.removeShovelRelatedDoId(self.doId)
base.localAvatar.setInGardenAction(self)
base.cr.playGame.getPlace().detectedGardenPlotUse()
self.sendUpdate('removeItem', [])
def setWaterLevel(self, waterLevel):
DistributedPlantBase.DistributedPlantBase.setWaterLevel(self, waterLevel)
self.showWiltOrBloom()
if self.model:
self.adjustWaterIndicator()
def setGrowthLevel(self, growthLevel):
origGrowthLevel = self.growthLevel
self.growthLevel = growthLevel
if origGrowthLevel > -1:
self.loadModel()
self.makeMovieNode()
if hasattr(self, '_boxDoId'):
self.setBoxDoId(*self._boxDoId)
def makeMovieNode(self):
self.movieNode = self.rotateNode.attachNewNode('moviePos')
self.movieNode.setPos(0, 3, 0)
self.movieNode.setH(180)
self.stick2Ground()
def setupShadow(self):
if DIRT_AS_WATER_INDICATOR:
pass
else:
DistributedPlantBase.DistributedPlantBase.setupShadow(self)
self.setShadowHeight(-(self.stickUp + 1))
def adjustWaterIndicator(self):
if DIRT_AS_WATER_INDICATOR:
if self.dirtMound:
curWaterLevel = self.waterLevel
if curWaterLevel > self.maxWaterLevel:
curWaterLevel = self.maxWaterLevel
if curWaterLevel > 0:
darkestColorScale = 0.4
lightestColorScale = 1.0
scaleRange = lightestColorScale - darkestColorScale
scaleIncrement = scaleRange / self.maxWaterLevel
darker = lightestColorScale - scaleIncrement * curWaterLevel
self.dirtMound.setColorScale(darker, darker, darker, 1.0)
self.sandMound.hide()
self.dirtMound.show()
else:
self.sandMound.show()
self.dirtMound.hide()
elif self.model:
color = float(self.waterLevel) / self.maxWaterLevel
self.dropShadow.setColor(0.0, 0.0, 0.0, color)
def doResultDialog(self):
self.startInteraction()
flowerName = GardenGlobals.getFlowerVarietyName(self.species, self.variety)
stringToShow = TTLocalizer.getResultPlantedSomethingSentence(flowerName)
self.resultDialog = TTDialog.TTDialog(style=TTDialog.Acknowledge, text=stringToShow, command=self.resultsCallback)
def resultsCallback(self, value):
self.notify.debug('value=%d' % value)
if self.resultDialog:
self.resultDialog.destroy()
self.resultDialog = None
self.finishInteraction()
def setBoxDoId(self, boxId, index):
self._boxDoId = (boxId, index)
box = base.cr.doId2do[boxId]
x = GardenGlobals.FLOWER_POS[box.typeIndex][index]
self.setPos(0, 0, 0)
self.reparentTo(box)
self.setZ(1.5)
self.setX(x)
def stick2Ground(self):
pass