コード例 #1
0
ファイル: particles.py プロジェクト: PlumpMath/spanda3D
 def __init__(self, base):
     self.base = base
     self.p = Particles()
     self.p.setFactory("PointParticleFactory")
     self.p.setRenderer("LineParticleRenderer")
     self.p.setEmitter("SphereSurfaceEmitter")
     self.p.setPoolSize(256)
     self.p.setBirthRate(0.01)
     self.p.setLitterSize(256)
     self.p.setSystemLifespan(2)
     self.p.factory.setLifespanBase(5.0000)
     self.p.renderer.setTailColor(Vec4(1.0, 1.0, 0.0, 1.0))
     self.p.renderer.setHeadColor(Vec4(1.0, 0.0, 0.0, 1.0))
     self.p.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
     self.p.renderer.setUserAlpha(1.00)
     self.p.renderer.setLineScaleFactor(32.00)
     self.p.emitter.setRadius(2.0000)
     self.p.setRenderParent(base.render)
     self.p.enable()
     self.pn = base.render.attachNewNode("particleExpNode")
     # self.pn.setDepthWrite(False)
     # self.pn.setBin("fixed", 0)
     self.pe = ParticleEffect("exp-effect", self.p)
     self.pe.reparentTo(self.pn)
     self.pe.enable()
コード例 #2
0
    def setParticleConfig(self, filepath):
        if filepath is not None:
            # check if model file is in pandaModelPath
            filepath = str(Filename.fromOsSpecific(filepath))

            # add the model path to the panda-path
            pandaPath = None
            from pandac.PandaModules import getModelPath
            for searchPath in str(getModelPath()).split():
                if searchPath == filepath:
                    pandaPath = searchPath
            if pandaPath is None:
                pandaPath = '/'.join(filepath.split('/')[:-1])
                from pandac.PandaModules import getModelPath
                getModelPath().appendPath(pandaPath)

        self.particleFilename = filepath
        try:
            #Start of the code from steam.ptf
            self.particleSystem.loadConfig(Filename(filepath))
            self.setFilepath(filepath)
        except:
            print "W: particleSystemWrapper.setParticleConfig: Error loading file"
            print "  -", filepath
            traceback.print_exc()

            print "  - Creating dummy particle Effect"
            # create new one if loading failed (particlepanel requires at least one particle)
            particles = Particles()
            particles.setBirthRate(0.02)
            particles.setLitterSize(10)
            particles.setLitterSpread(0)
            particles.setFactory("PointParticleFactory")
            particles.setRenderer("PointParticleRenderer")
            particles.setEmitter("SphereVolumeEmitter")
            particles.enable()
            self.particleSystem.addParticles(particles)
            self.clearFilepath()
        #Sets particles to birth relative to the teapot, but to render at toplevel
        self.particleSystem.start(self.getNodepath())

        # a bugfix, somewhere must be some color assigned to most nodes, i dont know why
        # this looks very bad on particle systems
        self.getNodepath().setColorOff(0)
