Esempio n. 1
0
    def __init__(self, position):
        x, y = position

        spark_emitter = StaticEmitter(
            template=Particle(position=(uniform(x - 5,
                                                x + 5), uniform(y - 5,
                                                                y + 5), 0),
                              size=(10, ) * 3,
                              color=self.color),
            deviation=Particle(velocity=(gauss(0, 5), gauss(0, 5), 0),
                               age=1.5),
            velocity=domain.Sphere((0, gauss(40, 20), 0), 60, 60))

        spark_emitter.emit(int(gauss(60, 40)) + 50, self.sparks)

        spread = abs(gauss(0.4, 1.0))
        self.trail_emitter = PerParticleEmitter(
            self.sparks,
            rate=uniform(5, 30),
            template=Particle(size=(6, ) * 3, color=self.color),
            deviation=Particle(velocity=(spread, spread, spread),
                               age=self.lifetime * 0.75))

        self.trails.bind_controller(self.trail_emitter)
        self.splosions.add(self)
        pyglet.clock.schedule_once(self.die, self.lifetime)
Esempio n. 2
0
    def test_PerParticleEmitter_template(self):
        from lepton import Particle, ParticleGroup
        from lepton.emitter import PerParticleEmitter

        source_group = ParticleGroup()
        source_group.new(Particle(position=(1, 1, 1)))
        source_group.new(Particle(position=(2, 2, 2)))
        source_group.update(0)

        emitter = PerParticleEmitter(source_group,
                                     rate=1,
                                     template=Particle(position=(1.0, 1.0,
                                                                 1.0),
                                                       velocity=(0, 5, 2),
                                                       color=(0.5, 0.5, 0.5,
                                                              1.0)))
        group = ParticleGroup()
        count = emitter(1, group)
        group.update(0)
        self.assertEqual(count, len(source_group))
        self.assertEqual(len(group), len(source_group))
        particle = list(group)[0]
        self.assertVector(particle.position, (1, 1, 1))
        self.assertVector(particle.velocity, (0, 5, 2))
        self.assertColor(particle.color, (0.5, 0.5, 0.5, 1.0))
        particle = list(group)[1]
        self.assertVector(particle.position, (2, 2, 2))
        self.assertVector(particle.velocity, (0, 5, 2))
        self.assertColor(particle.color, (0.5, 0.5, 0.5, 1.0))
Esempio n. 3
0
 def _make_group(self):
     from lepton import Particle, ParticleGroup
     g = ParticleGroup()
     g.new(Particle((0, 0, 0), (0, 0, 0)))
     g.new(Particle((0, 0, 0), (1, 1, 1), size=(2, 2, 2)))
     g.new(Particle((1, 1, 1), (-2, -2, -2), size=(3, 2, 0)))
     g.update(0)
     return g
Esempio n. 4
0
 def _make_group(self):
     from lepton import Particle, ParticleGroup
     g = ParticleGroup()
     g.new(Particle(position=(0, 1.0, 0), velocity=(0, 0, 0))),
     g.new(Particle(position=(0, 0, 1.0), velocity=(0, 0, 0))),
     g.update(0)
     p = list(g)
     p[0].position = (10.0, 0, 0)
     p[1].position = (0, 0.0, 10.0)
     return g
Esempio n. 5
0
    def emit(cls, position, velocity):
        x, y = position + velocity * 0.3
        emitter = StaticEmitter(template=Particle(position=(x, y, 0),
                                                  size=(5, ) * 3,
                                                  color=cls.color),
                                deviation=Particle(age=0.2),
                                velocity=domain.Disc((*-2 * velocity, 0),
                                                     (0, 0, 1), 100))

        emitter.emit(10, cls.sparks)
Esempio n. 6
0
    def emit(cls, position):
        emitter = StaticEmitter(template=Particle(position=(*position, 0),
                                                  size=(16, ) * 3,
                                                  rotation=(0, 0, 1),
                                                  color=cls.color),
                                deviation=Particle(age=0.2,
                                                   rotation=(0, 0, 2)),
                                velocity=domain.Disc((0, 0, 0), (0, 0, 1),
                                                     100))

        emitter.emit(20, cls.fragments)
