Poodletooth-iLand/toontown/minigame/TwoDTreasure.py

115 lines
5.1 KiB
Python

from direct.showbase.DirectObject import DirectObject
from toontown.toonbase.ToontownGlobals import *
from direct.directnotify import DirectNotifyGlobal
from direct.interval.IntervalGlobal import *
from toontown.minigame import ToonBlitzGlobals
from toontown.estate.GardenGlobals import BeanColors
import random
class TwoDTreasure(DirectObject):
notify = DirectNotifyGlobal.directNotify.newCategory('TwoDTreasure')
RADIUS = 1.3
def __init__(self, treasureMgr, index, pos, value, isEnemyGenerated, model):
self.game = treasureMgr.section.sectionMgr.game
self.index = index
self.value = value
self.isEnemyGenerated = isEnemyGenerated
center = model.getBounds().getCenter()
center = Point3(0, 0, 0)
treasureName = 'treasure-' + str(index)
model.setScale(2.5)
self.model = NodePath(treasureName)
self.nodePath = model.copyTo(self.model)
self.appearEffect = None
self.flash = None
glowParticle = self.game.assetMgr.particleGlow
self.glowCard = glowParticle.copyTo(self.model)
self.glowCard2 = glowParticle.copyTo(self.glowCard)
self.glowCard.setPos(0, 0.1, 0)
self.glowCard.setColor(model.getColor())
self.glowCard.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne))
self.glowCard2.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne))
self.glowScalIval = Sequence(LerpScaleInterval(self.glowCard, 0.4, scale=4.1, startScale=4.9), LerpScaleInterval(self.glowCard, 0.4, scale=4.9, startScale=4.1))
self.glowScalIval.loop()
self.modelScalIval = Sequence(LerpScaleInterval(self.model, 0.4, scale=1.0, startScale=1.03), LerpScaleInterval(self.model, 0.4, scale=1.03, startScale=1.0))
self.modelScalIval.loop()
self.sphereName = 'treasureSphere-%s-%s' % (self.game.doId, self.index)
self.collSphere = CollisionSphere(center[0], center[1], center[2], self.RADIUS)
self.collSphere.setTangible(0)
self.collNode = CollisionNode(self.sphereName)
self.collNode.setIntoCollideMask(WallBitmask)
self.collNode.addSolid(self.collSphere)
self.collNodePath = self.model.attachNewNode(self.collNode)
self.collNodePath.hide()
self.accept('enter' + self.sphereName, self.__handleEnterSphere)
self.model.setPos(pos[0] - center[0], 0 - center[1], pos[2] - center[2])
self.nodePath.flattenLight()
if self.isEnemyGenerated:
self.flash = glowParticle.copyTo(self.model)
self.flash.reparentTo(treasureMgr.treasuresNP)
self.flash.setPos(self.model.getX(), self.model.getY() - 0.2, self.model.getZ())
self.flash.setScale(6)
self.flash.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne))
self.hideTreasure()
return
def destroy(self):
self.game = None
self.ignoreAll()
if self.glowScalIval:
self.glowScalIval.finish()
del self.glowScalIval
if self.modelScalIval:
self.modelScalIval.finish()
del self.modelScalIval
if self.appearEffect:
self.appearEffect.finish()
del self.appearEffect
if self.flash:
self.flash.removeNode()
del self.flash
self.nodePath.removeNode()
del self.nodePath
del self.collSphere
self.collNodePath.removeNode()
del self.collNodePath
del self.collNode
self.model.removeNode()
del self.model
return
def setRandomColor(self):
beanIndex = random.randint(0, len(BeanColors) - 1)
colors = BeanColors[beanIndex]
self.model.setColor(colors[0] / 255.0, colors[1] / 255.0, colors[2] / 255.0)
def __handleEnterSphere(self, cevent):
self.ignoreAll()
self.notify.debug('treasuerGrabbed')
sectionIndex = int(cevent.getIntoNodePath().getName()[-5:-3])
treasureIndex = int(cevent.getIntoNodePath().getName()[-2:])
messenger.send('twoDTreasureGrabbed', [sectionIndex, treasureIndex])
def hideTreasure(self):
self.model.hide()
self.collNode.setIntoCollideMask(BitMask32(0))
if self.isEnemyGenerated:
self.flash.hide()
def showTreasure(self):
self.model.show()
self.collNode.setIntoCollideMask(WallBitmask)
if self.isEnemyGenerated:
self.flash.show()
def setTreasurePos(self, pos):
self.model.setPos(pos)
if self.isEnemyGenerated:
self.flash.setPos(self.model.getX(), self.model.getY() - 0.2, self.model.getZ())
def popupEnemyTreasure(self):
modelFadeIn = LerpFunc(self.model.setAlphaScale, duration=0.5)
flashFadeOut = LerpFunc(self.flash.setAlphaScale, fromData=1, toData=0, duration=0.5)
self.appearEffect = Sequence(Wait(2.4), Func(self.showTreasure), Parallel(modelFadeIn, flashFadeOut, Func(base.playSfx, self.game.assetMgr.sparkleSound)))
self.appearEffect.start()