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)
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
def emitter_16():
    """Interval, emit in circle"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(DEFAULT_EMIT_INTERVAL,
                                                       DEFAULT_EMIT_DURATION),
        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_16.__doc__, e
Esempio n. 4
0
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)

        # Set the working directory (where we expect to find files) to the same
        # directory this .py file is in. You can leave this out of your own
        # code, but it is needed to easily run the examples using "python -m"
        # as mentioned at the top of this program.
        file_path = os.path.dirname(os.path.abspath(__file__))
        os.chdir(file_path)

        arcade.set_background_color(arcade.color.BLACK)
        self.emitters = []
        self.frametime_plotter = FrametimePlotter()

        self.launch_firework(0)
        arcade.schedule(self.launch_spinner, 4.0)

        stars = arcade.Emitter(
            center_xy=(0.0, 0.0),
            emit_controller=arcade.EmitMaintainCount(20),
            particle_factory=lambda emitter: AnimatedAlphaParticle(
                filename_or_texture=random.choice(STAR_TEXTURES),
                change_xy=(0.0, 0.0),
                start_alpha=0,
                duration1=random.uniform(2.0, 6.0),
                mid_alpha=128,
                duration2=random.uniform(2.0, 6.0),
                end_alpha=0,
                center_xy=arcade.rand_in_rect((0.0, 0.0), SCREEN_WIDTH, SCREEN_HEIGHT)
            )
        )
        self.emitters.append(stars)

        self.cloud = arcade.Emitter(
            center_xy=(50, 500),
            change_xy=(0.15, 0),
            emit_controller=arcade.EmitMaintainCount(60),
            particle_factory=lambda emitter: AnimatedAlphaParticle(
                filename_or_texture=random.choice(CLOUD_TEXTURES),
                change_xy=(_Vec2(arcade.rand_in_circle((0.0, 0.0), 0.04)) + _Vec2(0.1, 0)).as_tuple(),
                start_alpha=0,
                duration1=random.uniform(5.0, 10.0),
                mid_alpha=255,
                duration2=random.uniform(5.0, 10.0),
                end_alpha=0,
                center_xy=arcade.rand_in_circle((0.0, 0.0), 50)
            )
        )
        self.emitters.append(self.cloud)
Esempio n. 5
0
 def create_emitter(self):
     self.emitter = arcade.Emitter(
         center_xy=(500, 500),
         change_xy=(0.15, 0),
         emit_controller=arcade.EmitMaintainCount(60),
         particle_factory=lambda emitter: AnimatedAlphaParticle(
             filename_or_texture=random.choice(CLOUD_TEXTURES),
             change_xy=(_Vec2(arcade.rand_in_circle((0.0, 0.0), 0.04)) + _Vec2(0.1, 0)).as_tuple(),
             start_alpha=0,
             duration1=random.uniform(5.0, 10.0),
             mid_alpha=255,
             duration2=random.uniform(5.0, 10.0),
             end_alpha=0,
             center_xy=arcade.rand_in_circle((0.0, 0.0), 50)
         )
     )
Esempio n. 6
0
def emitter_36():
    """Moving emitter. Particles spawn relative to emitter."""

    class MovingEmitter(arcade.Emitter):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.elapsed = 0.0

        def update(self):
            super().update()
            self.elapsed += 1 / 60
            self.center_x = sine_wave(self.elapsed, 0, SCREEN_WIDTH, SCREEN_WIDTH / 100)
            self.center_y = sine_wave(self.elapsed, 0, SCREEN_HEIGHT, SCREEN_HEIGHT / 100)

    e = MovingEmitter(
        center_xy=CENTER_POS,
        emit_controller=arcade.EmitInterval(0.005),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=TEXTURE,
            change_xy=arcade.rand_in_circle((0.0, 0.0), 0.1),
            lifetime=random.uniform(1.5, 5.5),
            scale=random.uniform(0.05, 0.2)
        )
    )
    return emitter_36.__doc__, e
Esempio n. 7
0
def createParticleBurst(x0,
                        y0,
                        partInterval,
                        totalDuration,
                        partSize,
                        partScale,
                        partSpeed,
                        color,
                        startAlpha,
                        endAlpha,
                        imagePath=None):
    e = arcade.Emitter(
        center_xy=(x0, y0),
        emit_controller=arcade.EmitterIntervalWithTime(partInterval,
                                                       totalDuration),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=imagePath
            if imagePath is not None else arcade.make_circle_texture(
                partSize, color),
            change_xy=arcade.rand_in_circle((0.0, 0.0), partSpeed),
            scale=partScale,
            lifetime=uniform(totalDuration / 4, totalDuration),
            start_alpha=startAlpha,
            end_alpha=endAlpha,
        ),
    )
    return e
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))
Esempio n. 9
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))
def emitter_12():
    """Infinite emitting w/ eternal particle"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitInterval(0.02),
        particle_factory=lambda emitter: arcade.EternalParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_12.__doc__, e
Esempio n. 12
0
def make_emitter():
    return arcade.Emitter(center_xy=(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2),
                          emit_controller=arcade.EmitterIntervalWithTime(
                              0.0004, 15.0),
                          particle_factory=lambda emitter: arcade.
                          LifetimeParticle(filename_or_texture=TEXTURE,
                                           change_xy=arcade.rand_in_circle(
                                               (0.0, 0.0), 5.0),
                                           lifetime=1.0,
                                           scale=0.5,
                                           alpha=128))