コード例 #3
0
ファイル: enemy.py プロジェクト: michaeltchapman/alem
 def load_particle_config(self):
     self.particles = ParticleEffect()
     self.particles.reset()
     self.particles.setPos(0.000, 0.000, 0.000)
     self.particles.setHpr(0.000, 0.000, 0.000)
     self.particles.setScale(1.000, 1.000, 1.000)
     p0 = Particles('particles-1')
     # Particles parameters
     p0.setFactory("PointParticleFactory")
     p0.setRenderer("SpriteParticleRenderer")
     p0.setEmitter("SphereVolumeEmitter")
     p0.setPoolSize(20)
     p0.setBirthRate(0.0100)
     p0.setLitterSize(20)
     p0.setLitterSpread(0)
     p0.setSystemLifespan(1.0100)
     p0.setLocalVelocityFlag(1)
     p0.setSystemGrowsOlderFlag(1)
     # Factory parameters
     p0.factory.setLifespanBase(1.0000)
     p0.factory.setLifespanSpread(0.0000)
     p0.factory.setMassBase(1.0000)
     p0.factory.setMassSpread(0.0100)
     p0.factory.setTerminalVelocityBase(1200.0000)
     p0.factory.setTerminalVelocitySpread(0.0000)
     # Point factory parameters
     # Renderer parameters
     p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
     p0.renderer.setUserAlpha(0.05)
     # Sprite parameters
     p0.renderer.setTexture(self.app.loader.loadTexture('effects/dust.png'))
     p0.renderer.setColor(Vec4(1.00, 0.10, 0.10, 0.50))
     p0.renderer.setXScaleFlag(2)
     p0.renderer.setYScaleFlag(2)
     p0.renderer.setAnimAngleFlag(0)
     p0.renderer.setInitialXScale(0.100 * self.level)
     p0.renderer.setFinalXScale(0.200 * self.level)
     p0.renderer.setInitialYScale(0.100 * self.level)
     p0.renderer.setFinalYScale(0.200 * self.level)
     p0.renderer.setNonanimatedTheta(0.0000)
     p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR)
     p0.renderer.setAlphaDisable(0)
     # Emitter parameters
     p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
     p0.emitter.setAmplitude(1.0000)
     p0.emitter.setAmplitudeSpread(0.0000)
     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))
     # Sphere Volume parameters
     p0.emitter.setRadius(0.1000)
     self.particles.addParticles(p0)
     f0 = ForceGroup('gravity')
     # Force parameters
     self.particles.addForceGroup(f0)
コード例 #4
0
def test_particle_birth_rate():
    # Tests a system with a standard birth rate of 0.5, that it is
    # indeed birthing at that rate.  It serves as a control for the
    # next test as well.
    system = Particles("testSystem", 2)

    system.set_render_parent(NodePath(PandaNode("test")))
    system.set_spawn_render_node_path(NodePath(PandaNode("test")))

    assert system.get_birth_rate() == 0.5
    assert system.get_tics_since_birth() == 0
    assert system.get_living_particles() == 0

    system.update(0.6)
    assert system.get_living_particles() == 1

    system.update(0.5)
    assert system.get_living_particles() == 2

    # Should still be 2, since the pool size was 2.
    system.update(0.5)
    assert system.get_living_particles() == 2
コード例 #5
0
def test_particle_soft_start():
    # Create a particle effect and a particle system.
    # The effect serves to test the Python-level "soft_start"  method,
    # while the system serves to test the C++-level "soft_start" method
    # (via the associated Python "soft_start" method)
    effect = ParticleEffect()
    system = Particles("testSystem", 10)

    # Setup some dummy nodes, since it seems to want them
    system.set_render_parent(NodePath(PandaNode("test")))
    system.set_spawn_render_node_path(NodePath(PandaNode("test")))

    # Add the system to the effect
    effect.add_particles(system)

    # Re-assign the system, just to make sure that we have the
    # right object.
    system = effect.get_particles_list()[0]

    # First, standard "soft_start"--i.e. without either changing
    # the birth-rate or applying a delay. This should work as it
    # used to.
    effect.soft_start()

    assert system.get_birth_rate() == 0.5

    # Now, check that the pre-existing single-parameter soft-start,
    # which alters the birth-rate, still does so.
    system.soft_start(1)

    assert system.get_birth_rate() == 1

    # Next, birth-delaying.

    # Run a standard soft-start, then check that the birth-timer
    # is zero, as used to be the case on running this command.
    effect.soft_start()

    assert system.get_tics_since_birth() == 0

    # Run an delayed soft-start via the system, then check that the
    # birth-timer has the assigned value, and that the birth-rate is
    # unchanged.

    # (We pass in a birth-rate ("br") of -1 because the related code
    # checks for a birth-rate greater than 0, I believe. This allows
    # us to change the delay without affecting the birth-rate.)
    system.soft_start(br=-1, first_birth_delay=-2)

    assert system.get_birth_rate() == 1
    assert system.get_tics_since_birth() == 2

    # Now, run a delayed soft-start via the effect, and
    # again check that the birth-timer has changed as intended,
    # and the birth-rate hasn't changed at all.
    effect.soft_start(firstBirthDelay=0.25)

    assert system.get_birth_rate() == 1
    assert system.get_tics_since_birth() == -0.25

    # Update the system, advancing it far enough that it should
    # have birthed a particle if not for the delay, but not
    # so far that it should have birthed a particle >with<
    # the delay. Check thus that no particles have been birthed.
    system.update(1)

    assert system.get_living_particles() == 0

    # Update the system again, this time far enough that with the
    # delay it should have birthed just one particle, and
    # then check that this is the case.
    system.update(1)

    assert system.get_living_particles() == 1
