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