def test_coord_set_weights(self):
		from lepton.texturizer import SpriteTexturizer
		coord_set1 = ((0.5,0.5), (1,0.5), (1,1), (0.5,1))
		coord_set2 = (0,0.5, 0.5,0.5, 0.5,1, 0,1)
		coord_set3 = (0.5,0, 1,0, 1,0.5, 0.5,0.5)
		tex = SpriteTexturizer(0, 
			coords=(coord_set1, coord_set2, coord_set3), weights=(20, 30, 50))
		coord_sets = tex.tex_coords
		self.assertEqual(coord_sets, (
			(0.5,0.5, 1,0.5, 1,1, 0.5,1),
			(0,0.5, 0.5,0.5, 0.5,1, 0,1),
			(0.5,0, 1,0, 1,0.5, 0.5,0.5))
			)
		self.assertEqual(len(tex.weights), 3)
		self.assertAlmostEqual(tex.weights[0], 0.20)
		self.assertAlmostEqual(tex.weights[1], 0.30)
		self.assertAlmostEqual(tex.weights[2], 0.50)
		group = self._make_group(1000)
		coords = tuple(tex.generate_tex_coords(group))
		self.failUnless(len(coords) >= 8000, (len(coords), len(group)))
		counts = {coord_sets[0]: 0, coord_sets[1]: 0, coord_sets[2]: 0}
		for i in range(1000):
			cset = coords[i*8:i*8+8]
			self.failUnless(cset in counts, cset)
			counts[cset] += 1
		self.assertEqual(sum(counts.values()), 1000)
		self.failUnless(250 > counts[coord_sets[0]] > 150, counts[coord_sets[0]])
		self.failUnless(375 > counts[coord_sets[1]] > 225, counts[coord_sets[1]])
		self.failUnless(600 > counts[coord_sets[2]] > 400, counts[coord_sets[2]])
