115 lines
5.1 KiB
Python
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()
|