From 9fcac8b39cb96026fa5af6c40d89e34a4f7f0de8 Mon Sep 17 00:00:00 2001 From: Josh Wilson Date: Thu, 10 Jul 2008 20:09:00 +0000 Subject: [PATCH] replacing particleEffect.cleanup() with particleEffect.disable() in ParticleInterval.cleanup(). This should allow us to reuse pooled effects in subsequent different particle intervals. Also, printing a more helpful error message when trying to use an already cleaned up ParticleEffect --- direct/src/interval/ParticleInterval.py | 2 +- direct/src/particles/ParticleEffect.py | 26 ++++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/direct/src/interval/ParticleInterval.py b/direct/src/interval/ParticleInterval.py index 1456654330..58c8d89c53 100644 --- a/direct/src/interval/ParticleInterval.py +++ b/direct/src/interval/ParticleInterval.py @@ -136,6 +136,6 @@ class ParticleInterval(Interval): def privFinalize(self): Interval.privFinalize(self) if self.cleanup and self.particleEffect: - self.particleEffect.cleanup() + self.particleEffect.disable() self.particleEffect = None diff --git a/direct/src/particles/ParticleEffect.py b/direct/src/particles/ParticleEffect.py index 7914b58a74..ef2ccd1d68 100644 --- a/direct/src/particles/ParticleEffect.py +++ b/direct/src/particles/ParticleEffect.py @@ -28,13 +28,12 @@ class ParticleEffect(NodePath): def cleanup(self): self.removeNode() self.disable() - if hasattr(self, 'forceGroupDict'): + if self.__isValid(): for f in self.forceGroupDict.values(): f.cleanup() - del self.forceGroupDict - if hasattr(self, 'particlesDict'): for p in self.particlesDict.values(): p.cleanup() + del self.forceGroupDict del self.particlesDict del self.renderParent @@ -53,7 +52,7 @@ class ParticleEffect(NodePath): def enable(self): # band-aid added for client crash - grw - if hasattr(self, 'forceGroupDict') and hasattr(self, 'particlesDict'): + if self.__isValid(): if (self.renderParent != None): for p in self.particlesDict.values(): p.setRenderParent(self.renderParent.node()) @@ -66,7 +65,7 @@ class ParticleEffect(NodePath): def disable(self): self.detachNode() # band-aid added for client crash - grw - if hasattr(self, 'forceGroupDict') and hasattr(self, 'particlesDict'): + if self.__isValid(): for p in self.particlesDict.values(): p.setRenderParent(p.node) for f in self.forceGroupDict.values(): @@ -101,7 +100,7 @@ class ParticleEffect(NodePath): forceGroup.nodePath.removeNode() forceGroup.particleEffect = None - del self.forceGroupDict[forceGroup.getName()] + self.forceGroupDict.pop(forceGroup.getName(), None) def removeForce(self, force): for p in self.particlesDict.values(): @@ -125,7 +124,7 @@ class ParticleEffect(NodePath): self.notify.warning('removeParticles() - particles == None!') return particles.nodePath.detachNode() - del self.particlesDict[particles.getName()] + self.particlesDict.pop(particles.getName(), None) # Remove all forces from the particles for fg in self.forceGroupDict.values(): @@ -216,5 +215,14 @@ class ParticleEffect(NodePath): particles.softStop() def softStart(self): - for particles in self.getParticlesList(): - particles.softStart() + if self.__isValid(): + for particles in self.getParticlesList(): + particles.softStart() + else: + # Not asserting here since we want to crash live clients for more expedient bugfix + # (Sorry, live clients) + self.notify.error('Trying to start effect(%s) after cleanup.' % (self.getName(),)) + + def __isValid(self): + return hasattr(self, 'forceGroupDict') and \ + hasattr(self, 'particlesDict')