Exemple #2
0
 def test_coord_set_weights(self):
     from lepton.texturizer import SpriteTexturizer
     coord_set1 = ((0.5, 0.5), (1, 0.5), (1, 1), (0.5, 1))
     coord_set2 = (0, 0.5, 0.5, 0.5, 0.5, 1, 0, 1)
     coord_set3 = (0.5, 0, 1, 0, 1, 0.5, 0.5, 0.5)
     tex = SpriteTexturizer(0,
                            coords=(coord_set1, coord_set2, coord_set3),
                            weights=(20, 30, 50))
     coord_sets = tex.tex_coords
     self.assertEqual(coord_sets, ((0.5, 0.5, 1, 0.5, 1, 1, 0.5, 1),
                                   (0, 0.5, 0.5, 0.5, 0.5, 1, 0, 1),
                                   (0.5, 0, 1, 0, 1, 0.5, 0.5, 0.5)))
     self.assertEqual(len(tex.weights), 3)
     self.assertAlmostEqual(tex.weights[0], 0.20)
     self.assertAlmostEqual(tex.weights[1], 0.30)
     self.assertAlmostEqual(tex.weights[2], 0.50)
     group = self._make_group(1000)
     coords = tuple(tex.generate_tex_coords(group))
     self.failUnless(len(coords) >= 8000, (len(coords), len(group)))
     counts = {coord_sets[0]: 0, coord_sets[1]: 0, coord_sets[2]: 0}
     for i in range(1000):
         cset = coords[i * 8:i * 8 + 8]
         self.failUnless(cset in counts, cset)
         counts[cset] += 1
     self.assertEqual(sum(counts.values()), 1000)
     self.failUnless(250 > counts[coord_sets[0]] > 150,
                     counts[coord_sets[0]])
     self.failUnless(375 > counts[coord_sets[1]] > 225,
                     counts[coord_sets[1]])
     self.failUnless(600 > counts[coord_sets[2]] > 400,
                     counts[coord_sets[2]])
	def test_default_coords(self):
		from lepton.texturizer import SpriteTexturizer
		tex = SpriteTexturizer(0)
		self.assertEqual(tex.tex_dimension, 2)
		expected = (0,0, 1,0, 1,1, 0,1)
		self.assertEqual(tex.tex_coords, None)
		self.assertEqual(tex.weights, None)
		group = self._make_group(4)
		coords = tex.generate_tex_coords(group)
		self.failUnless(len(coords) >= len(group) * 8, (len(coords), len(group)))
		self.assertEqual(tuple(coords), expected * (len(coords) // 8))
		return tex, group
	def test_coord_set_weights_deterministic(self):
		from lepton.texturizer import SpriteTexturizer
		coord_set1 = ((0.5,0.5), (1,0.5), (1,1), (0.5,1))
		coord_set2 = (0,0.5, 0.5,0.5, 0.5,1, 0,1)
		coord_set3 = (0.5,0, 1,0, 1,0.5, 0.5,0.5)
		tex = SpriteTexturizer(0, 
			coords=(coord_set1, coord_set2, coord_set3), weights=(20, 70, 10))
		coord_sets = tex.tex_coords
		group = self._make_group(20)
		coords = [tuple(tex.generate_tex_coords(group)) for i in range(20)]
		for cs in coords:
			self.assertEqual(cs, coords[0])
	def test_single_coord_set(self):
		from lepton.texturizer import SpriteTexturizer
		coord_set = (0,0, 0.5,0, 0.5,0.5, 0,0.5)
		tex = SpriteTexturizer(0, coords=[coord_set])
		self.assertEqual(tex.tex_dimension, 2)
		self.assertEqual(tex.tex_coords, (coord_set,))
		self.assertEqual(tex.weights, None)
		group = self._make_group(4)
		coords = tex.generate_tex_coords(group)
		self.failUnless(len(coords) >= len(group) * 8, (len(coords), len(group)))
		self.assertEqual(tuple(coords), coord_set * (len(coords) // 8))
		return coord_set, tex, group
Exemple #6
0
 def test_default_coords(self):
     from lepton.texturizer import SpriteTexturizer
     tex = SpriteTexturizer(0)
     self.assertEqual(tex.tex_dimension, 2)
     expected = (0, 0, 1, 0, 1, 1, 0, 1)
     self.assertEqual(tex.tex_coords, None)
     self.assertEqual(tex.weights, None)
     group = self._make_group(4)
     coords = tex.generate_tex_coords(group)
     self.failUnless(
         len(coords) >= len(group) * 8, (len(coords), len(group)))
     self.assertEqual(tuple(coords), expected * (len(coords) // 8))
     return tex, group
Exemple #7
0
 def test_coord_set_weights_deterministic(self):
     from lepton.texturizer import SpriteTexturizer
     coord_set1 = ((0.5, 0.5), (1, 0.5), (1, 1), (0.5, 1))
     coord_set2 = (0, 0.5, 0.5, 0.5, 0.5, 1, 0, 1)
     coord_set3 = (0.5, 0, 1, 0, 1, 0.5, 0.5, 0.5)
     tex = SpriteTexturizer(0,
                            coords=(coord_set1, coord_set2, coord_set3),
                            weights=(20, 70, 10))
     coord_sets = tex.tex_coords
     group = self._make_group(20)
     coords = [tuple(tex.generate_tex_coords(group)) for i in range(20)]
     for cs in coords:
         self.assertEqual(cs, coords[0])
Exemple #8
0
 def test_single_coord_set(self):
     from lepton.texturizer import SpriteTexturizer
     coord_set = (0, 0, 0.5, 0, 0.5, 0.5, 0, 0.5)
     tex = SpriteTexturizer(0, coords=[coord_set])
     self.assertEqual(tex.tex_dimension, 2)
     self.assertEqual(tex.tex_coords, (coord_set, ))
     self.assertEqual(tex.weights, None)
     group = self._make_group(4)
     coords = tex.generate_tex_coords(group)
     self.failUnless(
         len(coords) >= len(group) * 8, (len(coords), len(group)))
     self.assertEqual(tuple(coords), coord_set * (len(coords) // 8))
     return coord_set, tex, group
		def test_set_state_restore_state(self):
			from lepton.texturizer import SpriteTexturizer
			texture = (ctypes.c_ulong * 1)()
			glGenTextures(1, texture)
			glDisable(GL_TEXTURE_2D)
			glBindTexture(GL_TEXTURE_2D, 0)
			sprite_tex = SpriteTexturizer(texture[0])
			self.failIf(self._glGet(GL_TEXTURE_2D))
			self.assertEqual(self._glGet(GL_TEXTURE_BINDING_2D), 0)
			sprite_tex.set_state()
			self.failUnless(self._glGet(GL_TEXTURE_2D))
			self.assertEqual(self._glGet(GL_TEXTURE_BINDING_2D), texture[0])
			sprite_tex.restore_state()
			self.failIf(self._glGet(GL_TEXTURE_2D))
Exemple #10
0
class Impact:
    lifetime = 0.5

    color = (0.9, 0.6, 0.2, 0.3)

    spark_tex = pyglet.resource.texture('bullet.png')
    spark_texturizer = SpriteTexturizer(spark_tex.id)

    sparks = ParticleGroup(controllers=[
        Lifetime(lifetime),
        Movement(),
        ColorBlender([(0, (1, 1, 1, 1)), (lifetime * 0.8, color),
                      (lifetime, (0, 0, 0, 0))]),
    ],
                           renderer=BillboardRenderer(spark_texturizer))

    @classmethod
    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)
Exemple #11
0
class Debris:
    lifetime = 0.5

    color = (1.0, 1.0, 1.0, 1.0)

    fragment_tex = pyglet.resource.texture('fragment.png')
    fragment_texturizer = SpriteTexturizer(fragment_tex.id)

    fragments = ParticleGroup(controllers=[
        Lifetime(lifetime),
        Movement(),
    ],
                              renderer=BillboardRenderer(fragment_texturizer),
                              system=diffuse_system)

    @classmethod
    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)
Exemple #12
0
 def create_group(self, controllers, texture):
     particlegroup = ParticleGroup(controllers=controllers,
                                   system=self.system)
     texturizer = SpriteTexturizer(texture.id)
     particlegroup.renderer = BillboardRenderer(texturizer)
     self.textures.add(
         texture)  # hold a reference to this, otherwise it will get deleted
     return particlegroup
Exemple #13
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)
Exemple #14
0
class Kaboom:
    lifetime = 0.6

    color = (0.9, 0.6, 0.2, 0.3)

    spark_tex = pyglet.resource.texture('bullet.png')
    spark_texturizer = SpriteTexturizer(spark_tex.id)

    sparks = ParticleGroup(controllers=[
        Lifetime(lifetime),
        Movement(damping=0.93),
        ColorBlender([(0, (1, 1, 1, 1)), (lifetime * 0.8, color),
                      (lifetime, color)]),
        Fader(fade_out_start=0.3, fade_out_end=lifetime),
    ],
                           renderer=BillboardRenderer(spark_texturizer))

    trails = ParticleGroup(controllers=[
        Lifetime(lifetime * 1.5),
        Movement(damping=0.83),
        ColorBlender([(0, (1, 1, 1, 1)), (1, color), (lifetime, color)]),
        Fader(max_alpha=0.75, fade_out_start=0, fade_out_end=lifetime),
    ],
                           renderer=BillboardRenderer(spark_texturizer))

    splosions = set()

    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)

    def die(self, dt=None):
        self.trails.unbind_controller(self.trail_emitter)
        self.splosions.remove(self)
Exemple #15
0
 def test_mutiple_coord_sets(self):
     from lepton.texturizer import SpriteTexturizer
     coord_set1 = (0.5, 0.5, 1, 0.5, 1, 1, 0.5, 1)
     coord_set2 = ((0, 0.5), (0.5, 0.5), (0.5, 1), (0, 1))
     coord_set3 = (0.5, 0, 0, 1, 0, 0, 1, 0.5, 0, 0.5, 0.5, 0)
     tex = SpriteTexturizer(0, coords=[coord_set1, coord_set2, coord_set3])
     coord_sets = tex.tex_coords
     self.assertEqual(coord_sets, ((0.5, 0.5, 1, 0.5, 1, 1, 0.5, 1),
                                   (0, 0.5, 0.5, 0.5, 0.5, 1, 0, 1),
                                   (0.5, 0, 1, 0, 1, 0.5, 0.5, 0.5)))
     self.assertEqual(tex.weights, None)
     group = self._make_group(6)
     coords = tuple(tex.generate_tex_coords(group))
     self.failUnless(
         len(coords) >= len(group) * 8, (len(coords), len(group)))
     self.assertEqual(coords[:8], coord_sets[0])
     self.assertEqual(coords[8:16], coord_sets[1])
     self.assertEqual(coords[16:24], coord_sets[2])
     self.assertEqual(coords[24:32], coord_sets[0])
     self.assertEqual(coords[32:40], coord_sets[1])
     self.assertEqual(coords[40:48], coord_sets[2])
	def test_mutiple_coord_sets(self):
		from lepton.texturizer import SpriteTexturizer
		coord_set1 = (0.5,0.5, 1,0.5, 1,1, 0.5,1)
		coord_set2 = ((0,0.5), (0.5,0.5), (0.5,1), (0,1))
		coord_set3 = (0.5,0,0, 1,0,0, 1,0.5,0, 0.5,0.5,0)
		tex = SpriteTexturizer(0, coords=[coord_set1, coord_set2, coord_set3])
		coord_sets = tex.tex_coords
		self.assertEqual(coord_sets, (
			(0.5,0.5, 1,0.5, 1,1, 0.5,1),
			(0,0.5, 0.5,0.5, 0.5,1, 0,1),
			(0.5,0, 1,0, 1,0.5, 0.5,0.5))
			)
		self.assertEqual(tex.weights, None)
		group = self._make_group(6)
		coords = tuple(tex.generate_tex_coords(group))
		self.failUnless(len(coords) >= len(group) * 8, (len(coords), len(group)))
		self.assertEqual(coords[:8], coord_sets[0])
		self.assertEqual(coords[8:16], coord_sets[1])
		self.assertEqual(coords[16:24], coord_sets[2])
		self.assertEqual(coords[24:32], coord_sets[0])
		self.assertEqual(coords[32:40], coord_sets[1])
		self.assertEqual(coords[40:48], coord_sets[2])
	def test_aspect_adjust(self):
		from lepton.texturizer import SpriteTexturizer
		coord_set1 = (0,0, 1,0, 1,0.5, 0,0.5)
		coord_set2 = (0,0.5, 0.5,0.5, 0.5,1, 0,1)
		tex = SpriteTexturizer(0, coords=(coord_set1, coord_set2))
		self.failIf(tex.aspect_adjust_width)
		self.failIf(tex.aspect_adjust_height)
		sizes = [
			(1, 1, 0),
			(2, 3, 0),
		]
		group = self._make_group(2)
		for size, p in zip(sizes, group):
			p.size = size
		self.assertEqual([tuple(p.size) for p in group], sizes)
		tex.generate_tex_coords(group)
		self.assertEqual([tuple(p.size) for p in group], sizes)
		tex.aspect_adjust_width = True
		expected = [
			(2, 1, 0),
			(3, 3, 0),
		]
		tex.generate_tex_coords(group)
		for p, b in zip(group, expected):
			self.assertVector(p.size, b)

		for size, p in zip(sizes, group):
			p.size = size
		self.assertEqual([tuple(p.size) for p in group], sizes)
		tex.aspect_adjust_width = False
		tex.aspect_adjust_height = True
		expected = [
			(1, 0.5, 0),
			(2, 2, 0),
		]
		tex.generate_tex_coords(group)
		for p, b in zip(group, expected):
			self.assertVector(p.size, b)
Exemple #18
0
class Trail:
    LIFETIME = 0.2

    sprite = pyglet.resource.texture('trail.png')
    group = ParticleGroup(
        controllers=[
            Lifetime(LIFETIME),
            #Fader(start_alpha=1.0, fade_out_start=0, fade_out_end=LIFETIME),
            Growth(-50),
            Movement(),
        ],
        renderer=BillboardRenderer(SpriteTexturizer(sprite.id)))

    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)

    def destroy(self):
        self.group.unbind_controller(self.emitter)

    def update(self, *_):
        level = self.level
        dir = self.player.body.velocity
        l = dir.length
        self.emitter.rate = l * 2 if self.player.health > 0 else 0

        if l:
            back = self.player.position - dir.normalized() * 0.1
            backwards = -0.1 * dir
            self.emitter.template.position = (*level.map_to_world(back), 0)
            self.emitter.template.velocity = (*level.map_to_world(backwards),
                                              0)
            self.emitter.template.up = (0, 0,
                                        dir.get_angle() - self.viewport.angle)
Exemple #19
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)
Exemple #20
0
 def test_set_state_restore_state(self):
     from lepton.texturizer import SpriteTexturizer
     texture = (ctypes.c_uint * 1)()
     glGenTextures(1, texture)
     glDisable(GL_TEXTURE_2D)
     glBindTexture(GL_TEXTURE_2D, 0)
     sprite_tex = SpriteTexturizer(texture[0])
     self.failIf(self._glGet(GL_TEXTURE_2D))
     self.assertEqual(self._glGet(GL_TEXTURE_BINDING_2D), 0)
     sprite_tex.set_state()
     self.failUnless(self._glGet(GL_TEXTURE_2D))
     self.assertEqual(self._glGet(GL_TEXTURE_BINDING_2D), texture[0])
     sprite_tex.restore_state()
     self.failIf(self._glGet(GL_TEXTURE_2D))
Exemple #21
0
class Smoke:
    LIFETIME = 0.8

    sprite = pyglet.resource.texture('smoke.png')
    group = ParticleGroup(controllers=[
        Lifetime(LIFETIME),
        Fader(start_alpha=0.3, fade_out_start=0, fade_out_end=LIFETIME),
        Growth(100),
        Movement(),
    ],
                          renderer=BillboardRenderer(
                              SpriteTexturizer(sprite.id)),
                          system=diffuse_system)

    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)

    def destroy(self):
        self.group.unbind_controller(self.emitter)

    def set_world_position(self, wpos, velocity):
        pos = Vec2d(wpos)
        back = pos - velocity
        self.domain.end_point1 = (*back, 0)
        self.domain.end_point0 = (*pos, 0)
        self.emitter.template.velocity = (*(-2 * velocity), 0)
Exemple #22
0
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(70, 1.0 * widthWindow / heightWindow, 0.001, 10000.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()


win.on_resize = resize

electron_lifetime = 22
max_electrons = 6
trail_lifetime = 4.5

texture = image.load(os.path.join(os.path.dirname(__file__),
                                  'flare3.png')).get_texture()
texturizer = SpriteTexturizer(texture.id)

nucleus = Sphere((0, 0, 0), 5)
protons = ParticleGroup(renderer=BillboardRenderer(texturizer),
                        controllers=[
                            Movement(),
                        ])
proton_emitter = StaticEmitter(template=Particle(
    size=(30, 30, 0),
    color=(0.5, 1.0, 0.2, 0.5),
),
                               size=[(26, 26, 0), (30, 30, 0), (34, 34, 0)],
                               deviation=Particle(rotation=(0, 0,
                                                            math.pi / 6), ))

proton_emitter.emit(3, protons)
Exemple #23
0
    def test_aspect_adjust(self):
        from lepton.texturizer import SpriteTexturizer
        coord_set1 = (0, 0, 1, 0, 1, 0.5, 0, 0.5)
        coord_set2 = (0, 0.5, 0.5, 0.5, 0.5, 1, 0, 1)
        tex = SpriteTexturizer(0, coords=(coord_set1, coord_set2))
        self.failIf(tex.aspect_adjust_width)
        self.failIf(tex.aspect_adjust_height)
        sizes = [
            (1, 1, 0),
            (2, 3, 0),
        ]
        group = self._make_group(2)
        for size, p in zip(sizes, group):
            p.size = size
        self.assertEqual([tuple(p.size) for p in group], sizes)
        tex.generate_tex_coords(group)
        self.assertEqual([tuple(p.size) for p in group], sizes)
        tex.aspect_adjust_width = True
        expected = [
            (2, 1, 0),
            (3, 3, 0),
        ]
        tex.generate_tex_coords(group)
        for p, b in zip(group, expected):
            self.assertVector(p.size, b)

        for size, p in zip(sizes, group):
            p.size = size
        self.assertEqual([tuple(p.size) for p in group], sizes)
        tex.aspect_adjust_width = False
        tex.aspect_adjust_height = True
        expected = [
            (1, 0.5, 0),
            (2, 2, 0),
        ]
        tex.generate_tex_coords(group)
        for p, b in zip(group, expected):
            self.assertVector(p.size, b)
Exemple #24
0
		velocity=(0,5,0),
	)
)

