historical/toontown-classic.git/toontown/effects/Bubbles.py

64 lines
2.3 KiB
Python
Raw Normal View History

2024-01-16 11:20:27 -06:00
from panda3d.core import *
from panda3d.physics import *
from direct.interval.IntervalGlobal import *
from direct.particles import ParticleEffect
from direct.particles import Particles
from direct.particles import ForceGroup
import random
class Bubbles(NodePath):
def __init__(self, parent, renderParent):
NodePath.__init__(self)
self.renderParent = renderParent.attachNewNode('bubbleRenderParent')
self.renderParent.setBin('fixed', 0)
self.assign(parent.attachNewNode('bubbles'))
self.effect = ParticleEffect.ParticleEffect()
p0 = Particles.Particles('particles-1')
p0.setFactory('PointParticleFactory')
p0.setRenderer('SpriteParticleRenderer')
p0.setEmitter('DiscEmitter')
p0.setPoolSize(8)
p0.setBirthRate(0.75)
p0.setLitterSize(2)
p0.setLitterSpread(1)
p0.factory.setLifespanBase(2.0)
p0.factory.setLifespanSpread(0.5)
p0.factory.setTerminalVelocityBase(400.0)
p0.factory.setTerminalVelocitySpread(40.0)
p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAUSER)
p0.renderer.setUserAlpha(1.0)
p0.renderer.setTextureFromNode('phase_4/models/char/bubble', '**/*')
p0.renderer.setXScaleFlag(1)
p0.renderer.setYScaleFlag(1)
p0.renderer.setInitialXScale(0.07)
p0.renderer.setFinalXScale(0.2)
p0.renderer.setInitialYScale(0.07)
p0.renderer.setFinalYScale(0.2)
p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
p0.emitter.setAmplitudeSpread(0.025)
p0.emitter.setAmplitude(0.1)
p0.emitter.setRadius(0.5)
gravityForceGroup = ForceGroup.ForceGroup('air')
force0 = LinearVectorForce(Vec3(0.0, 0.0, 1.0), 1.0, 0)
force0.setActive(1)
force1 = LinearJitterForce(2.5, 0)
force1.setActive(1)
gravityForceGroup.addForce(force0)
gravityForceGroup.addForce(force1)
self.effect.addForceGroup(gravityForceGroup)
self.effect.addParticles(p0)
self.effect.setPos(0, 0, 0)
def start(self):
self.effect.start(self, self.renderParent)
def stop(self):
self.effect.disable()
def destroy(self):
self.effect.cleanup()
self.renderParent.removeNode()
del self.effect
del self.renderParent