コード例 #6
0
def test_particle_burst_emission():
    effect = ParticleEffect()
    system = Particles("testSystem", 10)
    effect.add_particles(system)

    # Setup some dummy nodes, since it seems to want them
    # We might normally call "start", but that calls "enable", which
    # seems to assume that "base" exists and has physics and particle managers...
    system.setRenderParent(NodePath(PandaNode("test")))
    system.setSpawnRenderNodePath(NodePath(PandaNode("test")))
    # However, we don't want normal emission, so we now soft-stop it immediately,
    # before the system has a chance to update and emit.
    effect.softStop()

    # Now, a sanity-check: assert that we have no particles,
    # Then update the system, and assert again that we
    # have no particles. If so, then we're (hopefully)
    # not emitting normally!

    assert system.getLivingParticles() == 0
    system.update(1)
    assert system.getLivingParticles() == 0

    # Now, the real test: emit a particle-burst!
    effect.birthLitter()

    # And assert that a particle has, in fact, been emitted.
    assert system.getLivingParticles() == 1

    # Check the snake-case version, too.
    effect.birth_litter()

    assert system.getLivingParticles() == 2
コード例 #7
0
ファイル: Application.py プロジェクト: UnrealAI/UnrealAI
    def __init__(self):
        ShowBase.__init__(self)

        self.enableParticles()

        particles = Particles()
        particles.setPoolSize(1000)
        particles.setBirthRate(0.1)
        particles.setLitterSize(10)
        particles.setLitterSpread(3)
        particles.setFactory("PointParticleFactory")
        particles.setRenderer("GeomParticleRenderer")
        particles.setEmitter("SphereVolumeEmitter")

        smiley = loader.loadModel("smiley")
        smiley.setScale(0.1)
        particles.getRenderer().setGeomNode(smiley.node())
        particles.enable()

        self.effect = ParticleEffect("peffect", particles)
        self.effect.reparentTo(render)
        self.effect.enable()

        self.cam.setPos(0, -10, 0)
コード例 #8
0
ファイル: LVL03.py プロジェクト: CarlosPlusPlus/rpi-undergrad
    def explode(self,cEntry):

        self.explosion = ParticleEffect()
        
        self.explosion.reset()
        self.explosion.setPos(cEntry.getIntoNodePath().getParent().getPos())
        self.explosion.setHpr(0.000, 0.000, 0.000)
        self.explosion.setScale(10.000, 10.000, 10.000)
        p0 = Particles('particles-1')
        # Particles parameters
        p0.setFactory("PointParticleFactory")
        p0.setRenderer("LineParticleRenderer")
        p0.setEmitter("SphereVolumeEmitter")
        p0.setPoolSize(10000)
        p0.setBirthRate(0.0500)
        p0.setLitterSize(10000)
        p0.setLitterSpread(0)
        p0.setSystemLifespan(2.0000)
        p0.setLocalVelocityFlag(1)
        p0.setSystemGrowsOlderFlag(1)
        # Factory parameters
        p0.factory.setLifespanBase(2.0000)
        p0.factory.setLifespanSpread(0.0000)
        p0.factory.setMassBase(.5000)
        p0.factory.setMassSpread(0.0500)
        p0.factory.setTerminalVelocityBase(400.0000)
        p0.factory.setTerminalVelocitySpread(0.0000)
        # Point factory parameters
        # Renderer parameters
        p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
        p0.renderer.setUserAlpha(1.00)
        # Line parameters
        p0.renderer.setHeadColor(Vec4(1.00, 0.00, 0.00, 1.00))
        p0.renderer.setTailColor(Vec4(1.00, 1.00, 0.00, 1.00))
        p0.renderer.setLineScaleFactor(3.00)
        # Emitter parameters
        p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
        p0.emitter.setAmplitude(10.0000)
        p0.emitter.setAmplitudeSpread(0.0000)
        p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, -0.4930))
        p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000))
        p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000))
        # Sphere Volume parameters
        p0.emitter.setRadius(0.5000)
        self.explosion.addParticles(p0)
        f0 = ForceGroup('gravity')
        # Force parameters
        self.explosion.addForceGroup(f0)
        
	cHandler = CollisionHandlerEvent()
	cHandler.addInPattern('%fn-into-%in')
	cSphereB = CollisionSphere(cEntry.getIntoNodePath().getParent().getPos(),1)
	cNodeB = CollisionNode("explosion")
	cNodeB.addSolid(cSphereB)
	cNodePathB = self.explosion.attachNewNode(cNodeB)
	self.cTrav.addCollider(cNodePathB,cHandler)
	cNodePathB.show()
        
	self.accept("player1-into-explosion",self.player2Wins)
	self.accept("player2-into-explosion",self.player1Wins)
        #f.reparentTo(self.playerModel)
        #self.explosion.setPos(self.playerModel.getPos())

        t = Sequence(Func(self.explosion.start, render, render),Wait(2),Func(self.cleanExplo))
        t.start()
	cEntry.getFromNodePath().getParent().removeNode()
