def explode_ringed_firework(self, prev_emitter):
        """Actions that happen when a firework shell explodes, resulting in a ringed firework"""
        self.emitters.append(make_puff(prev_emitter))
        self.emitters.append(make_flash(prev_emitter))

        spark_texture, ring_texture = random.choice(SPARK_PAIRS)
        sparks = arcade.Emitter(
            center_xy=prev_emitter.get_pos(),
            emit_controller=arcade.EmitBurst(25),
            particle_factory=lambda emitter: arcade.FadeParticle(
                filename_or_texture=spark_texture,
                change_xy=arcade.rand_in_circle((0.0, 0.0), 8.0),
                lifetime=random.uniform(0.55, 0.8),
                mutation_callback=firework_spark_mutator))
        self.emitters.append(sparks)

        ring = arcade.Emitter(
            center_xy=prev_emitter.get_pos(),
            emit_controller=arcade.EmitBurst(20),
            particle_factory=lambda emitter: arcade.FadeParticle(
                filename_or_texture=ring_texture,
                change_xy=arcade.rand_on_circle(
                    (0.0, 0.0), 5.0) + arcade.rand_in_circle((0.0, 0.0), 0.25),
                lifetime=random.uniform(1.0, 1.6),
                mutation_callback=firework_spark_mutator))
        self.emitters.append(ring)
Example #2
0
    def make_gun_fire_emitter(self):
        """
        Function to create a firing particle effect for when the tank fires.
        Currently is set to match the location and orientation of the tank.
        If the tank is moving rapidly, it looks a little silly at the moment,
        but to fix that I'd have to update the emitter position on update and
        I'm not sure that is worth it.

        Inputs:
            None
        Outputs:
            (emitter obj): tank tread particle
        """
        front_x = self.player.center_x + (
            self.player.width / 2 + self.t_shot.height / 2 + 5
        ) * np.cos(self.player.radians)
        front_y = self.player.center_y + (
            self.player.height / 2 + self.t_shot.height / 2 + 5
        ) * np.sin(self.player.radians)
        return arcade.Emitter(
            center_xy=(front_x, front_y),
            emit_controller=arcade.EmitBurst(1),
            particle_factory=lambda emitter: arcade.FadeParticle(
                filename_or_texture=self.t_shot,
                angle=self.player.angle + 90,  # correcting for texture orientation
                change_xy=(0, 0),
                lifetime=0.4,
                scale=1,
            ),
        )
def make_flash(prev_emitter):
    """Return emitter that displays the brief flash when a firework shell explodes"""
    return arcade.Emitter(center_xy=prev_emitter.get_pos(),
                          emit_controller=arcade.EmitBurst(3),
                          particle_factory=lambda emitter: arcade.FadeParticle(
                              filename_or_texture=FLASH_TEXTURE,
                              change_xy=arcade.rand_in_circle((0.0, 0.0), 3.5),
                              lifetime=0.15))
Example #4
0
def make_puff(prev_emitter):
    """Return emitter that generates the subtle smoke cloud left after a firework shell explodes"""
    return arcade.Emitter(
        pos=prev_emitter.get_pos(),
        emit_controller=arcade.EmitBurst(4),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=PUFF_TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), 0.4) + Vec2d(0.3, 0.0),
            lifetime=4.0))
def make_puff(prev_emitter):
    """Return emitter that generates the subtle smoke cloud left after a firework shell explodes"""
    return arcade.Emitter(
        center_xy=prev_emitter.get_pos(),
        emit_controller=arcade.EmitBurst(4),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=PUFF_TEXTURE,
            change_xy=(_Vec2(arcade.rand_in_circle(
                (0.0, 0.0), 0.4)) + _Vec2(0.3, 0.0)).as_tuple(),
            lifetime=4.0))
Example #6
0
 def create_emitter(self):
     spark_texture = random.choice(SPARK_TEXTURES)
     self.emitter = arcade.Emitter(
         #center_xy=prev_emitter.get_pos(),
         center_xy=(500, 500),
         emit_controller=arcade.EmitBurst(random.randint(30, 40)),
         particle_factory=lambda emitter: arcade.FadeParticle(
             filename_or_texture=spark_texture,
             change_xy=arcade.rand_in_circle((0.0, 0.0), 9.0),
             lifetime=random.uniform(0.5, 1.2),
             mutation_callback=firework_spark_mutator))