Esempio n. 7
0
def spawn_smoke(pos, vel):
    """Spawn a cannon smoke puff."""
    e = StaticEmitter(template=Particle(
        position=tuple(pos),
        velocity=tuple(vel * 0.1),
        size=(0.2, 0.2, 0.2),
        color=(1, 1, 1, 0.2),
    ),
                      rotation=domain.Line((0, 0, -1), (0, 0, 1)),
                      deviation=Particle(velocity=(1.0, 1.0, 1.0), ),
                      rate=100,
                      time_to_live=0.1)
    smoke_particles.bind_controller(e)
Esempio n. 8
0
 def test_Lifetime_controller(self):
     from lepton import controller, Particle, ParticleGroup
     g = ParticleGroup()
     g.new(Particle(age=0))
     g.new(Particle(age=0.8))
     g.new(Particle(age=1.0))
     g.new(Particle(age=0.75))
     lifetime = controller.Lifetime(max_age=0.75)
     g.update(0)
     lifetime(0, g)
     p = list(g)
     self.assertEqual(len(g), 2)
     self.assertFloatEqiv(p[0].age, 0.0)
     self.assertFloatEqiv(p[1].age, 0.75)
Esempio n. 9
0
 def _make_group(self):
     from lepton import Particle, ParticleGroup
     g = ParticleGroup()
     g.new(Particle(position=(0, 1, 0), velocity=(0, -1, 0))),
     g.new(Particle(position=(0, 1, 0), velocity=(0, -1.5, 0))),
     g.new(Particle(position=(-1, -1, 1), velocity=(2, 2, 0))),
     g.new(Particle(position=(1, 1, 1), velocity=(0, 1, 0)))
     g.update(0)
     p = list(g)
     p[0].position = (0, 0, 0)
     p[1].position = (0, -0.5, 0)
     p[2].position = (1, 1, 1)
     p[3].position = (1, 2, 1)
     return g
Esempio n. 10
0
    def __init__(self):
        color = (uniform(0, 1), uniform(0, 1), uniform(0, 1), 1)
        while max(color[:3]) < 0.9:
            color = (uniform(0, 1), uniform(0, 1), uniform(0, 1), 1)

        spark_emitter = StaticEmitter(
            template=Particle(position=(uniform(-50, 50), uniform(-30, 30),
                                        uniform(-30, 30)),
                              color=color),
            deviation=Particle(velocity=(gauss(0, 5), gauss(0, 5), gauss(0,
                                                                         5)),
                               age=1.5),
            velocity=domain.Sphere((0, gauss(40, 20), 0), 60, 60))

        self.sparks = ParticleGroup(controllers=[
            Lifetime(self.lifetime * 0.75),
            Movement(damping=0.93),
            ColorBlender([(0, (1, 1, 1, 1)), (2, color),
                          (self.lifetime, color)]),
            Fader(fade_out_start=1.0, fade_out_end=self.lifetime * 0.5),
        ],
                                    renderer=PointRenderer(
                                        abs(gauss(10, 3)), spark_texturizer))

        spark_emitter.emit(int(gauss(60, 40)) + 50, self.sparks)

        spread = abs(gauss(0.4, 1.0))
        self.trail_emitter = PerParticleEmitter(
            self.sparks,
            rate=uniform(5, 30),
            template=Particle(color=color),
            deviation=Particle(velocity=(spread, spread, spread),
                               age=self.lifetime * 0.75))

        self.trails = ParticleGroup(controllers=[
            Lifetime(self.lifetime * 1.5),
            Movement(damping=0.83),
            ColorBlender([(0, (1, 1, 1, 1)), (1, color),
                          (self.lifetime, color)]),
            Fader(max_alpha=0.75,
                  fade_out_start=0,
                  fade_out_end=gauss(self.lifetime, self.lifetime * 0.3)),
            self.trail_emitter
        ],
                                    renderer=PointRenderer(
                                        10, trail_texturizer))

        pyglet.clock.schedule_once(self.die, self.lifetime * 2)
