mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
*** empty log message ***
This commit is contained in:
parent
070b750912
commit
47a77362d8
84
direct/src/showbase/ParticleEffect.py
Normal file
84
direct/src/showbase/ParticleEffect.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
from PandaObject import *
|
||||||
|
from DirectObject import *
|
||||||
|
from ParticleManagerGlobal import *
|
||||||
|
from PhysicsManagerGlobal import *
|
||||||
|
from TaskManagerGlobal import *
|
||||||
|
|
||||||
|
import Particles
|
||||||
|
import ForceNode
|
||||||
|
import PhysicalNode
|
||||||
|
import ClockObject
|
||||||
|
|
||||||
|
globalClock = ClockObject.ClockObject.getGlobalClock()
|
||||||
|
|
||||||
|
class ParticleEffect(DirectObject):
|
||||||
|
def __init__(self, name):
|
||||||
|
"""__init__(self, name)"""
|
||||||
|
|
||||||
|
self.name = name
|
||||||
|
self.activated = 0
|
||||||
|
self.particleDict = {}
|
||||||
|
|
||||||
|
self.forceNode = ForceNode.ForceNode()
|
||||||
|
self.forceNodePath = hidden.attachNewNode(self.forceNode)
|
||||||
|
|
||||||
|
self.physicalNode = PhysicalNode.PhysicalNode()
|
||||||
|
self.physicalNodePath = hidden.attachNewNode(self.physicalNode)
|
||||||
|
|
||||||
|
def addLinearForce(self, force):
|
||||||
|
"""addLinearForce(self, force)"""
|
||||||
|
self.forceNode.addForce(force)
|
||||||
|
physicsMgr.addLinearForce(force)
|
||||||
|
|
||||||
|
def removeLinearForce(self, force):
|
||||||
|
"""removeLinearForce(self, force)"""
|
||||||
|
physicsMgr.removeLinearForce(force)
|
||||||
|
self.forceNode.removeForce(force)
|
||||||
|
|
||||||
|
def addAngularForce(self, force):
|
||||||
|
"""addAngularForce(self, force)"""
|
||||||
|
self.forceNode.addForce(force)
|
||||||
|
physicsMgr.addAngularForce(force)
|
||||||
|
|
||||||
|
def removeAngularForce(self, force):
|
||||||
|
"""removeAngularForce(self, force)"""
|
||||||
|
physicsMgr.removeAngularForce(force)
|
||||||
|
self.forceNode.removeForce(force)
|
||||||
|
|
||||||
|
def addParticles(self, particles):
|
||||||
|
"""addParticles(self, particles)"""
|
||||||
|
self.particleDict[particles.name] = particles
|
||||||
|
self.physicalNode.addPhysical(particles)
|
||||||
|
physicsMgr.attachPhysical(particles)
|
||||||
|
particleMgr.attachParticlesystem(particles)
|
||||||
|
|
||||||
|
def removeParticles(self, particles):
|
||||||
|
"""removeParticles(self, particles)"""
|
||||||
|
particleMgr.removeParticlesystem(particles)
|
||||||
|
physicsMgr.removePhysical(particles)
|
||||||
|
self.physicalNode.removePhysical(particles)
|
||||||
|
self.particleDict[particles.name] = None
|
||||||
|
|
||||||
|
def activate(self):
|
||||||
|
"""activate(self)"""
|
||||||
|
if (self.activated == 0):
|
||||||
|
self.activated = 1
|
||||||
|
self.forceNodePath.reparentTo(render)
|
||||||
|
self.physicalNodePath.reparentTo(render)
|
||||||
|
taskMgr.spawnTaskNamed(Task.Task(self.__update),
|
||||||
|
self.name + '-update')
|
||||||
|
|
||||||
|
def deactivate(self):
|
||||||
|
"""deactivate(self)"""
|
||||||
|
if (self.activated == 1):
|
||||||
|
self.activated = 0
|
||||||
|
taskMgr.removeTasksNamed(self.name + '-update')
|
||||||
|
self.forceNodePath.reparentTo(hidden)
|
||||||
|
self.physicalNodePath.reparentTo(hidden)
|
||||||
|
|
||||||
|
def __update(self, state):
|
||||||
|
"""__update(self, state)"""
|
||||||
|
dt = min(globalClock.getDt(), 0.1)
|
||||||
|
physicsMgr.doPhysics(dt)
|
||||||
|
particleMgr.doParticles(dt)
|
||||||
|
return Task.cont
|
@ -1,7 +1,4 @@
|
|||||||
from PandaObject import *
|
from PandaObject import *
|
||||||
from ParticleManagerGlobal import *
|
|
||||||
from PhysicsManagerGlobal import *
|
|
||||||
from TaskManagerGlobal import *
|
|
||||||
|
|
||||||
import ParticleSystem
|
import ParticleSystem
|
||||||
import BaseParticleFactory
|
import BaseParticleFactory
|
||||||
@ -24,23 +21,18 @@ import RingEmitter
|
|||||||
import SphereSurfaceEmitter
|
import SphereSurfaceEmitter
|
||||||
import SphereVolumeEmitter
|
import SphereVolumeEmitter
|
||||||
import TangentRingEmitter
|
import TangentRingEmitter
|
||||||
import PhysicalNode
|
|
||||||
import ForceNode
|
|
||||||
import RenderRelation
|
|
||||||
import LinearEulerIntegrator
|
|
||||||
import ClockObject
|
|
||||||
import string
|
import string
|
||||||
import os
|
import os
|
||||||
|
|
||||||
globalClock = ClockObject.ClockObject.getGlobalClock()
|
|
||||||
SparkleParticleRenderer.SparkleParticleRenderer.SPNOSCALE = 0
|
SparkleParticleRenderer.SparkleParticleRenderer.SPNOSCALE = 0
|
||||||
SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE = 1
|
SparkleParticleRenderer.SparkleParticleRenderer.SPSCALE = 1
|
||||||
|
|
||||||
class Particles(ParticleSystem.ParticleSystem):
|
class Particles(ParticleSystem.ParticleSystem):
|
||||||
|
|
||||||
def __init__(self, poolSize = 1024):
|
def __init__(self, name, poolSize = 1024):
|
||||||
"""__init__(self)"""
|
"""__init__(self)"""
|
||||||
|
|
||||||
|
self.name = name
|
||||||
ParticleSystem.ParticleSystem.__init__(self, poolSize)
|
ParticleSystem.ParticleSystem.__init__(self, poolSize)
|
||||||
self.setBirthRate(0.02)
|
self.setBirthRate(0.02)
|
||||||
self.setLitterSize(10)
|
self.setLitterSize(10)
|
||||||
@ -57,24 +49,6 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
self.emitterType = "undefined"
|
self.emitterType = "undefined"
|
||||||
self.setEmitter("SphereVolumeEmitter")
|
self.setEmitter("SphereVolumeEmitter")
|
||||||
|
|
||||||
self.node = PhysicalNode.PhysicalNode()
|
|
||||||
self.node.addPhysical(self)
|
|
||||||
self.nodePath = hidden.attachNewNode(self.node)
|
|
||||||
self.forceNode = ForceNode.ForceNode()
|
|
||||||
|
|
||||||
self.integrator = LinearEulerIntegrator.LinearEulerIntegrator()
|
|
||||||
|
|
||||||
physicsMgr.attachLinearIntegrator(self.integrator)
|
|
||||||
physicsMgr.attachPhysical(self)
|
|
||||||
|
|
||||||
particleMgr.setFrameStepping(1)
|
|
||||||
particleMgr.attachParticlesystem(self)
|
|
||||||
|
|
||||||
def cleanup(self):
|
|
||||||
"""cleanup(self)"""
|
|
||||||
physicsMgr.removePhysical(self)
|
|
||||||
particleMgr.removeParticlesystem(self)
|
|
||||||
|
|
||||||
def setFactory(self, type):
|
def setFactory(self, type):
|
||||||
"""setFactory(self, type)"""
|
"""setFactory(self, type)"""
|
||||||
if (self.factoryType == type):
|
if (self.factoryType == type):
|
||||||
@ -153,26 +127,6 @@ class Particles(ParticleSystem.ParticleSystem):
|
|||||||
return None
|
return None
|
||||||
ParticleSystem.ParticleSystem.setEmitter(self, self.emitter)
|
ParticleSystem.ParticleSystem.setEmitter(self, self.emitter)
|
||||||
|
|
||||||
def __update(self, state):
|
|
||||||
"""update(self, state)"""
|
|
||||||
dt = min(globalClock.getDt(), 0.1)
|
|
||||||
physicsMgr.doPhysics(dt)
|
|
||||||
particleMgr.doParticles(dt)
|
|
||||||
return Task.cont
|
|
||||||
|
|
||||||
def getNodePath(self):
|
|
||||||
"""getNode(self)"""
|
|
||||||
return self.nodePath
|
|
||||||
|
|
||||||
def start(self):
|
|
||||||
"""start(self)"""
|
|
||||||
self.stop()
|
|
||||||
taskMgr.spawnTaskNamed(Task.Task(self.__update), 'update-particles')
|
|
||||||
|
|
||||||
def stop(self):
|
|
||||||
"""stop(self)"""
|
|
||||||
taskMgr.removeTasksNamed('update-particles')
|
|
||||||
|
|
||||||
def bakeConfig(self, filename):
|
def bakeConfig(self, filename):
|
||||||
"""saveFileData(self, filename)"""
|
"""saveFileData(self, filename)"""
|
||||||
#fname = Filename(filename)
|
#fname = Filename(filename)
|
||||||
|
@ -11,6 +11,7 @@ import Task
|
|||||||
import EventManager
|
import EventManager
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
|
import LinearEulerIntegrator
|
||||||
|
|
||||||
class ShowBase:
|
class ShowBase:
|
||||||
|
|
||||||
@ -106,7 +107,10 @@ class ShowBase:
|
|||||||
self.taskMgr = taskMgr
|
self.taskMgr = taskMgr
|
||||||
|
|
||||||
self.particleMgr = particleMgr
|
self.particleMgr = particleMgr
|
||||||
|
self.particleMgr.setFrameStepping(1)
|
||||||
self.physicsMgr = physicsMgr
|
self.physicsMgr = physicsMgr
|
||||||
|
self.integrator = LinearEulerIntegrator.LinearEulerIntegrator()
|
||||||
|
self.physicsMgr.attachLinearIntegrator(self.integrator)
|
||||||
|
|
||||||
self.createAudioManager()
|
self.createAudioManager()
|
||||||
self.createRootPanel()
|
self.createRootPanel()
|
||||||
|
@ -10,6 +10,7 @@ import EntryScale
|
|||||||
import VectorWidgets
|
import VectorWidgets
|
||||||
import Placer
|
import Placer
|
||||||
import Particles
|
import Particles
|
||||||
|
import ParticleEffect
|
||||||
|
|
||||||
class ParticlePanel(AppShell):
|
class ParticlePanel(AppShell):
|
||||||
# Override class variables
|
# Override class variables
|
||||||
@ -20,14 +21,15 @@ class ParticlePanel(AppShell):
|
|||||||
usestatusarea = 0
|
usestatusarea = 0
|
||||||
balloonState = 'both'
|
balloonState = 'both'
|
||||||
|
|
||||||
def __init__(self, particles, **kw):
|
def __init__(self, particleEffect, particles, **kw):
|
||||||
INITOPT = Pmw.INITOPT
|
INITOPT = Pmw.INITOPT
|
||||||
optiondefs = (
|
optiondefs = (
|
||||||
('title', self.appname, None),
|
('title', self.appname, None),
|
||||||
)
|
)
|
||||||
self.defineoptions(kw, optiondefs)
|
self.defineoptions(kw, optiondefs)
|
||||||
|
|
||||||
self.particles = particles
|
self.particleEffect = particleEffect
|
||||||
|
self.particles = particles
|
||||||
|
|
||||||
AppShell.__init__(self)
|
AppShell.__init__(self)
|
||||||
|
|
||||||
@ -656,9 +658,10 @@ class ParticlePanel(AppShell):
|
|||||||
|
|
||||||
def toggleParticleSystem(self):
|
def toggleParticleSystem(self):
|
||||||
if self.systemActive.get():
|
if self.systemActive.get():
|
||||||
self.particles.start()
|
self.particleEffect.activate()
|
||||||
else:
|
else:
|
||||||
self.particles.stop()
|
self.particleEffect.deactivate()
|
||||||
|
return None
|
||||||
|
|
||||||
## SYSTEM PAGE ##
|
## SYSTEM PAGE ##
|
||||||
def updateSystemWidgets(self):
|
def updateSystemWidgets(self):
|
||||||
@ -672,9 +675,9 @@ class ParticlePanel(AppShell):
|
|||||||
self.getWidget('System', 'Litter Spread').set(litterSpread, 0)
|
self.getWidget('System', 'Litter Spread').set(litterSpread, 0)
|
||||||
systemLifespan = self.particles.getSystemLifespan()
|
systemLifespan = self.particles.getSystemLifespan()
|
||||||
self.getWidget('System', 'Lifespan').set(systemLifespan, 0)
|
self.getWidget('System', 'Lifespan').set(systemLifespan, 0)
|
||||||
pos = self.particles.getNodePath().getPos()
|
pos = self.particleEffect.physicalNodePath.getPos()
|
||||||
self.getWidget('System', 'Pos').set([pos[0], pos[1], pos[2]], 0)
|
self.getWidget('System', 'Pos').set([pos[0], pos[1], pos[2]], 0)
|
||||||
hpr = self.particles.getNodePath().getHpr()
|
hpr = self.particleEffect.physicalNodePath.getHpr()
|
||||||
self.getWidget('System', 'Hpr').set([hpr[0], hpr[1], hpr[2]], 0)
|
self.getWidget('System', 'Hpr').set([hpr[0], hpr[1], hpr[2]], 0)
|
||||||
self.systemLocalVelocity.set(self.particles.getLocalVelocityFlag())
|
self.systemLocalVelocity.set(self.particles.getLocalVelocityFlag())
|
||||||
self.systemGrowsOlder.set(self.particles.getSystemGrowsOlderFlag())
|
self.systemGrowsOlder.set(self.particles.getSystemGrowsOlderFlag())
|
||||||
@ -693,9 +696,9 @@ class ParticlePanel(AppShell):
|
|||||||
def toggleSystemGrowsOlder(self):
|
def toggleSystemGrowsOlder(self):
|
||||||
self.particles.setSystemGrowsOlderFlag(self.systemGrowsOlder.get())
|
self.particles.setSystemGrowsOlderFlag(self.systemGrowsOlder.get())
|
||||||
def setSystemPos(self, pos):
|
def setSystemPos(self, pos):
|
||||||
self.particles.getNodePath().setPos(Vec3(pos[0], pos[1], pos[2]))
|
self.particleEffect.physicalNodePath.setPos(Vec3(pos[0], pos[1], pos[2]))
|
||||||
def setSystemHpr(self, pos):
|
def setSystemHpr(self, pos):
|
||||||
self.particles.getNodePath().setHpr(Vec3(pos[0], pos[1], pos[2]))
|
self.particleEffect.physicalNodePath.setHpr(Vec3(pos[0], pos[1], pos[2]))
|
||||||
|
|
||||||
## FACTORY PAGE ##
|
## FACTORY PAGE ##
|
||||||
def selectFactoryType(self, type):
|
def selectFactoryType(self, type):
|
||||||
@ -1165,7 +1168,7 @@ class ParticlePanel(AppShell):
|
|||||||
def selectSystemNamed(self, name):
|
def selectSystemNamed(self, name):
|
||||||
system = self.systemDict.get(name, None)
|
system = self.systemDict.get(name, None)
|
||||||
if system == None:
|
if system == None:
|
||||||
system = Particles.Particles(1024)
|
system = Particles.Particles('new-particles')
|
||||||
self.systemDict[name] = system
|
self.systemDict[name] = system
|
||||||
if system:
|
if system:
|
||||||
self.particles = system
|
self.particles = system
|
||||||
|
Loading…
x
Reference in New Issue
Block a user