コード例 #9
0
ファイル: LVL03.py プロジェクト: CarlosPlusPlus/rpi-undergrad
 def fire(self):
     
     self.fire = ParticleEffect()
     
     self.fire.reset()
     self.fire.setPos(0.000, 0.000, 0.000)
     self.fire.setHpr(0.000, 0.000, 0.000)
     self.fire.setScale(10.000, 10.000, 10.000)
     p0 = Particles('particles-1')
     # Particles parameters
     p0.setFactory("PointParticleFactory")
     p0.setRenderer("SpriteParticleRenderer")
     p0.setEmitter("DiscEmitter")
     p0.setPoolSize(1024)
     p0.setBirthRate(0.0200)
     p0.setLitterSize(10)
     p0.setLitterSpread(0)
     p0.setSystemLifespan(1200.0000)
     p0.setLocalVelocityFlag(1)
     p0.setSystemGrowsOlderFlag(0)
     # Factory parameters
     p0.factory.setLifespanBase(2.0000)
     p0.factory.setLifespanSpread(0.0000)
     p0.factory.setMassBase(1.0000)
     p0.factory.setMassSpread(0.0000)
     p0.factory.setTerminalVelocityBase(400.0000)
     p0.factory.setTerminalVelocitySpread(0.0000)
     # Point factory parameters
     # Renderer parameters
     p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
     p0.renderer.setUserAlpha(0.22)
     # Sprite parameters
     p0.renderer.addTextureFromFile('models/gamedev/sparkle.png')
     p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00))
     p0.renderer.setXScaleFlag(1)
     p0.renderer.setYScaleFlag(1)
     p0.renderer.setAnimAngleFlag(0)
     p0.renderer.setInitialXScale(0.5000)
     p0.renderer.setFinalXScale(2.0000)
     p0.renderer.setInitialYScale(1.0000)
     p0.renderer.setFinalYScale(2.0000)
     p0.renderer.setNonanimatedTheta(0.0000)
     p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPNOBLEND)
     p0.renderer.setAlphaDisable(0)
     # Emitter parameters
     p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
     p0.emitter.setAmplitude(1.0000)
     p0.emitter.setAmplitudeSpread(0.0000)
     p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 3.0000))
     p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000))
     p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000))
     # Disc parameters
     p0.emitter.setRadius(0.5000)
     self.fire.addParticles(p0)
     
     self.fire.setPos(self.playerModel2.getPos())
     
     t = Sequence(Func(self.fire.start, render, render),Wait(20),Func(self.cleanFire))
     t.start()