Esempio n. 11
0
 def __init__(self, wpos):
     self.last_pos = wpos
     self.domain = Cylinder((*wpos, -10), (*wpos, 0), 5)
     self.emitter = StaticEmitter(rate=600,
                                  position=self.domain,
                                  template=Particle(
                                      color=(1.0, 1.0, 1.0, 0.3),
                                      size=(2.0, ) * 3,
                                      rotation=(0, 0, 1),
                                      velocity=(0, 0, 0),
                                  ),
                                  deviation=Particle(
                                      rotation=(0, 0, 0.5),
                                      angle=(0, 0, 6),
                                  ))
     self.group.bind_controller(self.emitter)
Esempio n. 12
0
    def __init__(self, x, y, direction):
        self.x, self.y = (x, y)
        self.direction = direction
        if direction < 0: self.speed = -800
        else: self.speed = 800

        self.emitter = emitter.StaticEmitter(
          rate=300,
          template=Particle(
              position=(x, y, 0),
              velocity=(0, 0, 0),
              color=(1, 1, 0, 0.5),
              size=(8, 8, 0),
              # rotation?
              # up?
          ),
          velocity=Disc((0,0,0), (0,0,1), 200),
          time_to_live=self.duration,
        )
        self.fader = controller.Fader(start_alpha=1,fade_out_start=0,fade_out_end=.5,end_alpha=0)

        self.group = ParticleGroup(
            controllers=[
                self.emitter,
                controller.Gravity((0, -100, 0)),
                controller.Movement(),
                self.fader,
                controller.Lifetime(1),
            ],
            renderer=Render('zap-star.png'),
        )
        self.emitter.emit(1, self.group)
Esempio n. 13
0
def spawn_splinters(pos, vel):
    """Spawn a cannon smoke puff."""
    e = StaticEmitter(
        template=Particle(
            position=tuple(pos),
            velocity=tuple(vel * -0.1),
            size=(0.15, 0.15, 0.15),
            color=(1, 1, 1, 0.8),
        ),
        rotation=domain.Line((0, 0, -1), (0, 0, 1)),
        deviation=Particle(
            size=(0.05, 0.05, 0.05),
            velocity=(2.0, 2.0, 2.0),
        ),
    )
    e.emit(10, splinters1)
    e.emit(10, splinters2)
Esempio n. 14
0
    def explosion(self, pos, magnitude):

        sparks = ParticleGroup(
          controllers=[
              Lifetime(3),
              Movement(damping=0.93),
              Fader(fade_out_start=0.75, fade_out_end=3.0),
          ],
          renderer=BillboardRenderer(SpriteTexturizer(self.particle1_tex.id)))

        spark_emitter = StaticEmitter(
          template=Particle(
              position=(pos[0], pos[1], 0),
              color=(1, 1, 1)),
          deviation=Particle(
              position=(1, 1, 0),
              velocity=(300, 300, 0),
              age=1.5),
          size=[(3, 3, 0), (4, 4, 0), (5, 5, 0), (5, 5, 0), (6, 6, 0), (7, 7, 0)])
        spark_emitter.emit(magnitude, sparks)

        fire = ParticleGroup(
          controllers=[
              Lifetime(2),
              Movement(damping=0.95),
              Growth(60),
              Fader(fade_in_start=0, start_alpha=0, fade_in_end=0.5, max_alpha=0.6,
                    fade_out_start=1.0, fade_out_end=2.0)
          ],
          renderer=BillboardRenderer(SpriteTexturizer(self.smoke1_tex.id)))

        fire_emitter = StaticEmitter(
          template=Particle(
              position=(pos[0], pos[1], 0),
              size=(50, 50, 0)),
          deviation=Particle(
              position=(0.5, 0.5, 0),
              velocity=(70, 70, 0),
              size=(20, 20, 0),
              up=(0, 0, math.pi * 2),
              rotation=(0, 0, math.pi * 0.06),
              age=2, ),
          color=[(0.5, 0, 0), (0.5, 0.5, 0.5), (0.4, 0.1, 0.1), (0.85, 0.3, 0)],
        )
        fire_emitter.emit(400, fire)
