diff --git a/direct/src/interval/ParticleInterval.py b/direct/src/interval/ParticleInterval.py index 12c325a799..9f52819a09 100644 --- a/direct/src/interval/ParticleInterval.py +++ b/direct/src/interval/ParticleInterval.py @@ -43,17 +43,16 @@ class ParticleInterval(Interval.Interval): # Update particle effect based on current time if (t >= self.getDuration()): # If duration reached or stop event received, stop particle effect - ParticleEffect.cleanupParticleEffect(self.particleEffect) + self.particleEffect.cleanup() self.ignore(self.stopEvent) self.cleanedUp = 1 elif (event == Interval.IVAL_INIT): # IVAL_INIT event, start new particle effect - ParticleEffect.startParticleEffect(self.particleEffect, - self.parent, self.worldRelative) + self.particleEffect.start(self.parent, self.worldRelative) # Accept event to kill particle effect self.acceptOnce(self.stopEvent, lambda s = self: - ParticleEffect.cleanupParticleEffect(s.particleEffect)) + s.particleEffect.cleanup()) # Print debug information assert(self.notify.debug('updateFunc() - %s: t = %f' % (self.name, t))) diff --git a/direct/src/particles/ParticleEffect.py b/direct/src/particles/ParticleEffect.py index 4dd124ba4d..3a906f0e6a 100644 --- a/direct/src/particles/ParticleEffect.py +++ b/direct/src/particles/ParticleEffect.py @@ -3,25 +3,6 @@ import Particles import ForceGroup import DirectNotifyGlobal - -# NOTE: these two calls were moved here from BattleParticles -# to avoid DIRECT depending on TOONTOWN! - gregw -def startParticleEffect(effect, parent, worldRelative=1): - assert(effect != None and parent != None) - #notify.debug('startParticleEffect() - name: %s' % effect.getName()) - particles = effect.getParticlesNamed('particles-1') - if (worldRelative == 1): - particles.setRenderParent(render.node()) - effect.enable() - effect.reparentTo(parent) - -def cleanupParticleEffect(effect): - assert(effect != None) - #notify.debug('cleanupParticleEffect() - %s' % effect.getName()) - effect.disable() - effect.reparentTo(hidden) - effect.cleanup() - class ParticleEffect(NodePath): notify = DirectNotifyGlobal.directNotify.newCategory('ParticleEffect') @@ -44,8 +25,18 @@ class ParticleEffect(NodePath): # The effect's particle system if (particles != None): self.addParticles(particles) + self.worldRelative = 0 + + def start(self, parent=None, worldRelative=1): + assert(self.notify.debug('start() - name: %s' % self.name)) + self.worldRelative = worldRelative + self.enable() + if (parent != None): + self.reparentTo(parent) def cleanup(self): + self.reparentTo(hidden) + self.disable() for f in self.forceGroupDict.values(): f.cleanup() for p in self.particlesDict.values(): @@ -62,6 +53,9 @@ class ParticleEffect(NodePath): def enable(self): """enable()""" + if (self.worldRelative == 1): + for p in self.particlesDict.values(): + p.setRenderParent(render.node()) for f in self.forceGroupDict.values(): f.enable() for p in self.particlesDict.values(): @@ -70,6 +64,9 @@ class ParticleEffect(NodePath): def disable(self): """disable()""" + if (self.worldRelative == 1): + for p in self.particlesDict.values(): + p.setRenderParent(hidden.node()) for f in self.forceGroupDict.values(): f.disable() for p in self.particlesDict.values():