Example #7
0
def heart_poof(position):
    return arcade.Emitter(
        center_xy=(position.x, position.y),
        emit_controller=arcade.EmitBurst(50),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=arcade.load_texture(HEART_FULL),
            change_xy=arcade.rand_in_circle((0.0, 0.0), 1.0),
            lifetime=1.5,
            scale=0.1 * random.random(),
        ),
    )
def emitter_9():
    """Burst, emit from center, velocity in fixed angle and random speed"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT // 4),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_vec_magnitude(45, 1.0, 4.0),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_9.__doc__, e
def emitter_1():
    """Burst, emit from center, particle lifetime 1.0 seconds"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=1.0,
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_1.__doc__, e
def emitter_11():
    """Burst, emit from center, velocity along a line"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT // 4),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_on_line(Vec2d(-2, 1), Vec2d(2, 1)),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_11.__doc__, e
def emitter_7():
    """Burst, emit from center, velocity fixed speed around 360 degrees"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT // 4),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_on_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_7.__doc__, e
def emitter_0():
    """Burst, emit from center, particle with lifetime"""
    e = arcade.Emitter(center_xy=CENTER_POS,
                       emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
                       particle_factory=lambda emitter: arcade.
                       LifetimeParticle(filename_or_texture=TEXTURE,
                                        change_xy=arcade.rand_in_circle(
                                            (0.0, 0.0), PARTICLE_SPEED_FAST),
                                        lifetime=DEFAULT_PARTICLE_LIFETIME,
                                        scale=DEFAULT_SCALE,
                                        alpha=DEFAULT_ALPHA))
    return emitter_0.__doc__, e
def emitter_8():
    """Burst, emit from center, velocity in rectangle"""
    e = arcade.Emitter(center_xy=CENTER_POS,
                       emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
                       particle_factory=lambda emitter: arcade.
                       LifetimeParticle(filename_or_texture=TEXTURE,
                                        change_xy=arcade.rand_in_rect(
                                            (-2.0, -2.0), 4.0, 4.0),
                                        lifetime=DEFAULT_PARTICLE_LIFETIME,
                                        scale=DEFAULT_SCALE,
                                        alpha=DEFAULT_ALPHA))
    return emitter_8.__doc__, e
def emitter_10():
    """Burst, emit from center, velocity from angle with spread"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT // 4),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_vec_spread_deg(90, 45, 2.0),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_10.__doc__, e
def emitter_3():
    """Burst, emit in circle"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_SLOW),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            pos=arcade.rand_in_circle(Vec2d.zero(), 100),
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_3.__doc__, e
Example #16
0
def emitter_34():
    """Dynamically generated textures, burst emitting, fading particles"""
    textures = [arcade.make_soft_circle_texture(48, p) for p in (arcade.color.GREEN, arcade.color.BLUE_GREEN)]
    e = arcade.Emitter(
        center_xy=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=random.choice(textures),
            change_xy=arcade.rand_in_circle((0.0, 0.0), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE
        )
    )
    return emitter_34.__doc__, e
Example #17
0
 def emitter_0(self):
     """Burst, emit from center, particle with lifetime"""
     e = arcade.Emitter(
         center_xy=(self.sprite.center_x, self.sprite.center_y),
         emit_controller=arcade.EmitBurst(constants.BURST_PARTICLE_COUNT),
         particle_factory=lambda emitter: arcade.LifetimeParticle(
             filename_or_texture=self.burst_texture,
             change_xy=arcade.rand_in_circle(
                 (0.0, 0.0), constants.PARTICLE_SPEED_FAST),
             lifetime=random.uniform(
                 constants.DEFAULT_PARTICLE_LIFETIME - 1.0, constants.
                 DEFAULT_PARTICLE_LIFETIME),
             scale=constants.DEFAULT_SCALE,
             alpha=constants.DEFAULT_ALPHA))
     return e
Example #18
0
def emitter_6():
    """Burst, emit on line"""
    e = arcade.Emitter(
        center_xy=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            change_xy=arcade.rand_in_circle((0.0, 0.0), PARTICLE_SPEED_SLOW),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            center_xy=arcade.rand_on_line((0.0, 0.0), (SCREEN_WIDTH, SCREEN_HEIGHT)),
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA
        )
    )
    return emitter_6.__doc__, e