Esempio n. 15
0
    def __init__(self, ship):
        self.ship = ship

        self.emitters = [
            StaticEmitter(template=Particle(
                position=tuple(p),
                velocity=tuple(v),
                size=(0.2, 0.2, 0.0),
                color=(1, 1, 1, 0.2),
            ),
                          deviation=Particle(
                              position=(0.02, 0.0, 0.02) if i < 2 else
                              (0.2, 0.0, 0.2),
                              size=(0.0, 0.07, 0.0),
                              velocity=(0.04, 0.0, 0.04),
                          ),
                          rate=5 if i < 2 else 20)
            for i, (p, v, rate) in enumerate(self.emitter_positions)
        ]
Esempio n. 16
0
    def emit_sparks(self, pos, count):
        sparks = ParticleGroup(
            controllers=[
                Lifetime(1),
                Movement(damping=0.93),
                Fader(fade_out_start=0.75, fade_out_end=1.0),
            ],
            renderer=BillboardRenderer(SpriteTexturizer(self.particle1_tex.id)))

        spark_emitter = StaticEmitter(
            template=Particle(
                position=(pos[0], pos[1], 0),
                color=(1, 1, 1)),
            deviation=Particle(
                position=(1, 1, 0),
                velocity=(100, 100, 0),
                age=1.5),
            size=[(6, 6, 0), (7, 7, 0), (12, 12, 0)])
        spark_emitter.emit(count, sparks)
Esempio n. 17
0
 def __init__(self, player, viewport, level):
     self.player = player
     self.viewport = viewport
     self.level = level
     self.emitter = StaticEmitter(
         rate=player.body.velocity.length,
         template=Particle(
             position=(*level.map_to_world(player.position), 0),
             color=(1.0, 1.0, 1.0, 1.0),
             size=(16.0, ) * 3,
         ),
     )
     self.group.bind_controller(self.emitter)
     pyglet.clock.schedule(self.update)
Esempio n. 18
0
 def test_new_particle(self):
     from lepton import ParticleGroup, Particle
     group = ParticleGroup()
     self.assertEqual(len(group), 0)
     self.assertEqual(group.new_count(), 0)
     p1 = Particle(age=1)
     p2 = Particle(age=2)
     group.new(p1)
     self.assertEqual(len(group), 0)
     self.assertEqual(group.new_count(), 1)
     self.failIf(list(group))
     group.new(p2)
     self.assertEqual(len(group), 0)
     self.assertEqual(group.new_count(), 2)
     self.failIf(list(group))
     group.update(0)  # incorporate new particles
     self.assertEqual(len(group), 2)
     self.assertEqual(group.new_count(), 0)
     particles = list(group)
     self.assertEqual(len(particles), 2)
     self.assertEqual(particles[0].age, 1)
     self.assertEqual(particles[1].age, 2)
     return group, particles
Esempio n. 19
0
 def particles(self):
     self.part = ParticleGroup(renderer=BillboardRenderer(texturizer2),
                               controllers=[
                                   Movement(max_velocity=self.speed,
                                            damping=0.95),
                                   Magnet(self.objective,
                                          charge=500,
                                          exponent=0),
                               ])
     self.emiter = StaticEmitter(position=self.domain,
                                 template=Particle(
                                     color=self.color,
                                     size=(self.size, self.size, 0),
                                 ))
     self.emiter.emit(1, self.part)
Esempio n. 20
0
    def test_StaticEmitter_template(self):
        from lepton import Particle, ParticleGroup
        from lepton.emitter import StaticEmitter

        emitter = StaticEmitter(rate=1,
                                template=Particle(position=(1.0, 1.0, 1.0),
                                                  velocity=(0, 5, 2),
                                                  color=(0.5, 0.5, 0.5, 1.0)))
        group = ParticleGroup()
        count = emitter(1, group)
        group.update(0)
        self.assertEqual(count, 1)
        self.assertEqual(len(group), 1)
        particle = list(group)[0]
        self.assertVector(particle.position, (1, 1, 1))
        self.assertVector(particle.velocity, (0, 5, 2))
        self.assertColor(particle.color, (0.5, 0.5, 0.5, 1.0))