Esempio n. 13
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))
Esempio n. 14
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_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_26():
    """Interval, emit particles every 0.4 seconds and stop after emitting 5"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithCount(0.4, 5),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=0.6,
            alpha=128))
    return emitter_26.__doc__, e
def emitter_33():
    """Particles that fade over time"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(DEFAULT_EMIT_INTERVAL,
                                                       DEFAULT_EMIT_DURATION),
        particle_factory=lambda emitter: arcade.FadeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE))
    return emitter_33.__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_28():
    """random particle textures"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(
            DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=random.choice((TEXTURE, TEXTURE2, TEXTURE3)),
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE))
    return emitter_28.__doc__, e
def emitter_13():
    """Interval, emit particle every 0.01 seconds for one second"""
    e = arcade.Emitter(center_xy=CENTER_POS,
                       emit_controller=arcade.EmitterIntervalWithTime(
                           DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION),
                       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_13.__doc__, e
def emitter_31():
    """Constant particle angle"""
    e = arcade.Emitter(center_xy=CENTER_POS,
                       emit_controller=arcade.EmitterIntervalWithTime(
                           DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION),
                       particle_factory=lambda emitter: arcade.
                       LifetimeParticle(filename_or_texture=TEXTURE2,
                                        change_xy=arcade.rand_in_circle(
                                            (0.0, 0.0), PARTICLE_SPEED_FAST),
                                        lifetime=DEFAULT_PARTICLE_LIFETIME,
                                        angle=45,
                                        scale=DEFAULT_SCALE))
    return emitter_31.__doc__, e
def emitter_14():
    """Interval, emit from center, particle lifetime 1.0 seconds"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(DEFAULT_EMIT_INTERVAL,
                                                       DEFAULT_EMIT_DURATION),
        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_14.__doc__, e
def emitter_32():
    """animate particle angle"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(
            DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE2,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            change_angle=2,
            scale=DEFAULT_SCALE))
    return emitter_32.__doc__, e
def emitter_30():
    """random particle alpha"""
    e = arcade.Emitter(
        pos=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(
            DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            vel=arcade.rand_in_circle(Vec2d.zero(), PARTICLE_SPEED_FAST),
            lifetime=DEFAULT_PARTICLE_LIFETIME,
            scale=DEFAULT_SCALE,
            alpha=random.uniform(32, 128)))
    return emitter_30.__doc__, e
def emitter_29():
    """random particle scale"""
    e = arcade.Emitter(center_xy=CENTER_POS,
                       emit_controller=arcade.EmitterIntervalWithTime(
                           DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION),
                       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=random.uniform(0.1, 0.8),
                                        alpha=DEFAULT_ALPHA))
    return emitter_29.__doc__, e
    def __init__(self):
        self.w = 600
        self.h = 600
        arcade.Window.__init__(self, self.w, self.h, "Particles!")
        arcade.set_background_color(arcade.color.EERIE_BLACK)

        # Sprite for particle from image (try changing to other item numbers! 17 is hearts!)
        self.text_blue = arcade.load_texture(
            "Sprites/PNG/Items/platformPack_item001.png")
        # Sprite for particle pregenerated
        self.text_red = arcade.make_soft_circle_texture(20, arcade.color.RED)
        self.text_green = arcade.make_soft_square_texture(
            50, arcade.color.GREEN, 200, 150)

        # Timer for cosine/sine purposes later
        self.timer = 0

        # Empty list to store our emitters for easy drawing and updating
        self.emitters = []

        # Make the center, moving emitter
        self.fountain = arcade.Emitter(
            center_xy=(self.w / 2, self.h / 2),  # Position
            emit_controller=arcade.EmitInterval(
                0.01),  # When to make more particles
            particle_factory=lambda emitter: arcade.
            FadeParticle(  # Type of particle
                filename_or_texture=self.text_blue,  # Particle texture
                change_xy=arcade.rand_in_circle(
                    (0, 0), 4.5),  # Particle velocity
                lifetime=1.0,  # Particle lifetime
                scale=0.5,  # Particle scaling
            ),
        )

        self.cursor = arcade.Emitter(
            center_xy=(self.w / 2, self.h / 2),
            emit_controller=arcade.EmitMaintainCount(
                30),  # Alway keep 30 on screen
            particle_factory=lambda emitter: arcade.
            LifetimeParticle(  # Stay bright till end
                filename_or_texture=self.text_red,
                change_xy=(random.uniform(-1, 1), random.uniform(-1, 1)),
                lifetime=random.random(
                ),  # die out at random times, or else this looked weird
                scale=1,
            ),
        )

        # Add our current, always-on emitters to the list
        self.emitters.extend([self.fountain, self.cursor])
Esempio n. 27
0
def emitter_15():
    """Interval, emit from center, particle lifetime random in range"""
    e = arcade.Emitter(
        center_xy=CENTER_POS,
        emit_controller=arcade.EmitterIntervalWithTime(DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION),
        particle_factory=lambda emitter: arcade.LifetimeParticle(
            filename_or_texture=TEXTURE,
            change_xy=arcade.rand_in_circle((0.0, 0.0), PARTICLE_SPEED_FAST),
            lifetime=random.uniform(DEFAULT_PARTICLE_LIFETIME - 1.0, DEFAULT_PARTICLE_LIFETIME),
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA
        )
    )
    return emitter_15.__doc__, e
Esempio n. 28
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
    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)
def emitter_19():
    """Interval, emit on line"""
    e = arcade.Emitter(
        pos=Vec2d.zero(),
        emit_controller=arcade.EmitterIntervalWithTime(DEFAULT_EMIT_INTERVAL,
                                                       DEFAULT_EMIT_DURATION),
        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_on_line(Vec2d.zero(),
                                    Vec2d(SCREEN_WIDTH, SCREEN_HEIGHT)),
            scale=DEFAULT_SCALE,
            alpha=DEFAULT_ALPHA))
    return emitter_19.__doc__, e