def emitter_5():
    """Burst, emit in rectangle"""
    width, height = 200, 100
    centering_offset = Vec2d(-width / 2, -height / 2)
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_SLOW),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            pos=arcade.rand_in_rect(centering_offset, width, height),
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_5.__doc__, e
    def explode_firework(self, prev_emitter):
        """Actions that happen when a firework shell explodes, resulting in a typical firework"""
        self.emitters.append(make_puff(prev_emitter))
        self.emitters.append(make_flash(prev_emitter))

        spark_texture = random.choice(SPARK_TEXTURES)
        sparks = arcade.Emitter(
            center_xy=prev_emitter.get_pos(),
            emit_controller=arcade.EmitBurst(random.randint(30, 40)),
            particle_factory=lambda emitter: arcade.FadeParticle(
                filename_or_texture=spark_texture,
                change_xy=arcade.rand_in_circle((0.0, 0.0), 9.0),
                lifetime=random.uniform(0.5, 1.2),
                mutation_callback=firework_spark_mutator))
        self.emitters.append(sparks)
Example #21
0
def bee_poof(position):
    return arcade.Emitter(
        center_xy=(position.x, position.y),
        emit_controller=arcade.EmitBurst(50),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=random.choice(
                [
                    arcade.load_texture("data/kenney_particlePack_1.1/light_01.png"),
                    arcade.load_texture("data/kenney_particlePack_1.1/light_02.png"),
                    arcade.load_texture("data/kenney_particlePack_1.1/light_03.png"),
                ]
            ),
            change_xy=arcade.rand_in_circle((0.0, 0.0), 1.0),
            lifetime=1.5,
            scale=0.1 * random.random(),
        ),
    )
Example #22
0
 def make_sparks(self, position):
     spark_texture = random.choice(SPARK_TEXTURES)
     sparks = arcade.Emitter(
         center_xy=position,
         emit_controller=arcade.EmitBurst(self.radius),
         particle_factory=lambda emitter: AnimatedAlphaParticle(
             filename_or_texture=spark_texture,
             change_xy=arcade.rand_in_circle((0.0, 0.0), 9.0),
             start_alpha=255,
             duration1=random.uniform(0.6, 1.0),
             mid_alpha=0,
             duration2=random.uniform(0.1, 0.2),
             end_alpha=255,
             mutation_callback=firework_spark_mutator
         )
     )
     self.emitters.append(sparks)
Example #23
0
 def player_gets_hit(self):
     """
     Function to turn the player red when it gets hit 
     Inputs: 
         None
     Outputs:
     """
     return arcade.Emitter(
         center_xy=(self.player.center_x, self.player.center_y),
         emit_controller=arcade.EmitBurst(1),
         particle_factory=lambda emitter: arcade.FadeParticle(
             filename_or_texture=self.t_hit,
             angle=self.player.angle,
             change_xy=(0, 0),
             lifetime=0.4,
             scale=1,
         ),
     )
    def explode_sparkle_firework(self, prev_emitter):
        """Actions that happen when a firework shell explodes, resulting in a sparkling firework"""
        self.emitters.append(make_puff(prev_emitter))
        self.emitters.append(make_flash(prev_emitter))

        spark_texture = random.choice(SPARK_TEXTURES)
        sparks = arcade.Emitter(
            center_xy=prev_emitter.get_pos(),
            emit_controller=arcade.EmitBurst(random.randint(30, 40)),
            particle_factory=lambda emitter: AnimatedAlphaParticle(
                filename_or_texture=spark_texture,
                change_xy=arcade.rand_in_circle((0.0, 0.0), 9.0),
                start_alpha=255,
                duration1=random.uniform(0.6, 1.0),
                mid_alpha=0,
                duration2=random.uniform(0.1, 0.2),
                end_alpha=255,
                mutation_callback=firework_spark_mutator))
        self.emitters.append(sparks)
Example #25
0
 def draw_treads(self):
     """
     Function to create treads particle effect for when the tank moves.
     Currently is set to match the location and orientation of the tank.
     Inputs:
         None
     Outputs:
         (emitter obj): tank tread particle
     """
     return arcade.Emitter(
         center_xy=(self.player.center_x, self.player.center_y),
         emit_controller=arcade.EmitBurst(1),
         particle_factory=lambda emitter: arcade.FadeParticle(
             filename_or_texture=self.t_tread,
             angle=self.player.angle + 90,
             change_xy=(0, 0),
             lifetime=0.4,
             scale=0.5,
         ),
     )