コード例 #10
0
 def setParticleConfig(self, filepath):
   if filepath is not None:
     # check if model file is in pandaModelPath
     filepath = str(Filename.fromOsSpecific(filepath))
     
     # add the model path to the panda-path
     pandaPath = None
     from pandac.PandaModules import getModelPath
     for searchPath in str(getModelPath()).split():
       if searchPath == filepath:
         pandaPath = searchPath
     if pandaPath is None:
       pandaPath = '/'.join(filepath.split('/')[:-1])
       from pandac.PandaModules import getModelPath
       getModelPath().appendPath( pandaPath )
   
   self.particleFilename = filepath
   try:
     #Start of the code from steam.ptf
     self.particleSystem.loadConfig(Filename(filepath))
     self.setFilepath(filepath)
   except:
     print "W: particleSystemWrapper.setParticleConfig: Error loading file"
     print "  -", filepath
     traceback.print_exc()
     
     print "  - Creating dummy particle Effect"
     # create new one if loading failed (particlepanel requires at least one particle)
     particles = Particles()
     particles.setBirthRate(0.02)
     particles.setLitterSize(10)
     particles.setLitterSpread(0)
     particles.setFactory("PointParticleFactory")
     particles.setRenderer("PointParticleRenderer")
     particles.setEmitter("SphereVolumeEmitter")
     particles.enable()
     self.particleSystem.addParticles(particles)
     self.clearFilepath()
   #Sets particles to birth relative to the teapot, but to render at toplevel
   self.particleSystem.start(self.getNodepath())
   
   # a bugfix, somewhere must be some color assigned to most nodes, i dont know why
   # this looks very bad on particle systems
   self.getNodepath().setColorOff(0)
コード例 #11
0
ファイル: main.py プロジェクト: zking773/ArchiveHighSchool
    def buildMainMenu(self):

        self.toggleCursor(False)

        start_game_button = DirectButton(text="Start", scale=.1, command=None)
        select_level_button = DirectButton(text="Select Level",
                                           scale=.1,
                                           command=None)
        game_options_button = DirectButton(text="Settings",
                                           scale=.1,
                                           command=None)
        exit_button = DirectButton(text="Exit", scale=.1, command=exit)

        BUTTON_SPACING = .2
        BUTTON_HEIGHT = start_game_button.getSy()

        button_positions = self.evenButtonPositions(BUTTON_SPACING,
                                                    BUTTON_HEIGHT, 4)

        start_game_button.setPos(Vec3(0, 0, button_positions[0]))
        select_level_button.setPos(Vec3(0, 0, button_positions[1]))
        game_options_button.setPos(Vec3(0, 0, button_positions[2]))
        exit_button.setPos(Vec3(0, 0, button_positions[3]))

        self.guiElements.append(start_game_button)
        self.guiElements.append(select_level_button)
        self.guiElements.append(game_options_button)
        self.guiElements.append(exit_button)

        particles = Particles()
        particles.setPoolSize(1000)
        particles.setBirthRate(.1)
        particles.setLitterSize(10)
        particles.setLitterSpread(3)
        particles.setFactory("PointParticleFactory")
        particles.setRenderer("PointParticleRenderer")
        particles.setEmitter("SphereVolumeEmitter")
        particles.enable()

        self.effect = ParticleEffect("peffect", particles)
        self.effect.reparentTo(render)
        #self.effect.setPos(self.avatar.objectNP.getX(), self.avatar.objectNP.getY(), self.avatar.objectNP.getZ() + 5)
        self.effect.setPos(-1, 0, 0)
        self.effect.enable()