default_system.add_global_controller(
	Movement(),
	Collector(Plane((0, 0, 0), (0, 0, -1))),
	Fader(fade_in_end=15.0),
)

font = pyglet.font.load(size=72)
# Try to force all glyphs into a single texture
font.texture_width = font.texture_height = 1024
letter_textures = font.get_glyphs(string.ascii_lowercase)
texturizer = SpriteTexturizer(
	letter_textures[0].texture.id,
	coords=[tex.tex_coords for tex in letter_textures],
	aspect_adjust_width=True)

group = ParticleGroup(controllers=[emitter],
	renderer=BillboardRenderer(texturizer))

win.set_visible(True)
pyglet.clock.schedule_interval(default_system.update, (1.0/40.0))
pyglet.clock.set_fps_limit(None)

@win.event
def on_draw():
	win.clear()
	glLoadIdentity()
	default_system.draw()
Exemple #25
0
		velocity=(0.7,0.7,0.7), 
		up=(0,0,math.pi),
		rotation=(0,0,math.pi),
		color=(0.5, 0.5, 0.5))
)

default_system.add_global_controller(
	Lifetime(3.0),
	Movement(min_velocity=5), 
	Fader(max_alpha=0.7, fade_out_start=1, fade_out_end=3.0),
)

images = [image.load(os.path.join(os.path.dirname(__file__), 'flare%s.png' % (i+1))) 
	for i in range(4)]
