def __init__( self ): ParticleEffect.ParticleEffect.__init__( self ) self.reset() self.setPos(0.000, 0.000, 0.000) self.setHpr(0.000, 0.000, 0.000) self.setScale(1.000, 1.000, 1.000) self.particle = Particles.Particles('particles-1') # Particles parameters self.particle.setFactory("PointParticleFactory") self.particle.setRenderer("LineParticleRenderer") # self.particle.setRenderer("PointParticleRenderer") self.particle.setEmitter("DiscEmitter") self.particle.setPoolSize( 4096 ) self.particle.setBirthRate( 0.01 ) self.particle.setLitterSize(10) self.particle.setLitterSpread(0) self.particle.setSystemLifespan(0.0000) self.particle.setLocalVelocityFlag(1) self.particle.setSystemGrowsOlderFlag(0) # Factory parameters self.particle.factory.setLifespanBase(1.5000) self.particle.factory.setLifespanSpread(0.0000) self.particle.factory.setMassBase(1.0000) self.particle.factory.setMassSpread(0.0000) self.particle.factory.setTerminalVelocityBase(400.0000) self.particle.factory.setTerminalVelocitySpread(0.0000) # Point factory parameters # Renderer parameters self.particle.renderer.setAlphaMode(BaseParticleRenderer.PRALPHANONE) self.particle.renderer.setUserAlpha(1.00) # # Point parameters # self.particle.renderer.setPointSize(1.00) # self.particle.renderer.setStartColor(Vec4(1.00, 1.00, 1.00, 1.00)) # self.particle.renderer.setEndColor(Vec4(1.00, 1.00, 1.00, 1.00)) # self.particle.renderer.setBlendType(PointParticleRenderer.PPONECOLOR) # self.particle.renderer.setBlendMethod(BaseParticleRenderer.PPNOBLEND) # Line parameters # self.particle.renderer.setHeadColor(Vec4(1.00, 1.00, 1.00, 1.00)) # self.particle.renderer.setTailColor(Vec4(1.00, 1.00, 1.00, 1.00)) self.particle.renderer.setHeadColor(Vec4(1.00, 1.00, 1.00, 1.0)) self.particle.renderer.setTailColor(Vec4(1.00, 1.00, 1.00, 1.0)) self.particle.renderer.setLineScaleFactor(1.00) # Emitter parameters self.particle.emitter.setEmissionType(BaseParticleEmitter.ETEXPLICIT) self.particle.emitter.setAmplitude(1.0000) self.particle.emitter.setAmplitudeSpread(0.0000) self.particle.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 0.0000)) self.particle.emitter.setExplicitLaunchVector(Vec3(0.0000, 0.0000, 0.0000)) self.particle.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000)) # Disc parameters self.particle.emitter.setRadius(1.0000) self.addParticles(self.particle) self.forceGroup = ForceGroup.ForceGroup('gravity') # Force parameters force0 = LinearVectorForce(Vec3(0.0000, 0.0000, -1.0000), 1.0000, 0) force0.setVectorMasks(1, 1, 1) force0.setActive(1) self.forceGroup.addForce(force0) self.addForceGroup(self.forceGroup)
def _make_pfx (self, enode, rnode, pos, radius, scale1, scale2, birthrate, lifespan, zspinini, zspinfin, zspinvel, poolsize, littersize, amplitude, ampspread, risefact, texpath, color, alphamode, softstop): pfx = ParticleEffect() pfx.setPos(pos) p0 = make_particles() p0.setPoolSize(poolsize) p0.setBirthRate(birthrate) p0.setLitterSize(littersize) p0.setLitterSpread(0) #p0.setSystemLifespan(1.0) #p0.setLocalVelocityFlag(1) #p0.setSystemGrowsOlderFlag(0) # p0.setFactory("PointParticleFactory") # p0.factory.setLifespanBase(lifespan) # p0.factory.setLifespanSpread(0.0) # #p0.factory.setMassBase(1.00) # #p0.factory.setMassSpread(0.00) # #p0.factory.setTerminalVelocityBase(400.0000) # #p0.factory.setTerminalVelocitySpread(0.0000) p0.setFactory("ZSpinParticleFactory") p0.factory.setLifespanBase(lifespan) p0.factory.setLifespanSpread(0.0) #p0.factory.setMassBase(1.00) #p0.factory.setMassSpread(0.00) #p0.factory.setTerminalVelocityBase(400.0000) #p0.factory.setTerminalVelocitySpread(0.0000) p0.factory.setAngularVelocity(zspinvel) p0.factory.setFinalAngle(zspinfin) p0.factory.setInitialAngle(zspinini) p0.setRenderer("SpriteParticleRenderer") p0.renderer.setAlphaMode(alphamode) texpaths = texpath if not isinstance(texpath, (tuple, list)): texpaths = [texpaths] for texpath in texpaths: texture = base.load_texture("data", texpath) p0.renderer.addTexture(texture) # p0.renderer.setUserAlpha(alpha) p0.renderer.setColor(color) p0.renderer.setXScaleFlag(1) p0.renderer.setYScaleFlag(1) p0.renderer.setAnimAngleFlag(1) p0.renderer.setInitialXScale(scale1) p0.renderer.setFinalXScale(scale2) p0.renderer.setInitialYScale(scale1) p0.renderer.setFinalYScale(scale2) p0.setEmitter("SphereVolumeEmitter") p0.emitter.setRadius(radius) p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) p0.emitter.setAmplitude(amplitude) p0.emitter.setAmplitudeSpread(ampspread) #p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 0.0000)) #p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000)) #p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000)) f0 = ForceGroup("vertex") force0 = LinearVectorForce(risefact * amplitude) force0.setActive(1) f0.addForce(force0) p0.setRenderParent(rnode) pfx.addForceGroup(f0) pfx.addParticles(p0) pfx.start(enode) if softstop: pfx.softStop() return pfx