def setMOLLYForceGroups(self): """ Initialize MOLLY force fields and energies. """ self.myMOLLYForcesBonded = ForceGroup() self.myMOLLYForcesHBonded = ForceGroup() self.myHBondForces = ForceGroup() self.mollyEnergy = ScalarStructure.ScalarStructure()
def shootFireworkRing(x, y, z, color1, color2, amp): f = ParticleEffect.ParticleEffect() p0 = Particles.Particles('particles-1') p0.setFactory('PointParticleFactory') p0.setRenderer('SparkleParticleRenderer') p0.setEmitter('RingEmitter') p0.setPoolSize(100) p0.setBirthRate(0.01) p0.setLitterSize(100) p0.setLitterSpread(0) p0.factory.setLifespanBase(1.5) p0.factory.setLifespanSpread(0.5) p0.factory.setMassBase(1.0) p0.factory.setMassSpread(0.0) p0.factory.setTerminalVelocityBase(20.0) p0.factory.setTerminalVelocitySpread(2.0) p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) p0.renderer.setUserAlpha(1.0) p0.renderer.setCenterColor(color1) p0.renderer.setEdgeColor(color2) p0.renderer.setBirthRadius(0.29999999999999999) p0.renderer.setDeathRadius(0.29999999999999999) p0.renderer.setLifeScale(SparkleParticleRenderer.SPNOSCALE) p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) p0.emitter.setAmplitude(0) p0.emitter.setAmplitudeSpread(0) f0 = ForceGroup.ForceGroup('gravity') force0 = LinearSourceForce(Point3(x, y, z + 10), LinearDistanceForce.FTONEOVERR, 0.10000000000000001, 1.1000000000000001 * amp, 1) force0.setActive(1) f0.addForce(force0) force1 = LinearSinkForce(Point3(x, y, z + 10), LinearDistanceForce.FTONEOVERR, 0.5, 2.0 * amp, 1) force1.setActive(1) f0.addForce(force1) f.addForceGroup(f0) p0.emitter.setRadius(4.0) f.addParticles(p0) f.setPos(x, y, z + 10) f.setHpr(0, random.random() * 180, random.random() * 180) sfx = loader.loadSfx('phase_4/audio/sfx/firework_distance_03.mp3') t = Sequence(Func(f.start, render, render), Func(sfx.play), Wait(0.5), Func(p0.setBirthRate, 3), Wait(1.5), Func(f.cleanup), name=getNextSequenceName('shootFireworkRing')) t.start()
def shootFireworkCircleSprite(x, y, z, color, texture, amp): f = ParticleEffect.ParticleEffect() p0 = Particles.Particles('particles-1') p0.setFactory('PointParticleFactory') p0.setRenderer('SpriteParticleRenderer') p0.setEmitter('SphereVolumeEmitter') p0.setPoolSize(100) p0.setBirthRate(0.01) p0.setLitterSize(100) p0.factory.setLifespanBase(2.0) p0.factory.setLifespanSpread(0.5) p0.factory.setTerminalVelocityBase(400.0) p0.factory.setTerminalVelocitySpread(40.0) p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAUSER) p0.renderer.setUserAlpha(1.0) p0.renderer.setFromNode(texture) p0.renderer.setColor(color) p0.renderer.setXScaleFlag(1) p0.renderer.setYScaleFlag(1) p0.renderer.setInitialXScale(0.01) p0.renderer.setFinalXScale(0.040000000000000001) p0.renderer.setInitialYScale(0.01) p0.renderer.setFinalYScale(0.040000000000000001) p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) p0.emitter.setAmplitudeSpread(0.10000000000000001) p0.emitter.setAmplitude(amp) p0.emitter.setRadius(0.10000000000000001) f.addParticles(p0) circleForceGroup = ForceGroup.ForceGroup('gravity') force1 = LinearSinkForce(Point3(x, y, z - 100), LinearDistanceForce.FTONEOVERRSQUARED, 2.0, 0.29999999999999999 * amp * 0.10000000000000001, 1) force1.setActive(1) circleForceGroup.addForce(force1) f.addForceGroup(circleForceGroup) f.setPos(x, y, z + 10) sfxName = random.choice(('phase_4/audio/sfx/firework_explosion_01.mp3', 'phase_4/audio/sfx/firework_explosion_02.mp3', 'phase_4/audio/sfx/firework_explosion_03.mp3')) sfx = loader.loadSfx(sfxName) t = Sequence(Func(f.start, render, render), Func(sfx.play), Wait(0.5), Func(p0.setBirthRate, 3), Wait(2.0), Func(f.cleanup), name=getNextSequenceName('shootFireworkSprite')) t.start()
def shootFireworkRocket(x, y, z, color1, color2, amp): f = ParticleEffect.ParticleEffect() p0 = Particles.Particles('particles-1') p0.setFactory('PointParticleFactory') p0.setRenderer('SparkleParticleRenderer') p0.setEmitter('SphereVolumeEmitter') p0.setPoolSize(110) p0.setBirthRate(0.01) p0.setLitterSize(2) p0.setLitterSpread(0) p0.factory.setLifespanBase(0.40000000000000002) p0.factory.setLifespanSpread(0.10000000000000001) p0.factory.setMassBase(1.0) p0.factory.setMassSpread(0.0) p0.factory.setTerminalVelocityBase(400.0) p0.factory.setTerminalVelocitySpread(0.0) p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) p0.renderer.setUserAlpha(1.0) p0.renderer.setCenterColor(color1) p0.renderer.setEdgeColor(color2) p0.renderer.setBirthRadius(0.59999999999999998) p0.renderer.setDeathRadius(0.59999999999999998) p0.renderer.setLifeScale(SparkleParticleRenderer.SPNOSCALE) p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) p0.emitter.setAmplitude(amp) p0.emitter.setAmplitudeSpread(0.0) p0.emitter.setRadius(0.29999999999999999) f.addParticles(p0) gravityForceGroup = ForceGroup.ForceGroup('gravity') force0 = LinearVectorForce(Vec3(0.0, 0.0, -10.0), 1.0, 0) force0.setActive(1) gravityForceGroup.addForce(force0) f.addForceGroup(gravityForceGroup) f.setPos(x, y, z) sfxName = random.choice(('phase_4/audio/sfx/firework_whistle_01.mp3', 'phase_4/audio/sfx/firework_whistle_02.mp3')) sfx = loader.loadSfx(sfxName) t = Sequence(Func(f.start, render, render), Func(sfx.play), LerpPosInterval(f, 2.0, Vec3(x, y, z + 20 * amp), blendType='easeInOut'), Func(p0.setBirthRate, 3), Wait(0.5), Func(f.cleanup), name=getNextSequenceName('shootFirework')) t.start()
def shootFireworkCircleGeneric(x, y, z, color1, color2, amp, poolSize): f = ParticleEffect.ParticleEffect() p0 = Particles.Particles('particles-1') p0.setFactory('PointParticleFactory') p0.setRenderer('SparkleParticleRenderer') p0.setEmitter('SphereVolumeEmitter') p0.setPoolSize(poolSize) p0.setBirthRate(0.01) p0.setLitterSize(poolSize) p0.factory.setLifespanBase(2.0) p0.factory.setLifespanSpread(0.5) p0.factory.setTerminalVelocityBase(400.0) p0.factory.setTerminalVelocitySpread(40.0) p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) p0.renderer.setUserAlpha(1.0) p0.renderer.setCenterColor(color1) p0.renderer.setEdgeColor(color1) p0.renderer.setBirthRadius(0.4) p0.renderer.setDeathRadius(0.6) p0.renderer.setLifeScale(SparkleParticleRenderer.SPSCALE) p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) p0.emitter.setAmplitudeSpread(0.1) p0.emitter.setAmplitude(amp) p0.emitter.setRadius(0.1) f.addParticles(p0) circleForceGroup = ForceGroup.ForceGroup('gravity') force1 = LinearSinkForce(Point3(x, y, z - 100), LinearDistanceForce.FTONEOVERRSQUARED, 2.0, 0.3 * amp * 0.1, 1) force1.setActive(1) circleForceGroup.addForce(force1) f.addForceGroup(circleForceGroup) f.setPos(x, y, z + 10) sfxName = random.choice(('phase_4/audio/sfx/firework_explosion_01.mp3', 'phase_4/audio/sfx/firework_explosion_02.mp3', 'phase_4/audio/sfx/firework_explosion_03.mp3')) sfx = loader.loadSfx(sfxName) t = Sequence(Func(f.start, render, render), Func(sfx.play), Wait(0.5), Func(p0.setBirthRate, 3), Wait(0.5), Func(p0.renderer.setCenterColor, color2), Func(p0.renderer.setEdgeColor, color2), Wait(1.5), Func(f.cleanup), name=getNextSequenceName('shootFireworkCircle')) t.start()
if __name__ == "__main__": from direct.directbase.TestStart import * from panda3d.physics import LinearVectorForce from panda3d.core import Vec3 import ParticleEffect from direct.tkpanels import ParticlePanel import Particles import ForceGroup # Showbase base.enableParticles() # ForceGroup fg = ForceGroup.ForceGroup() gravity = LinearVectorForce(Vec3(0.0, 0.0, -10.0)) fg.addForce(gravity) # Particles p = Particles.Particles() # Particle effect pe = ParticleEffect.ParticleEffect('particle-fx') pe.reparentTo(render) #pe.setPos(0.0, 5.0, 4.0) pe.addForceGroup(fg) pe.addParticles(p) # Particle Panel pp = ParticlePanel.ParticlePanel(pe)