group = ParticleGroup(controllers=[comet], 
	renderer=BillboardRenderer(SpriteTexturizer.from_images(images)))

pyglet.clock.schedule_interval(default_system.update, (1.0/30.0))
pyglet.clock.set_fps_limit(None)
arc_radius = 150
angle = math.pi * 0.7
speed = 1.0

def move_comet(td):
	global angle, arc_radius, speed
	comet.template.position = (
		-math.sin(angle) * arc_radius * 0.3, 
		 math.sin(angle * 0.7) * arc_radius * 0.03,
		-math.cos(angle) * arc_radius - arc_radius * 1.05)
	comet.template.velocity = (
		comet.template.position.x*0.05 - comet.template.last_position.x,
Exemple #26
0
		velocity=(0,35,0), 
		color=(0.8,0.8,0.8,0.005),
	),
	deviation=Particle(
		position=(10,5,0), 
		velocity=(3,6,0), 
		color=(0.05,0.05,0.05,0.0),
	)
)

default_system.add_global_controller(
	Lifetime(20),
	Gravity((0, -2, 0)), 
	Movement(), 
	Fader(fade_in_end=1.5, max_alpha=0.05, fade_out_start=12, fade_out_end=20),
)
group1 = ParticleGroup(controllers=[smoke],
	renderer=PointRenderer(64, SpriteTexturizer(create_point_texture(64, 1))))