Esempio n. 21
0
 def test_new_particle_kwargs(self):
     from lepton import ParticleGroup, Particle
     group = ParticleGroup()
     self.assertEqual(len(group), 0)
     self.assertEqual(group.new_count(), 0)
     p = group.new(position=(1, -1, 2), age=2)
     self.assertEqual(tuple(p.position), (1, -1, 2))
     self.assertEqual(p.age, 2)
     tmpl_p = Particle(age=3, velocity=(-1, 2, 3))
     p = group.new(tmpl_p, age=5)
     self.assertEqual(tuple(p.velocity), (-1, 2, 3))
     self.assertEqual(p.age, 5)
     self.assertEqual(len(group), 0)
     self.assertEqual(group.new_count(), 2)
     self.failIf(list(group))
     group.update(0)  # incorporate new particles
     self.assertEqual(len(group), 2)
     self.assertEqual(group.new_count(), 0)
Esempio n. 22
0
 def particle_splash(self, pos, vel):
     img = self.load_sprite('sprites/drip')
     img.anchor_x = img.width / 2
     img.anchor_y = img.height / 2
     e = StaticEmitter(position=domain.Disc((pos.x, SEA_LEVEL, 0),
                                            (0, 0, 1), 50),
                       velocity=domain.Disc((vel.x, vel.y, 0), (0, 0, 1),
                                            200),
                       size=[(64.0, 64.0, 0), (80.0, 80.0, 0),
                             (100.0, 100.0, 0)],
                       template=Particle(color=(1.0, 1.0, 1.0, 1.0), ),
                       rate=100,
                       time_to_live=0.3)
     self.splash_group = ParticleGroup(controllers=[
         controller.Movement(),
         controller.Gravity((0, -900, 0)),
         controller.Lifetime(max_age=2), e
     ],
                                       renderer=Renderer(img),
                                       system=self.particles)
Esempio n. 23
0
 def __init__(self, x, y, size):
     self.emitter = emitter.StaticEmitter(
         template = Particle(
             position=(x, y, 0),
             color=(1, 1, 1, .01),
             velocity=(0, 0, 0),
             size=(64, 64, 0),
         ),
         velocity=Disc((0,0,0), (0,0,1), 400),
     )
     self.group = ParticleGroup(
         controllers=[
             self.emitter,
             controller.Growth(50),
             controller.Movement(),
             controller.Fader(start_alpha=1,fade_out_start=0,fade_out_end=.7,end_alpha=0),
             controller.Lifetime(.7),
         ],
         renderer = Render('point64.png'),
     )
     self.emitter.emit(50, self.group)
Esempio n. 24
0
    def set_active(self, _):
        if not self.active:
            self.time_left = self.BURN_TIME
            self.active = True
            self.on_start()

            # Stuff in any numbers for now, update later
            self.vel_domain = domain.Disc((0, 0, 0), (0, 0, 1), 100)
            self.pos_domain = domain.Cone((0, 0, 0), (-1, 0, 0), 1)
            self.template = Particle(
                size=(20.0, 20.0, 0),
                color=(1.0, 0.5, 0.0, 1.0),
            )
            self.emitter = StaticEmitter(
                position=self.pos_domain,
                velocity=self.vel_domain,
                template=self.template,
                rate=30,
                time_to_live=self.BURN_TIME,
            )
            self.particlegroup.bind_controller(self.emitter)
Esempio n. 25
0
 def __init__(self, rect, scale=1):
     x, y = rect.center
     self.emitter = emitter.StaticEmitter(
         rate = 20,
         template = Particle(
             position=(x, y, 0),
             color=(1, 1, 1, .5),
             velocity=(0, 0, 0),
             size=(8, 8, 0),
         ),
         velocity=Disc((0,0,0), (0,0,1), rect.width*.75*scale),
     )
     self.group = ParticleGroup(
         controllers=[
             self.emitter,
             controller.Movement(),
             controller.Clumper(50),
             controller.Fader(start_alpha=1,fade_out_start=0,fade_out_end=1,end_alpha=0),
             controller.Lifetime(1),
         ],
         renderer = Render(self.filename),
     )
     self.emitter.emit(1, self.group)
