toontown-just-works/toontown/effects/Firework.py
2024-07-07 18:08:39 -05:00

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