win.set_visible(True)
pyglet.clock.schedule_interval(default_system.update, (1.0/30.0))

@win.event
def on_draw():
	win.clear()
	glLoadIdentity()
	default_system.draw()

if __name__ == '__main__':
	pyglet.app.run()
Exemple #27
0
    Movement(),
    ColorBlender([
        (0, (0, 0, 0.5, 0)),
        (0.5, (0, 0, 0.5, 0.2)),
        (0.75, (0, 0.5, 1, 0.6)),
        (1.5, (1, 1, 0, 0.2)),
        (2.7, (0.9, 0.2, 0, 0.4)),
        (3.2, (0.6, 0.1, 0.05, 0.2)),
        (4.0, (0.8, 0.8, 0.8, 0.1)),
        (6.0, (0.8, 0.8, 0.8, 0)),
    ]),
)

group = ParticleGroup(controllers=[flame],
                      renderer=PointRenderer(
                          64, SpriteTexturizer(create_point_texture(64, 5))))

win.set_visible(True)
pyglet.clock.schedule_interval(default_system.update, (1.0 / 30.0))
pyglet.clock.set_fps_limit(None)


@win.event
def on_draw():
    win.clear()
    glLoadIdentity()
    default_system.draw()


if __name__ == '__main__':
    default_system.run_ahead(2, 30)
