mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
rationalize particle cleanup a bit
This commit is contained in:
parent
680ce82d3f
commit
1c1fb4fdcb
@ -28,30 +28,43 @@ class ParticleInterval(Interval.Interval):
|
||||
assert(duration > 0.0 or loop == 1)
|
||||
# Initialize superclass
|
||||
Interval.Interval.__init__(self, name, duration)
|
||||
self.cleanedUp = 0
|
||||
|
||||
def __del__(self):
|
||||
if self.particleEffect:
|
||||
self.particleEffect.cleanup()
|
||||
self.particleEffect = None
|
||||
|
||||
def privInitialize(self, t):
|
||||
renderParent = None
|
||||
if self.worldRelative:
|
||||
renderParent = render
|
||||
self.particleEffect.start(self.parent, renderParent)
|
||||
if self.particleEffect:
|
||||
self.particleEffect.start(self.parent, renderParent)
|
||||
self.state = CInterval.SStarted
|
||||
self.currT = t
|
||||
|
||||
def privStep(self, t):
|
||||
if self.state == CInterval.SPaused:
|
||||
# Restarting from a pause.
|
||||
self.particleEffect.start(self.parent, renderParent)
|
||||
self.state = CInterval.SStarted
|
||||
self.currT = t
|
||||
self.privInitialize(t)
|
||||
else:
|
||||
self.state = CInterval.SStarted
|
||||
self.currT = t
|
||||
|
||||
def privFinalize(self):
|
||||
self.particleEffect.cleanup()
|
||||
self.cleanedUp = 1
|
||||
if self.particleEffect:
|
||||
self.particleEffect.cleanup()
|
||||
self.particleEffect = None
|
||||
self.currT = self.getDuration()
|
||||
self.state = CInterval.SFinal
|
||||
|
||||
def privInstant(self):
|
||||
if self.particleEffect:
|
||||
self.particleEffect.cleanup()
|
||||
self.particleEffect = None
|
||||
self.currT = self.getDuration()
|
||||
self.state = CInterval.SFinal
|
||||
|
||||
def privInterrupt(self):
|
||||
self.particleEffect.cleanup()
|
||||
self.cleanedUp = 1
|
||||
self.particleEffect.disable()
|
||||
self.state = CInterval.SPaused
|
||||
|
@ -21,7 +21,7 @@ class ForceGroup(DirectObject):
|
||||
self.name = name
|
||||
|
||||
self.node = ForceNode.ForceNode(self.name)
|
||||
self.nodePath = hidden.attachNewNode(self.node)
|
||||
self.nodePath = NodePath(self.node)
|
||||
self.fEnabled = 0
|
||||
|
||||
self.particleEffect = None
|
||||
@ -29,8 +29,7 @@ class ForceGroup(DirectObject):
|
||||
def cleanup(self):
|
||||
for f in self.asList():
|
||||
self.removeForce(f)
|
||||
self.nodePath.removeNode()
|
||||
self.node = None
|
||||
self.nodePath.detachNode()
|
||||
self.particleEffect = None
|
||||
|
||||
def enable(self):
|
||||
|
@ -10,11 +10,10 @@ class ParticleEffect(NodePath):
|
||||
|
||||
def __init__(self, name=None, particles=None):
|
||||
"""__init__()"""
|
||||
NodePath.__init__(self)
|
||||
if (name == None):
|
||||
name = 'particle-effect-%d' % ParticleEffect.pid
|
||||
ParticleEffect.pid += 1
|
||||
self.assign(hidden.attachNewNode(name))
|
||||
NodePath.__init__(self, name)
|
||||
# Record particle effect name
|
||||
self.name = name
|
||||
# Enabled flag
|
||||
@ -35,15 +34,12 @@ class ParticleEffect(NodePath):
|
||||
self.reparentTo(parent)
|
||||
|
||||
def cleanup(self):
|
||||
self.reparentTo(hidden)
|
||||
self.detachNode()
|
||||
self.disable()
|
||||
for f in self.forceGroupDict.values():
|
||||
f.cleanup()
|
||||
for p in self.particlesDict.values():
|
||||
p.cleanup()
|
||||
forceGroupDict = {}
|
||||
particlesDict = {}
|
||||
self.removeNode()
|
||||
|
||||
def reset(self):
|
||||
self.removeAllForces()
|
||||
@ -64,6 +60,7 @@ class ParticleEffect(NodePath):
|
||||
|
||||
def disable(self):
|
||||
"""disable()"""
|
||||
self.detachNode()
|
||||
for p in self.particlesDict.values():
|
||||
p.setRenderParent(p.node)
|
||||
for f in self.forceGroupDict.values():
|
||||
@ -100,7 +97,7 @@ class ParticleEffect(NodePath):
|
||||
for f in forceGroup.asList():
|
||||
self.removeForce(f)
|
||||
|
||||
forceGroup.nodePath.reparentTo(hidden)
|
||||
forceGroup.nodePath.detachNode()
|
||||
forceGroup.particleEffect = None
|
||||
del self.forceGroupDict[forceGroup.getName()]
|
||||
|
||||
|
@ -48,7 +48,7 @@ class Particles(ParticleSystem.ParticleSystem):
|
||||
|
||||
# Set up a physical node
|
||||
self.node = PhysicalNode(self.name)
|
||||
self.nodePath = hidden.attachNewNode(self.node)
|
||||
self.nodePath = NodePath(self.node)
|
||||
self.setRenderParent(self.node)
|
||||
self.node.addPhysical(self)
|
||||
|
||||
@ -72,7 +72,7 @@ class Particles(ParticleSystem.ParticleSystem):
|
||||
self.clearAngularForces()
|
||||
self.setRenderParent(self.node)
|
||||
self.node.removePhysical(self)
|
||||
self.nodePath.removeNode()
|
||||
self.nodePath.detachNode()
|
||||
self.node = None
|
||||
self.factory = None
|
||||
self.renderer = None
|
||||
@ -131,7 +131,7 @@ class Particles(ParticleSystem.ParticleSystem):
|
||||
self.renderer = LineParticleRenderer.LineParticleRenderer()
|
||||
elif (type == "GeomParticleRenderer"):
|
||||
self.renderer = GeomParticleRenderer.GeomParticleRenderer()
|
||||
npath = hidden.attachNewNode('default-geom')
|
||||
npath = NodePath('default-geom')
|
||||
# This was moved here because we do not want to download
|
||||
# the direct tools with toontown.
|
||||
import DirectSelection
|
||||
|
Loading…
x
Reference in New Issue
Block a user