*** empty log message ***

This commit is contained in:
Mike Goslin 2001-01-26 21:28:40 +00:00
parent 070b750912
commit 47a77362d8
4 changed files with 102 additions and 57 deletions

View 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

View File

@ -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)

View File

@ -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()

View File

@ -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