Exemple #28
0
# We should now be able to define all the particle engine stuff
# without code changes to the rest of the game
exhaust = load_texture('exhaust.png')

exhaust_particles = ParticleGroup(
    controllers=[
        controller.Movement(),
        controller.Lifetime(1),
        controller.ColorBlender([
            (0.0, (1.0, 0.3, 0.3, 0.3)),
            (0.2, (1.0, 0.8, 0.3, 0.3)),
            (0.5, (1.0, 1.0, 1.0, 0.2)),
            (1.0, (1.0, 1.0, 1.0, 0.0)),
        ]),
        controller.Growth(-3)
    ],
    renderer=BillboardRenderer(SpriteTexturizer(exhaust.id)),
)

explosion_particles = ParticleGroup(
    controllers=[
        controller.Movement(),
        controller.Lifetime(2),
        controller.Fader(start_alpha=1,
                         fade_out_start=1,
                         fade_out_end=2,
                         end_alpha=0.0)
    ],
    renderer=BillboardRenderer(SpriteTexturizer(exhaust.id)),
)
Exemple #29
0
glEnable(GL_BLEND)
glShadeModel(GL_SMOOTH)
glBlendFunc(GL_SRC_ALPHA, GL_ONE)
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=[
Exemple #30
0
import os
import math
from random import expovariate, uniform, gauss
from pyglet import image
from pyglet.gl import *

from lepton import Particle, ParticleGroup, default_system, domain
from lepton.renderer import PointRenderer
from lepton.texturizer import SpriteTexturizer, create_point_texture
from lepton.emitter import StaticEmitter, PerParticleEmitter
from lepton.controller import Gravity, Lifetime, Movement, Fader, ColorBlender

spark_tex = image.load(os.path.join(os.path.dirname(__file__),
                                    'flare3.png')).get_texture()
spark_texturizer = SpriteTexturizer(spark_tex.id)
trail_texturizer = SpriteTexturizer(create_point_texture(8, 50))


class Kaboom:

    lifetime = 5

    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)),
