def __init__(self, particleFn, name = None, hpr = None, position = None, size = None, duration = 0, ** a): if name is None: name = 'PEffect-%d' % PEffect.pid PEffect.pid += 1 Handle.__init__(self, name = name, duration = duration) #pathname = "/lib/panda/lib/lib-original/particles/" base.enableParticles() p = ParticleEffect() particleFn(p, a) self.d.model = p # ??? self.__dict__['position'] = newSignalRefd(self, 'position', P3Type, P3(0,0,0)) self.__dict__['hpr'] = newSignalRefd(self, 'hpr', HPRType, HPR(0,0,0)) self.__dict__['size'] = newSignalRefd(self, 'size', numType, 1) if size is not None: self.size.setBehavior(size) if position is not None: self.position.setBehavior(position) if hpr is not None: self.hpr.setBehavior(hpr) p.reparentTo(render) p.start()
def loadParticleFile(name): global particleSearchPath if particleSearchPath == None: particleSearchPath = DSearchPath() if AppRunnerGlobal.appRunner: particleSearchPath.appendDirectory(Filename.expandFrom('$TT_3_5_ROOT/phase_3.5/etc')) elif not os.path.expandvars('$TOONTOWN'): pass basePath = './toontown' particleSearchPath.appendDirectory(Filename.fromOsSpecific(basePath + '/src/battle')) particleSearchPath.appendDirectory(Filename.fromOsSpecific(basePath + '/src/safezone')) particleSearchPath.appendDirectory(Filename('phase_3.5/etc')) particleSearchPath.appendDirectory(Filename('phase_4/etc')) particleSearchPath.appendDirectory(Filename('phase_5/etc')) particleSearchPath.appendDirectory(Filename('phase_8/etc')) particleSearchPath.appendDirectory(Filename('phase_9/etc')) particleSearchPath.appendDirectory(Filename('.')) pfile = Filename(name) found = vfs.resolveFilename(pfile, particleSearchPath) if not found: notify.warning('loadParticleFile() - no path: %s' % name) return None notify.debug('Loading particle file: %s' % pfile) effect = ParticleEffect() effect.loadConfig(pfile) return effect
def __init__(self, particleFn, name = 'particleEffect', hpr = None, position = None, size = None, duration = 0, parent = render, **a): Proxy.__init__(self, name = name + ":" + str(PandaGlobals.nextModelId), updater = peffectUpdater, types = {"position":p3Type, "hpr":hprType, "size":numType}) #pathname = "/lib/panda/lib/lib-original/particles/" #base.enableParticles() #this should be in start in main program, this should probably go away base.enableParticles() p = ParticleEffect() self._pandaModel = p self._onScreen = False self._parent = getModel(parent) if position is not None: self.position = position else: self.position = P3(0, 0, 0) if hpr is not None: self.hpr = hpr else: self.hpr = SHPR(0, 0, 0) if size is not None: self.size = size else: self.size = 1 particleFn(p, a) p.start() if duration > 0: react(self, delay(duration), exitScene)
def __init__(self, effectParent = None): PooledEffect.__init__(self) EffectController.__init__(self) if effectParent: self.reparentTo(effectParent) self.duration = 10.0 model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleWhiteSmoke') self.setDepthWrite(0) self.setFogOff() self.setLightOff() self.setColorScaleOff() self.setBin('fixed', 60) self.f = ParticleEffect.ParticleEffect('SwordFreeze') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('LineEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(24) self.p0.setBirthRate(0.01) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.setFloorZ(-1.0) self.p0.factory.setLifespanBase(0.59999999999999998) self.p0.factory.setLifespanSpread(0.20000000000000001) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAINOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 0.80000000000000004)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne) self.p0.renderer.getColorInterpolationManager().addLinear(0.0, 1.0, Vec4(0.25, 0.29999999999999999, 1, 1), Vec4(0.69999999999999996, 0.80000000000000004, 1, 1), 1) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(-0.75) self.p0.emitter.setAmplitudeSpread(0.25) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 10.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.p0.emitter.setEndpoint1(Point3(-1.25, 0.0, 0.0)) self.p0.emitter.setEndpoint2(Point3(1.25, 0.0, 0.0)) self.setEffectScale(1.0)
def __init__(self, parent = None): PooledEffect.__init__(self) EffectController.__init__(self) if parent is not None: self.reparentTo(parent) if not self.particleDummy: self.particleDummy = render.attachNewNode(ModelNode('AttuneParticleDummy')) self.particleDummy.setDepthWrite(0) self.particleDummy.setLightOff() self.f = ParticleEffect.ParticleEffect('AttuneEffect') self.f.reparentTo(self) self.effectGeom = loader.loadModel('models/effects/voodooRing') self.effectColor = Vec4(1, 1, 1, 1) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('GeomParticleRenderer') self.p0.setEmitter('DiscEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(64) self.p0.setBirthRate(0.029999999999999999) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(1.75) self.p0.factory.setLifespanSpread(0.0) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setGeomNode(self.effectGeom.node()) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setZScaleFlag(1) self.p0.renderer.setInitialXScale(1.0) self.p0.renderer.setFinalXScale(4.0) self.p0.renderer.setInitialYScale(1.0) self.p0.renderer.setFinalYScale(4.0) self.p0.renderer.setInitialZScale(1.0) self.p0.renderer.setFinalZScale(4.0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(0.20000000000000001) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, -0.5)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.p0.emitter.setRadius(0.75)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('phase_4/models/props/tt_m_efx_ext_particleCards') self.card = model.find('**/tt_t_efx_ext_particleWhiteGlow') self.cardScale = 64.0 self.effectColor = Vec4(1, 1, 1, 1) self.effectScale = 1.0 self.lifespan = 0.5 if not GlowTrail.particleDummy: GlowTrail.particleDummy = render.attachNewNode(ModelNode('GlowTrailParticleDummy')) GlowTrail.particleDummy.setDepthWrite(0) GlowTrail.particleDummy.setLightOff() GlowTrail.particleDummy.setFogOff() self.f = ParticleEffect.ParticleEffect('GlowTrail') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('PointEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(64) self.p0.setBirthRate(0.02) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(0) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(self.lifespan) self.p0.factory.setLifespanSpread(0.1) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, -2.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(self.effectScale)
def __init__(self, parent=None): PooledEffect.__init__(self) EffectController.__init__(self) if parent is not None: self.reparentTo(parent) if not SteamCloud.particleDummy: SteamCloud.particleDummy = base.effectsRoot.attachNewNode( ModelNode('SteamCloudParticleDummy')) SteamCloud.particleDummy.setDepthWrite(0) SteamCloud.particleDummy.setLightOff() SteamCloud.particleDummy.setBin('fixed', 120) self.f = ParticleEffect.ParticleEffect('SteamCloud') self.f.reparentTo(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleWhiteSteam') self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('RectangleEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(8) self.p0.setBirthRate(0.5) self.p0.setLitterSize(1) self.p0.setLitterSpread(1) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.setFloorZ(-10.0) self.p0.factory.setLifespanBase(10.0) self.p0.factory.setLifespanSpread(4.0) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.25) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod( BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(1.0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleSmoke') self.radius = 10.0 self.setDepthWrite(0) self.setLightOff() self.f = ParticleEffect.ParticleEffect('DesolationSmoke') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('RingEmitter') self.f.addParticles(self.p0) f0 = ForceGroup.ForceGroup('gravity') force0 = LinearVectorForce(Vec3(0.0, 0.0, -2.0), 1.0, 1) force0.setActive(1) f0.addForce(force0) self.f.addForceGroup(f0) self.p0.setPoolSize(128) self.p0.setLitterSpread(8) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(2.0) self.p0.factory.setLifespanSpread(0.5) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.2) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.5) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setInitialXScale(0.05 * self.cardScale) self.p0.renderer.setFinalXScale(0.2 * self.cardScale) self.p0.renderer.setInitialYScale(0.05 * self.cardScale) self.p0.renderer.setFinalYScale(0.2 * self.cardScale) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM) self.p0.emitter.setAmplitude(30.0) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setExplicitLaunchVector(Vec3(5.0, 0.0, 0.0)) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 3.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0))
def __init__(self, effectParent=None): PooledEffect.__init__(self) EffectController.__init__(self) self.effectScale = 1.0 model = loader.loadModel('models/effects/particleCards') self.card = model.find('**/particleSparkle') if not LightSparks.particleDummy: LightSparks.particleDummy = base.effectsRoot.attachNewNode( ModelNode('LightSparksParticleDummy')) LightSparks.particleDummy.setColorScaleOff() LightSparks.particleDummy.setDepthWrite(0) LightSparks.particleDummy.setLightOff() LightSparks.particleDummy.setBin('fixed', 70) self.f = ParticleEffect.ParticleEffect('FireSparks') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-sparks') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('DiscEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(10) self.p0.setBirthRate(0.10000000000000001) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(1.0) self.p0.factory.setLifespanSpread(0.25) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.20000000000000001) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 0.25, 0.10000000000000001, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 1.0)) self.setEffectScale(1.0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleRockShower') self.cardScale = 64.0 self.effectScale = 1.0 self.particleDummy = base.effectsRoot.attachNewNode(ModelNode('WaterDripsParticleDummy')) self.particleDummy.setDepthWrite(0) self.particleDummy.setFogOff() self.particleDummy.setLightOff() self.particleDummy.setBin('fixed', 60) self.f = ParticleEffect.ParticleEffect('TentacleWaterDrips') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('RectangleEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(36) self.p0.setBirthRate(0.02) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.setFloorZ(0.0) self.p0.factory.setLifespanBase(1.5) self.p0.factory.setLifespanSpread(0.20000000000000001) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.75) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(1.0) self.p0.emitter.setAmplitudeSpread(0.25) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setOffsetForce(Vec3(0.0, 1.0, -32)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(self.effectScale) self.setEffectLength(self.effectScale)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleWhiteSmoke') if not self.particleDummy: self.particleDummy = render.attachNewNode(ModelNode('selfParticleDummy')) self.particleDummy.setDepthWrite(0) self.particleDummy.setColorScaleOff() self.particleDummy.setLightOff() self.particleDummy.hide(OTPRender.ShadowCameraBitmask) self.f = ParticleEffect.ParticleEffect('DesolationChargeSmoke') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(256) self.p0.setLitterSize(2) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(1.5) self.p0.factory.setLifespanSpread(0.25) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.2) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.25) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setInitialXScale(0.001 * self.cardScale) self.p0.renderer.setFinalXScale(0.01 * self.cardScale) self.p0.renderer.setInitialYScale(0.001 * self.cardScale) self.p0.renderer.setFinalYScale(0.01 * self.cardScale) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM) self.p0.emitter.setAmplitude(0.25) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 0.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 10.0)) self.p0.emitter.setRadius(0.1)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleSmoke') self.speed = 20.0 self.radius = 6.0 self.spriteScale = 1.0 if not SmokeBlast.particleDummy: SmokeBlast.particleDummy = render.attachNewNode( ModelNode('SmokeBlastParticleDummy')) SmokeBlast.particleDummy.setDepthWrite(0) SmokeBlast.particleDummy.setLightOff() SmokeBlast.particleDummy.setColorScaleOff() self.f = ParticleEffect.ParticleEffect('SmokeBlast') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('RectangleEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(16) self.p0.setBirthRate(0.5) self.p0.setLitterSize(4) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.setFloorZ(0.0) self.p0.factory.setLifespanBase(2.0) self.p0.factory.setLifespanSpread(0.75) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(500.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.75) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 0.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 1.0)) self.setEffectScale(1.0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) self.setDepthWrite(0) self.setLightOff() self.setColorScaleOff() self.setFogOff() model = loader.loadModel('models/effects/candleHalo') self.card = model.find('**/effectCandleHalo') self.f = ParticleEffect.ParticleEffect('AttuneSmoke') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('DiscEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(64) self.p0.setBirthRate(0.02) self.p0.setLitterSize(7) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(0) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(0.59999999999999998) self.p0.factory.setLifespanSpread(0.5) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(0, 0, 0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setInitialXScale(0.02 * self.cardScale) self.p0.renderer.setFinalXScale(0.01 * self.cardScale) self.p0.renderer.setInitialYScale(0.001 * self.cardScale) self.p0.renderer.setFinalYScale(0.059999999999999998 * self.cardScale) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod( BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(0.0) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 4.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.p0.emitter.setRadius(1.5)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleGlow') self.blueCard = model.find('**/particleGlowBlue') self.darkCard = model.find('**/effectDarkGlow') self.particleDummy = render.attachNewNode(ModelNode('SparkBurstParticleDummy')) self.particleDummy.setDepthWrite(0) self.particleDummy.setLightOff() self.particleDummy.setFogOff() self.particleDummy.setColorScaleOff() self.effectColor = Vec4(1, 1, 1, 1) self.f = ParticleEffect.ParticleEffect('SparkBurst') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) f0 = ForceGroup.ForceGroup('Noise') self.f.addForceGroup(f0) self.p0.setPoolSize(32) self.p0.setBirthRate(0.02) self.p0.setLitterSize(10) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(0.3) self.p0.factory.setLifespanSpread(0.2) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.8) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(1) self.p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OOne, ColorBlendAttrib.OOneMinusIncomingAlpha) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitudeSpread(4.0) self.p0.emitter.setOffsetForce(Vec3(1.0, 1.0, -0.1)) self.p0.emitter.setExplicitLaunchVector(Vec3(0.1, 0.0, 100.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.p0.emitter.setRadius(0.5)
def __init__(self, effectParent=None): PooledEffect.__init__(self) EffectController.__init__(self) if effectParent: self.reparentTo(effectParent) self.effectGeom = loader.loadModel('models/effects/pir_m_efx_msc_auraSplat') self.effectGeom.setColorScale(0, 0, 0, 0.3) self.effectGeom.setBillboardAxis(1) if not VoodooAuraDiscBase.particleDummy: VoodooAuraDiscBase.particleDummy = base.effectsRoot.attachNewNode(ModelNode('VoodooAuraDiscParticleDummy')) VoodooAuraDiscBase.particleDummy.hide(OTPRender.MainCameraBitmask) VoodooAuraDiscBase.particleDummy.showThrough(OTPRender.EnviroCameraBitmask) VoodooAuraDiscBase.particleDummy.setDepthWrite(0) VoodooAuraDiscBase.particleDummy.setLightOff() VoodooAuraDiscBase.particleDummy.setColorScaleOff() VoodooAuraDiscBase.particleDummy.setBin('shadow', -10) self.duration = 10.0 self.effectScale = 1.0 self.f = ParticleEffect.ParticleEffect('FireSplats') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('GeomParticleRenderer') self.p0.setEmitter('DiscEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(8) self.p0.setBirthRate(0.1) self.p0.setLitterSize(1) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(0.5) self.p0.factory.setLifespanSpread(0.0) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAINOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setGeomNode(self.effectGeom.node()) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setZScaleFlag(1) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(0.0) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 0.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(1.0)
def __init__(self, parent=None): PooledEffect.__init__(self) EffectController.__init__(self) if parent is not None: self.reparentTo(parent) if not WaterRipple.particleDummy: WaterRipple.particleDummy = render.attachNewNode( ModelNode('DarkAuraParticleDummy')) WaterRipple.particleDummy.setDepthWrite(0) WaterRipple.particleDummy.setFogOff() WaterRipple.particleDummy.setBin('water', 50) self.effectScale = 1.0 self.f = ParticleEffect.ParticleEffect('WaterRipple') self.f.reparentTo(self) self.effectGeom = loader.loadModel('models/effects/ripple') if not self.effectGeom: self.effectGeom = loader.loadModel('models/misc/smiley') self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('GeomParticleRenderer') self.p0.setEmitter('DiscEmitter') self.p0.emitter.setRadius(0.25) self.f.addParticles(self.p0) self.p0.setPoolSize(8) self.p0.setBirthRate(0.75) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(4.0) self.p0.factory.setLifespanSpread(1.0) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(1.0) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, -0.01)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.p0.renderer.setGeomNode(self.effectGeom.node()) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setZScaleFlag(1) self.setEffectScale(self.effectScale) self.disturb = None return
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.3) p0.renderer.setDeathRadius(0.3) 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), LinearDistanceForce.FTONEOVERR, 0.1, 1.1 * amp, 1) force0.setActive(1) f0.addForce(force0) force1 = LinearSinkForce(Point3(x, y, z), 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) f.setHpr(0, random.random() * 180, random.random() * 180) sfx = loader.loadSfx('phase_4/audio/sfx/firework_distance_03.ogg') sfx.setVolume(0.7) 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 __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleSmoke') if not SimpleSmokeCloud.particleDummy: SimpleSmokeCloud.particleDummy = render.attachNewNode( ModelNode('SimpleSmokeCloudParticleDummy')) SimpleSmokeCloud.particleDummy.setColorScaleOff() SimpleSmokeCloud.particleDummy.setDepthWrite(0) SimpleSmokeCloud.particleDummy.setLightOff() self.f = ParticleEffect.ParticleEffect('SimpleSmokeCloud') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('ZSpinParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(3) self.p0.setBirthRate(0.10000000000000001) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(1.5) self.p0.factory.setLifespanSpread(0.25) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(2000.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.factory.setInitialAngle(0.0) self.p0.factory.setInitialAngleSpread(180.0) self.p0.factory.enableAngularVelocity(0) self.p0.factory.setAngularVelocity(0.0) self.p0.factory.setAngularVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 1.0)) self.setEffectScale(1.0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/sigils') self.card = model.find('**/effectSkull') self.setDepthWrite(0) self.setLightOff() self.radius = 8.0 self.f = ParticleEffect.ParticleEffect('SoulHarvest2') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(256) self.p0.setBirthRate(0.02) self.p0.setLitterSize(10) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(1.75) self.p0.factory.setLifespanSpread(0.25) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAINOUT) self.p0.renderer.setUserAlpha(0.5) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setInitialXScale(0.01 * self.cardScale) self.p0.renderer.setFinalXScale(0.012 * self.cardScale) self.p0.renderer.setInitialYScale(0.01 * self.cardScale) self.p0.renderer.setFinalYScale(0.012 * self.cardScale) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.renderer.getColorInterpolationManager().addLinear(0.0, 0.25, Vec4(0, 0, 0, 0), Vec4(1, 1, 1, 0.75), 1) self.p0.renderer.getColorInterpolationManager().addLinear(0.25, 1.0, Vec4(1, 1, 1, 0.75), Vec4(0, 0, 0, 0), 1) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(1.0) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 0.0)) self.p0.emitter.setExplicitLaunchVector(Vec3(0.0, 0.0, 1.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0))
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/darkglow') self.card = model.find('**/effectDarkGlow2') self.setDepthWrite(0) self.setLightOff() self.f = ParticleEffect.ParticleEffect('SpectralSmoke') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(256) self.p0.setBirthRate(0.02) self.p0.setLitterSize(6) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(2.0) self.p0.factory.setLifespanSpread(0.0) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAINOUT) self.p0.renderer.setUserAlpha(0.14999999999999999) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setInitialXScale(0.0074999999999999997 * self.cardScale) self.p0.renderer.setFinalXScale(0.014999999999999999 * self.cardScale) self.p0.renderer.setInitialYScale(0.0074999999999999997 * self.cardScale) self.p0.renderer.setFinalYScale(0.014999999999999999 * self.cardScale) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingColor, ColorBlendAttrib.OOneMinusIncomingAlpha) self.p0.renderer.getColorInterpolationManager().addLinear(0.0, 1.0, Vec4(0.65000000000000002, 0.65000000000000002, 1.0, 1.0), Vec4(0.0, 0.0, 0.0, 0.0), 1) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(0.5) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setOffsetForce(Vec3(0.0, 0.0, 0.25)) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.p0.emitter.setRadius(0.5)
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.12) p0.renderer.setFinalXScale(0.48) p0.renderer.setInitialYScale(0.12) p0.renderer.setFinalYScale(0.48) 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) sfxName = random.choice(('phase_4/audio/sfx/firework_explosion_01.ogg', 'phase_4/audio/sfx/firework_explosion_02.ogg', 'phase_4/audio/sfx/firework_explosion_03.ogg')) sfx = loader.loadSfx(sfxName) sfx.setVolume(0.7) 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.4) p0.factory.setLifespanSpread(0.1) 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.6) p0.renderer.setDeathRadius(0.6) p0.renderer.setLifeScale(SparkleParticleRenderer.SPNOSCALE) p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) p0.emitter.setAmplitude(amp) p0.emitter.setAmplitudeSpread(0.0) p0.emitter.setRadius(0.3) 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.ogg', 'phase_4/audio/sfx/firework_whistle_02.ogg')) sfx = loader.loadSfx(sfxName) sfx.setVolume(0.4) 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.40000000000000002) p0.renderer.setDeathRadius(0.59999999999999998) p0.renderer.setLifeScale(SparkleParticleRenderer.SPSCALE) 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) 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()
def __init__(self, parent=None): PooledEffect.__init__(self) EffectController.__init__(self) if parent is not None: self.reparentTo(parent) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleWhiteSmoke') if not ShipSmoke.particleDummy: ShipSmoke.particleDummy = render.attachNewNode( ModelNode('ShipSmokeParticleDummy')) ShipSmoke.particleDummy.setDepthWrite(0) ShipSmoke.particleDummy.setLightOff() ShipSmoke.particleDummy.setColorScaleOff() self.f = ParticleEffect.ParticleEffect('ShipSmoke') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('LineEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(16) self.p0.setBirthRate(0.2) self.p0.setLitterSize(2) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.setFloorZ(-10.0) self.p0.factory.setLifespanBase(0.8) self.p0.factory.setLifespanSpread(0.25) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.2) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(0.3, 0.3, 0.3, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 1.0)) self.setEffectScale(1.0) return
def __init__(self, parent = None): PooledEffect.__init__(self) EffectController.__init__(self) if parent is not None: self.reparentTo(parent) if not LavaVent.particleDummy: LavaVent.particleDummy = base.effectsRoot.attachNewNode(ModelNode('LavaVentParticleDummy')) LavaVent.particleDummy.setDepthWrite(0) LavaVent.particleDummy.setLightOff() model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleWhiteSmoke') self.f = ParticleEffect.ParticleEffect('LavaVent') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(10) self.p0.setBirthRate(0.5) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(4.0) self.p0.factory.setLifespanSpread(0.5) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAINOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1, 1, 1, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.renderer.getColorInterpolationManager().addLinear(0.0, 0.40000000000000002, Vec4(0.59999999999999998, 0.20000000000000001, 0, 1.0), Vec4(0.20000000000000001, 0.20000000000000001, 0.20000000000000001, 1.0)) self.p0.renderer.getColorInterpolationManager().addConstant(0.40000000000000002, 1.0, Vec4(0.20000000000000001, 0.20000000000000001, 0.20000000000000001, 1)) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setExplicitLaunchVector(Vec3(0.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(1.0)
def loadParticleFile(name): global particleSearchPath if particleSearchPath == None: particleSearchPath = DSearchPath() if AppRunnerGlobal.appRunner: # In the web-publish runtime, it will always be here: particleSearchPath.appendDirectory( Filename.expandFrom('$TT_3_5_ROOT/phase_3.5/etc')) else: # In other environments, including the dev environment, look here: basePath = os.path.expandvars('$TOONTOWN') or './toontown' particleSearchPath.appendDirectory( Filename.fromOsSpecific(basePath + '/src/battle')) particleSearchPath.appendDirectory( Filename.fromOsSpecific(basePath + '/src/safezone')) particleSearchPath.appendDirectory(Filename('phase_3.5/etc')) particleSearchPath.appendDirectory(Filename('phase_4/etc')) particleSearchPath.appendDirectory(Filename('phase_5/etc')) particleSearchPath.appendDirectory(Filename('phase_8/etc')) particleSearchPath.appendDirectory(Filename('phase_9/etc')) particleSearchPath.appendDirectory(Filename('.')) pfile = Filename(name) found = vfs.resolveFilename(pfile, particleSearchPath) if not found: notify.warning('loadParticleFile() - no path: %s' % name) return notify.debug('Loading particle file: %s' % pfile) effect = ParticleEffect() # print("particle filename = ", pfile.getFullpath()) effect.loadConfig(pfile) # Don't render shadows on any particles. There are some particles that are # non-triangles (like points or lines). The shadow render shader does not # currently handle non-triangle geometry. OTPRender.renderShadow(False, effect) return effect
def __init__(self, parent=None): PooledEffect.__init__(self) EffectController.__init__(self) if parent is not None: self.reparentTo(parent) self.effectScale = 1.0 self.setDepthWrite(0) self.setLightOff() self.f = ParticleEffect.ParticleEffect('WaterSplash') self.f.reparentTo(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/pir_t_efx_env_waterSplash') self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('RectangleEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(24) self.p0.setBirthRate(0.014999999999999999) self.p0.setLitterSize(1) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(0.75) self.p0.factory.setLifespanSpread(0.10000000000000001) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT) self.p0.renderer.setUserAlpha(0.5) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(1) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod( BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setAmplitude(1.0) self.p0.emitter.setAmplitudeSpread(0.0) self.p0.emitter.setExplicitLaunchVector(Vec3(1.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(1.0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleSpark') self.setDepthWrite(0) self.setLightOff() self.setFogOff() self.setColorScaleOff() self.effectColor = Vec4(1, 1, 1, 1) self.f = ParticleEffect.ParticleEffect('HealSparks') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('RingEmitter') self.f.addParticles(self.p0) self.p0.setPoolSize(16) self.p0.setBirthRate(0.1) self.p0.setLitterSize(2) self.p0.setLitterSpread(0) self.p0.setSystemLifespan(0.0) self.p0.setLocalVelocityFlag(1) self.p0.setSystemGrowsOlderFlag(0) self.p0.factory.setLifespanBase(1.25) self.p0.factory.setLifespanSpread(0.25) self.p0.factory.setMassBase(1.0) self.p0.factory.setMassSpread(0.0) self.p0.factory.setTerminalVelocityBase(400.0) self.p0.factory.setTerminalVelocitySpread(0.0) self.p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAINOUT) self.p0.renderer.setUserAlpha(1.0) self.p0.renderer.setFromNode(self.card) self.p0.renderer.setColor(Vec4(1, 1, 1, 1)) self.p0.renderer.setXScaleFlag(1) self.p0.renderer.setYScaleFlag(1) self.p0.renderer.setAnimAngleFlag(0) self.p0.renderer.setNonanimatedTheta(0.0) self.p0.renderer.setAlphaBlendMethod( BaseParticleRenderer.PPBLENDLINEAR) self.p0.renderer.setAlphaDisable(0) self.p0.renderer.setColorBlendMode(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne) self.p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) self.p0.emitter.setExplicitLaunchVector(Vec3(0.0, 0.0, 0.0)) self.p0.emitter.setRadiateOrigin(Point3(0.0, 0.0, 0.0)) self.setEffectScale(1.0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleWhiteSteam') self.spriteScale = 5.0 self.duration = 0 if not IceShotEffect.particleDummy: IceShotEffect.particleDummy = render.attachNewNode(ModelNode('IceShotEffectParticleDummy')) IceShotEffect.particleDummy.setDepthWrite(0) IceShotEffect.particleDummy.setColorScaleOff() self.f = ParticleEffect.ParticleEffect('IceShotEffect') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.f.addParticles(self.p0) self.setParticleParamters()
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleSmoke') self.spriteScale = 1.0 if not RepeaterCannonUpgradeEffect.particleDummy: RepeaterCannonUpgradeEffect.particleDummy = render.attachNewNode( ModelNode('RepeaterCannonUpgradeEffectParticleDummy')) RepeaterCannonUpgradeEffect.particleDummy.setDepthWrite(0) RepeaterCannonUpgradeEffect.particleDummy.setColorScaleOff() self.f = ParticleEffect.ParticleEffect('RepeaterCannonUpgradeEffect') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.f.addParticles(self.p0) self.setParticleParamters()
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/effectYellowGlowRing') self.speed = 20.0 if not CurseHit.particleDummy: CurseHit.particleDummy = render.attachNewNode( ModelNode('CurseHitParticleDummy')) CurseHit.particleDummy.setDepthWrite(0) self.f = ParticleEffect.ParticleEffect('CurseHit') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('PointParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereSurfaceEmitter') self.f.addParticles(self.p0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/effectSoftBlueGlow') self.setDepthWrite(0) self.setLightOff() self.setFogOff() self.setColorScaleOff() self.node().setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne)) self.f = ParticleEffect.ParticleEffect('NovaStar') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('ZSpinParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereSurfaceEmitter') self.f.addParticles(self.p0)
def __init__(self): PooledEffect.__init__(self) EffectController.__init__(self) model = loader.loadModel('models/effects/particleMaps') self.card = model.find('**/particleGunSmoke') self.setDepthWrite(0) self.f = ParticleEffect.ParticleEffect('MusketSmoke') self.f.reparentTo(self) self.p0 = Particles.Particles('particles-1') self.p0.setFactory('ZSpinParticleFactory') self.p0.setRenderer('SpriteParticleRenderer') self.p0.setEmitter('SphereVolumeEmitter') self.f.addParticles(self.p0) f0 = ForceGroup.ForceGroup('frict') force0 = LinearFrictionForce(1.0, 25.0, 1) force0.setActive(1) f0.addForce(force0) self.f.addForceGroup(f0)
def __init__(self, name = None, particleFile = "LikeFountainWater.py", defaultPath = True, parent = render, hpr = None, position = None, colorType = None, color = gray, endColor = None, size = None, birthRate = None, poolSize = None, litterSize = None, lineScaleFactor = None, lifeSpanBase = None, terminalVelocityBase = None, texture = None, amplitude = None, amplitudeSpread = None, emissionType = "ETRADIATE", radius = None, radiusSpread = None , duration = 0): """Initalizes the PEffect. PEffect __init__(self, name = 'PEffect', particleFile = "LikeFountainWater.py", defaultPath = True, parent = render, hpr = None, position = None, color = gray, startColor = None , endColor = None, headColor = None, tailColor = None, birthRate = None, poolSize = None, litterSize = None, lineScaleFactor = None, lifeSpanBase = None, terminalVelocityBase = None, amplitude = None, amplitudeSpread = None, particlePic = None ): """ if texture is not None: g.texture = loader.loadTexture(findTexture(texture)) if name is None: name = 'PEffect-%d' % PEffect.pid PEffect.pid += 1 Handle.__init__(self, name = name) self.d.colorType = colorType #pathname = "/lib/panda/lib/lib-original/particles/" base.enableParticles() p = ParticleEffect() self.__dict__[name] = p self.particleName = name self.d.model = p # ??? if defaultPath: # print particleFile p.loadConfig(Filename(g.pandaPath+"/particles/"+ particleFile)) else: p.loadConfig(Filename(particleFile)) pd = p.particlesDict["particles-1"] if emissionType is not None: if emissionType is "ETRADIATE": pd.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE) #emitter type ETEXPICIT ETCUSTOM, ETRADIATE elif emissionType is "ETCUSTOM": pd.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM) if radius is not None: self.__dict__['radius'] = newSignalRef(self, 'radius', numType, radius) checkKeyType('PEffect', name, stringType, 'name') self.__dict__['position'] = newSignalRef(self, 'position', P3Type) # self.__dict__['color'] = newSignalRefd(self, 'color', ColorType,color) self.__dict__['hpr'] = newSignalRefd(self, 'hpr', HPRType, HPR(0,0,0)) self.__dict__['size'] = newSignalRefd(self, 'size', numType, 1) if size is not None: self.size.setBehavior(size) self.__dict__['color'] = newSignalRefd(self,'color',ColorType,color)# color at which the effect will start if endColor is None: endColor = color self.__dict__['endColor'] = newSignalRefd(self,'endColor',ColorType,endColor)# color at which the effect will end at self.color.setBehavior(color) if lineScaleFactor is not None: self.__dict__['LineScaleFactor'] = newSignalRefd(self,'LineScaleFactor',numType,lineScaleFactor) #how long a particle is if poolSize is not None: self.__dict__['PoolSize'] = newSignalRefd(self,'PoolSize',numType,poolSize) #Number of particles avaiable for the entire effect if birthRate is not None: self.__dict__['BirthRate'] = newSignalRefd(self,'BirthRate',numType,birthRate) #The rate in which the particle effect occurs if litterSize is not None: self.__dict__['LitterSize'] = newSignalRefd(self,'LitterSize',numType,litterSize) #Number of particles per effect occcurance if lifeSpanBase is not None: self.__dict__['LifeSpanBase'] = newSignalRefd(self,'LIfeSpanBase',numType,lifeSpanBase) #How long the particle effect stays on screen if terminalVelocityBase is not None: self.__dict__['TerminalVelocityBase'] = newSignalRefd(self,'TerminalVelocityBase',numType,terminalVelocityBase) #how fast the particles move if amplitude is not None: self.__dict__['Amplitude'] = newSignalRefd(self,'Amplitude', numType, amplitude)#amplitude is the spreading out of particles if amplitudeSpread is not None: self.__dict__['AmplitudeSpread'] = newSignalRefd(self,'AmplitudeSpread',numType,amplitudeSpread)#amplitude multiplier spreadings of particles. if position is not None: self.position.setBehavior(position) if hpr is not None: self.hpr.setBehavior(hpr) if color is not None: self.color.setBehavior(color) if endColor is not None: self.endColor.setBehavior(endColor) if parent is not render: self.__dict__['parent'] = parent.d.model p.reparentTo(render) p.start() #Had to use this hack because the refresh function kept restarting the particle effects. self.__dict__["started"] = True if duration != 0: self.react1(localTimeIs(duration), lambda m, v: m.exit())