コード例 #12
0
ファイル: particle.py プロジェクト: monicagraciela/MoonBunny
 def __init__(self):
     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)
     p0 = Particles('particles-1')
     # Particles parameters
     p0.setFactory("ZSpinParticleFactory")
     p0.setRenderer("SpriteParticleRenderer")
     p0.setEmitter("LineEmitter")
     p0.setPoolSize(1024)
     p0.setBirthRate(0.3000)
     p0.setLitterSize(1)
     p0.setLitterSpread(0)
     p0.setSystemLifespan(0.0000)
     p0.setLocalVelocityFlag(0)
     p0.setSystemGrowsOlderFlag(0)
     # Factory parameters
     p0.factory.setLifespanBase(15.0000)
     p0.factory.setLifespanSpread(0.0000)
     p0.factory.setMassBase(1.0000)
     p0.factory.setMassSpread(0.0000)
     p0.factory.setTerminalVelocityBase(400.0000)
     p0.factory.setTerminalVelocitySpread(0.0000)
     # Z Spin factory parameters
     p0.factory.setInitialAngle(0.0000)
     p0.factory.setInitialAngleSpread(0.0000)
     p0.factory.enableAngularVelocity(1)
     p0.factory.setAngularVelocity(60.0000)
     p0.factory.setAngularVelocitySpread(10.0000)
     # Renderer parameters
     p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAUSER)
     p0.renderer.setUserAlpha(0.20)
     # Sprite parameters
     p0.renderer.addTextureFromFile('./image/star_particle.png')
     p0.renderer.setColor(Vec4(1.00, 1.00, 1.00, 1.00))
     p0.renderer.setXScaleFlag(0)
     p0.renderer.setYScaleFlag(0)
     p0.renderer.setAnimAngleFlag(1)
     p0.renderer.setInitialXScale(0.0500)
     p0.renderer.setInitialYScale(0.0500)
     p0.renderer.setNonanimatedTheta(0.0000)
     p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR)
     p0.renderer.setAlphaDisable(0)
     # Emitter parameters
     p0.emitter.setEmissionType(BaseParticleEmitter.ETEXPLICIT)
     p0.emitter.setAmplitude(0.1500)
     p0.emitter.setAmplitudeSpread(0.0500)
     p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 0.0000))
     p0.emitter.setExplicitLaunchVector(Vec3(0.0000, 0.0000, -1.0000))
     p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000))
     # Line parameters
     p0.emitter.setEndpoint1(Point3(-1.0000, 0.0000, 0.0000))
     p0.emitter.setEndpoint2(Point3(1.0000, 0.0000, 0.0000))
     self.addParticles(p0)
コード例 #13
0
ファイル: particle.py プロジェクト: monicagraciela/MoonBunny
    def __init__(self):
        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)
        p0 = Particles('particles-1')
        # Particles parameters
        p0.setFactory("PointParticleFactory")
        p0.setRenderer("SpriteParticleRenderer")
        p0.setEmitter("SphereVolumeEmitter")
        p0.setPoolSize(1024)
        p0.setBirthRate(0.0200)
        p0.setLitterSize(1)
        p0.setLitterSpread(0)
        p0.setSystemLifespan(0.0000)
        p0.setLocalVelocityFlag(1)
        p0.setSystemGrowsOlderFlag(0)
        # Factory parameters
        p0.factory.setLifespanBase(3.0000)
        p0.factory.setLifespanSpread(0.0000)
        p0.factory.setMassBase(1.0000)
        p0.factory.setMassSpread(0.0000)
        p0.factory.setTerminalVelocityBase(400.0000)
        p0.factory.setTerminalVelocitySpread(0.0000)
        # Point factory parameters
        # Renderer parameters
        p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAUSER)
        p0.renderer.setUserAlpha(1.00)
        # Sprite parameters
        p0.renderer.addTextureFromFile('./image/particle.png')
        p0.renderer.setColor(Vec4(0.40, 0.40, 1.00, 0.50))
        p0.renderer.setXScaleFlag(0)
        p0.renderer.setYScaleFlag(0)
        p0.renderer.setAnimAngleFlag(0)
        p0.renderer.setInitialXScale(0.03000)
        p0.renderer.setFinalXScale(1.0000)
        p0.renderer.setInitialYScale(0.03000)
        p0.renderer.setFinalYScale(1.0000)
        p0.renderer.setNonanimatedTheta(0.0000)
        p0.renderer.setAlphaBlendMethod(BaseParticleRenderer.PPBLENDLINEAR)
        p0.renderer.setAlphaDisable(0)
        # Emitter parameters
        p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
        p0.emitter.setAmplitude(0.5000)
        p0.emitter.setAmplitudeSpread(0.0000)
        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))
        # Sphere Volume parameters
        p0.emitter.setRadius(0.0100)
        self.addParticles(p0)
        f0 = ForceGroup('force-1')
        # Force parameters
        force0 = LinearVectorForce(Vec3(0.0000, 0.0000, -1.0000), 3.0000, 0)
        force0.setVectorMasks(1, 1, 1)
        force0.setActive(1)
        f0.addForce(force0)
        self.addForceGroup(f0)