Exemple #31
0

def resize(widthWindow, heightWindow):
    glViewport(0, 0, widthWindow, heightWindow)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(70, 1.0 * widthWindow / heightWindow, 0.001, 10000.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()


win.on_resize = resize

texture = image.load(os.path.join(os.path.dirname(__file__),
                                  'flare3.png')).get_texture()
texturizer = SpriteTexturizer(texture.id)
texture2 = image.load(os.path.join(os.path.dirname(__file__),
                                   'dot1.png')).get_texture()
texturizer2 = SpriteTexturizer(texture2.id)

controls = {
    'fw': False,
    'bk': False,
    'lf': False,
    'rt': False,
    'f1': False,
    'f2': False,
    'strl': False,
    'strr': False,
    'act1': False,
    'act2': False
Exemple #32
0
                                         rotation=(0, 0, math.pi),
                                         color=(0.5, 0.5, 0.5)))

default_system.add_global_controller(
    Lifetime(3.0),
    Movement(min_velocity=5),
    Fader(max_alpha=0.7, fade_out_start=1, fade_out_end=3.0),
)

images = [
    image.load(os.path.join(os.path.dirname(__file__),
                            'flare%s.png' % (i + 1))) for i in range(4)
]
group = ParticleGroup(controllers=[comet],
                      renderer=BillboardRenderer(
                          SpriteTexturizer.from_images(images)))

pyglet.clock.schedule_interval(default_system.update, (1.0 / 30.0))
pyglet.clock.set_fps_limit(None)
arc_radius = 150
angle = math.pi * 0.7
speed = 1.0


def move_comet(td):
    global angle, arc_radius, speed
    comet.template.position = (-math.sin(angle) * arc_radius * 0.3,
                               math.sin(angle * 0.7) * arc_radius * 0.03,
                               -math.cos(angle) * arc_radius -
                               arc_radius * 1.05)
    comet.template.velocity = (comet.template.position.x * 0.05 -
Exemple #33
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],
                      renderer=BillboardRenderer(SpriteTexturizer(texture.id)))

default_system.run_ahead(5, 40)

pyglet.clock.schedule_interval(default_system.update, (1.0 / 30.0))
pyglet.clock.set_fps_limit(None)
time = 0


def ring(dt):
    """Emit a ring of particles periodically"""
    jet.emit(1000, group)


pyglet.clock.schedule_interval(ring, 5)
Exemple #34
0
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(30, 1.0 * width / height, 0.1, 1000.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()


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)

renderer = PointRenderer(7, SpriteTexturizer(create_point_texture(16, 10)))

domains = [
    domain.Sphere((0, 0, 0), 1),
    domain.Disc((0, 0, 0), (-1, 0, 0), 1),
    domain.Cylinder((-0.5, 0, 0), (0.5, 0, 0), 1),
    domain.Cone((-0.5, 0, 0), (0.5, 0, 0), 1),
]

groups = [
    ParticleGroup(controllers=[
        StaticEmitter(rate=15000,
                      position=domain,
                      template=Particle(
                          color=(1, 1, 1),
                          size=(.1, .1, 0),