149 lines
10 KiB
Python
149 lines
10 KiB
Python
from panda3d.core import *
|
|
from direct.interval.IntervalGlobal import *
|
|
from toontown.effects.FireworkGlobals import *
|
|
from toontown.effects.FireworkEffect import FireworkEffect
|
|
import random
|
|
|
|
class Firework(NodePath):
|
|
|
|
def __init__(self, typeId, velocity = Vec3(0, 0, 500), scale = 1.0, color1 = Vec4(1, 1, 1, 1), color2 = None, burstDelay = 1.25):
|
|
NodePath.__init__(self, 'Firework')
|
|
self.typeId = typeId
|
|
self.velocity = velocity
|
|
self.scale = scale
|
|
self.primaryColor = color1
|
|
self.secondaryColor = color2
|
|
if not self.secondaryColor:
|
|
self.secondaryColor = self.primaryColor
|
|
self.burstDelay = burstDelay
|
|
self.fireworkIval = None
|
|
self.fireworkEffects = []
|
|
return
|
|
|
|
def play(self):
|
|
if not self.fireworkIval:
|
|
self.generateFireworkIval()
|
|
self.fireworkIval.start()
|
|
|
|
def generateFireworkIval(self):
|
|
if not self.fireworkIval:
|
|
self.fireworkIval = Sequence()
|
|
if self.typeId == FireworkType.BasicPeony:
|
|
firework = FireworkEffect(FireworkBurstType.PeonyShell, FireworkTrailType.Default, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.AdvancedPeony:
|
|
firework = FireworkEffect(FireworkBurstType.PeonyParticleShell, FireworkTrailType.Default, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.DiademPeony:
|
|
firework = FireworkEffect(FireworkBurstType.PeonyDiademShell, FireworkTrailType.Default, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.Chrysanthemum:
|
|
firework = FireworkEffect(FireworkBurstType.ChrysanthemumShell, FireworkTrailType.Glow, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.DiademChrysanthemum:
|
|
firework = FireworkEffect(FireworkBurstType.ChrysanthemumDiademShell, FireworkTrailType.Glow, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.Ring:
|
|
firework = FireworkEffect(FireworkBurstType.RingShell, FireworkTrailType.Default, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.Saturn:
|
|
firework = FireworkEffect(FireworkBurstType.SaturnShell, FireworkTrailType.GlowSparkle, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.Bees:
|
|
firework = FireworkEffect(FireworkBurstType.BeeShell, FireworkTrailType.Polygonal, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.TrailBurst:
|
|
firework = FireworkEffect(FireworkBurstType.TrailExplosion, FireworkTrailType.Glow, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.GlowFlare:
|
|
firework = FireworkEffect(None, FireworkTrailType.LongGlowSparkle, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
firework.gravityMult = 1.0
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.PalmTree:
|
|
firework = FireworkEffect(FireworkBurstType.TrailExplosion, FireworkTrailType.LongGlowSparkle, self.velocity, self.scale, self.primaryColor, self.secondaryColor, self.burstDelay)
|
|
firework.reparentTo(self)
|
|
firework.gravityMult = 1.0
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
elif self.typeId == FireworkType.Mickey:
|
|
head = FireworkEffect(FireworkBurstType.PeonyShell, FireworkTrailType.Glow, velocity=Vec3(0, 0, 80 * self.scale), scale=self.scale / 1.2, primaryColor=self.primaryColor, secondaryColor=self.secondaryColor, burstDelay=1.5)
|
|
leftEar = FireworkEffect(FireworkBurstType.PeonyShell, FireworkTrailType.Glow, velocity=Vec3(-25 * self.scale, 0, 115 * self.scale), scale=self.scale / 1.6, primaryColor=self.primaryColor, secondaryColor=self.secondaryColor, burstDelay=1.7)
|
|
rightEar = FireworkEffect(FireworkBurstType.PeonyShell, FireworkTrailType.Glow, velocity=Vec3(25 * self.scale, 0, 115 * self.scale), scale=self.scale / 1.6, primaryColor=self.primaryColor, secondaryColor=self.secondaryColor, burstDelay=1.7)
|
|
head.reparentTo(self)
|
|
leftEar.reparentTo(self)
|
|
rightEar.reparentTo(self)
|
|
self.fireworkEffects = self.fireworkEffects + [head, leftEar, rightEar]
|
|
fireworkParallel = Parallel()
|
|
fireworkParallel.append(head.getFireworkMainIval())
|
|
fireworkParallel.append(leftEar.getFireworkMainIval())
|
|
fireworkParallel.append(rightEar.getFireworkMainIval())
|
|
self.fireworkIval.append(fireworkParallel)
|
|
elif self.typeId == FireworkType.PirateSkull:
|
|
skull = FireworkEffect(FireworkBurstType.SkullBlast, FireworkTrailType.GlowSparkle, velocity=Vec3(0, 0, 400 * self.scale), scale=self.scale, primaryColor=self.primaryColor, secondaryColor=self.secondaryColor, burstDelay=1.75)
|
|
leftBone = FireworkEffect(None, FireworkTrailType.LongGlowSparkle, velocity=Vec3(220 * self.scale, 0, 250 * self.scale), scale=self.scale * 1.25, primaryColor=self.primaryColor, secondaryColor=self.secondaryColor, burstDelay=2.25)
|
|
rightBone = FireworkEffect(None, FireworkTrailType.LongGlowSparkle, velocity=Vec3(-220 * self.scale, 0, 250 * self.scale), scale=self.scale * 1.25, primaryColor=self.primaryColor, secondaryColor=self.secondaryColor, burstDelay=2.25)
|
|
skull.reparentTo(self)
|
|
leftBone.reparentTo(self)
|
|
leftBone.setPos(-225 * self.scale, 0, 0)
|
|
leftBone.gravityMult = 3.5
|
|
rightBone.reparentTo(self)
|
|
rightBone.setPos(225 * self.scale, 0, 0)
|
|
rightBone.gravityMult = 3.5
|
|
self.fireworkEffects = self.fireworkEffects + [skull, leftBone, rightBone]
|
|
fireworkParallel = Parallel()
|
|
fireworkParallel.append(skull.getFireworkMainIval())
|
|
fireworkParallel.append(leftBone.getFireworkMainIval())
|
|
fireworkParallel.append(rightBone.getFireworkMainIval())
|
|
self.fireworkIval.append(fireworkParallel)
|
|
elif self.typeId == FireworkType.AmericanFlag:
|
|
fireworkParallel = Parallel()
|
|
colors = [Vec4(1, 0, 0, 1), Vec4(1, 1, 1, 1)]
|
|
for i in xrange(4):
|
|
firework = FireworkEffect(None, FireworkTrailType.LongGlowSparkle, velocity=Vec3(-30 * self.scale, 0, 150 * self.scale - 20 * i), scale=self.scale * 3.0, primaryColor=colors[i % 2], burstDelay=2.5)
|
|
firework.reparentTo(self)
|
|
firework.setX(-20.0 * self.scale + 10.0 * i * self.scale)
|
|
self.fireworkEffects.append(firework)
|
|
fireworkParallel.append(Sequence(Wait(0.25 * i), firework.getFireworkMainIval()))
|
|
|
|
firework = FireworkEffect(FireworkBurstType.Sparkles, FireworkTrailType.Default, velocity=Vec3(20, 0, 90), scale=self.scale * 1.5)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
fireworkParallel.append(Sequence(Wait(1.5), firework.getFireworkMainIval()))
|
|
self.fireworkIval.append(fireworkParallel)
|
|
elif self.typeId == FireworkType.IceCream:
|
|
firework = FireworkEffect(FireworkBurstType.IceCream, FireworkTrailType.Default, self.velocity, self.scale, Vec4(1, 1, 1, 1), Vec4(1, 1, 1, 1), self.burstDelay)
|
|
firework.reparentTo(self)
|
|
self.fireworkEffects.append(firework)
|
|
self.fireworkIval.append(firework.getFireworkMainIval())
|
|
self.fireworkIval.append(Func(self.cleanup))
|
|
return self.fireworkIval
|
|
|
|
def cleanup(self):
|
|
if self.fireworkIval:
|
|
self.fireworkIval.pause()
|
|
self.fireworkIval = None
|
|
for effect in self.fireworkEffects:
|
|
effect.cleanupEffect()
|
|
|
|
self.fireworkEffects = []
|
|
return
|