Esempio n. 26
0
 def __init__(self, x1, y1, x2, y2):
     self.emitter = emitter.StaticEmitter(
         rate = (x2-x1) // 5,
         template = Particle(
             position=(x1, y1, 0),
             color=(1, 1, 1, .5),
             velocity=(0, 0, 0),
             size=(32, 32, 0),
         ),
         position=Line((x1, y1, 0), (x2, y1, 0)),
         velocity=AABox((-100, -50, 0), (100, -200, 1)),
     )
     self.group = ParticleGroup(
         controllers=[
             self.emitter,
             controller.Movement(),
             controller.Growth(100),
             controller.Gravity((0, -50, 0)),
             controller.Fader(start_alpha=1,fade_out_start=0,fade_out_end=1,end_alpha=0),
             controller.Lifetime(2),
         ],
         renderer = Render('black-bubble.png'),
     )
     self.emitter.emit(1, self.group)
Esempio n. 27
0

win.on_resize = on_resize

glEnable(GL_BLEND)
glShadeModel(GL_SMOOTH)
glBlendFunc(GL_SRC_ALPHA, GL_ONE)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
glDisable(GL_DEPTH_TEST)

disc = domain.Disc((0, 0, -50), (0, 0, 1), 1.5, 1.5)
viewer_plane = domain.Plane((0, 0, 0), (0, 0, -1))

jet = StaticEmitter(rate=2000,
                    position=disc,
                    template=Particle(color=(1, 1, 0), ),
                    deviation=Particle(velocity=(0, 0, 15),
                                       up=(0, 0, math.pi),
                                       color=(0.1, 0.1, 0.1)))

default_system.add_global_controller(
    Movement(max_velocity=10),
    Collector(viewer_plane),
    Gravity((0, 0, 15)),
    Growth(0.17),
    Fader(fade_in_end=0, max_alpha=0.3, fade_out_start=0, fade_out_end=8.0),
)

texture = image.load(os.path.join(os.path.dirname(__file__),
                                  'Particle.bmp')).get_texture()
group = ParticleGroup(controllers=[jet],
Esempio n. 28
0
 def _add_particles(self, group, pcount):
     from lepton import Particle
     for i in range(pcount):
         group.new(Particle())
     group.update(0)
Esempio n. 29
0
from pygame.locals import *

from lepton import Particle, ParticleGroup, default_system, domain
from lepton.pygame_renderer import BlitRenderer
from lepton.emitter import StaticEmitter
from lepton.controller import Gravity, Lifetime, Movement, Growth

if __name__ == '__main__':
    pygame.init()
    width, height = 800, 600
    display = pygame.display.set_mode((width, height))
    pygame.display.set_caption('Lepton pygame BlitRenderer example', 'Lepton')
    clock = pygame.time.Clock()

    bubbler = StaticEmitter(rate=80,
                            template=Particle(position=(width / 2, height - 50,
                                                        0)),
                            deviation=Particle(velocity=(5, 15, 0),
                                               size=(5, 5, 0)),
                            position=[((width * i / 4), height, 0)
                                      for i in range(5)])

    bubble = pygame.image.load(
        os.path.join(os.path.dirname(__file__), 'bubble.png'))

    water = ParticleGroup(controllers=[bubbler],
                          renderer=BlitRenderer(display,
                                                bubble,
                                                rotate_and_scale=True))

    default_system.add_global_controller(
        Lifetime(7),
Esempio n. 30
0
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
glDisable(GL_DEPTH_TEST)

spark_tex = image.load(os.path.join(os.path.dirname(__file__),
                                    'flare3.png')).get_texture()

sparks = ParticleGroup(controllers=[
    Lifetime(3),
    Movement(damping=0.93),
    Fader(fade_out_start=0.75, fade_out_end=3.0),
],
                       renderer=BillboardRenderer(
                           SpriteTexturizer(spark_tex.id)))

spark_emitter = StaticEmitter(template=Particle(position=(win.width / 2,
                                                          win.height / 2, 0),
                                                color=(1, 1, 1)),
                              deviation=Particle(position=(1, 1, 0),
                                                 velocity=(300, 300, 0),
                                                 age=1.5),
                              size=[(3, 3, 0), (4, 4, 0), (5, 5, 0), (5, 5, 0),
                                    (6, 6, 0), (7, 7, 0)])
spark_emitter.emit(400, sparks)

fire_tex = image.load(os.path.join(os.path.dirname(__file__),
                                   'puff.png')).get_texture()

fire = ParticleGroup(controllers=[
    Lifetime(4),
    Movement(damping=0.95),
    Growth(30),