Example #26
0
 def __init__(self, center_pos, velocity=None):
     self.emitter_timeout = 0
     if velocity:
         self.speed = PARTICLE_SPEED_FAST + velocity.speed
     else:
         self.speed = PARTICLE_SPEED_FAST
     self.frametime_plotter = FrametimePlotter()
     self.emitter = arcade.Emitter(
         center_xy=center_pos,
         emit_controller=arcade.EmitBurst(BURST_PARTICLE_COUNT),
         # emit_controller=arcade.EmitterIntervalWithTime(DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION),
         particle_factory=lambda emitter: arcade.LifetimeParticle(
             filename_or_texture=TEXTURE,
             change_xy=arcade.rand_on_circle((0.0, 0.0), self.speed),
             lifetime=random.uniform(DEFAULT_PARTICLE_LIFETIME - 0.5, DEFAULT_PARTICLE_LIFETIME),
             #lifetime=DEFAULT_PARTICLE_LIFETIME,
             scale=DEFAULT_SCALE,
             alpha=DEFAULT_ALPHA
         )
     )
Example #27
0
    def create_emitter(self):
        ww, wh = arcade.get_window().get_size()
        spark_texture = random.choice(SPARK_TEXTURES)

        def firework_spark_mutator(particle: arcade.FadeParticle):
            """mutation_callback shared by all fireworks sparks"""
            # gravity
            particle.change_y += -0.03
            # drag
            particle.change_x += self.change
            particle.change_y += self.change

        self.emitter = arcade.Emitter(
            center_xy=(ww / 2, wh / 2),
            emit_controller=arcade.EmitBurst(random.randint(30, 40)),
            particle_factory=lambda emitter: arcade.FadeParticle(
                filename_or_texture=spark_texture,
                change_xy=arcade.rand_in_circle((0.0, 0.0), 9.0),
                lifetime=random.uniform(0.5, 1.2),
                mutation_callback=firework_spark_mutator))
Example #28
0
def make_burst_emitter(center_xy: Point,
                       filenames_and_textures: List[FilenameOrTexture],
                       particle_count: int,
                       particle_speed: float,
                       particle_lifetime_min: float,
                       particle_lifetime_max: float,
                       particle_scale: float = 1.0,
                       fade_particles: bool = True):
    """Returns an emitter that emits all of its particles at once"""
    particle_factory = arcade.LifetimeParticle
    if fade_particles:
        particle_factory = arcade.FadeParticle
    return arcade.Emitter(
        center_xy=center_xy,
        emit_controller=arcade.EmitBurst(particle_count),
        particle_factory=lambda emitter: particle_factory(
            filename_or_texture=random.choice(filenames_and_textures),
            change_xy=arcade.rand_in_circle((0.0, 0.0), particle_speed),
            lifetime=random.uniform(particle_lifetime_min,
                                    particle_lifetime_max),
            scale=particle_scale))
Example #29
0
def make_burst_emitter(
        pos: Vec2d,
        filenames_and_textures: List[
            str],  # Also supports Texture objects in the List
        particle_count: int,
        particle_speed: float,
        particle_lifetime_min: float,
        particle_lifetime_max: float,
        particle_scale: float = 1.0,
        fade_particles: bool = True):
    """Returns an emitter that emits all of its particles at once"""
    particle_factory = arcade.LifetimeParticle
    if fade_particles:
        particle_factory = arcade.FadeParticle
    return arcade.Emitter(
        pos=pos,
        emit_controller=arcade.EmitBurst(particle_count),
        particle_factory=lambda emitter: particle_factory(
            filename_or_texture=random.choice(filenames_and_textures),
            vel=arcade.rand_in_circle(Vec2d.zero(), particle_speed),
            lifetime=random.uniform(particle_lifetime_min,
                                    particle_lifetime_max),
            scale=particle_scale))
    def make_boom(self, x, y):
        """
        Function to return a shortlived burst emitter whenever we want. Potentially I
        could have had this appended directly to the emitter list, but instead I return
        the emitter itself and will have to add it to the list after that.

        Inputs:
            x (float): the center x position of the burst
            y (float): the center y position of the burst
        Outputs:
            (emitter object): circular green burst of spinning square particles
        """
        return arcade.Emitter(
            center_xy=(x, y),
            emit_controller=arcade.EmitBurst(100),
            particle_factory=lambda emitter: arcade.FadeParticle(
                filename_or_texture=self.text_green,
                change_xy=arcade.rand_in_circle((0, 0), 10),
                change_angle=10,
                lifetime=3,
                scale=0.5,
            ),
        )