TetrArcade/arcade/emitter_simple.py

63 lines
2.3 KiB
Python

"""
Convenience functions that provide a much simpler interface to Emitters and Particles.
These trade away some flexibility in favor of simplicity to allow beginners to start using particle systems.
"""
import arcade
import random
from typing import List
from arcade.arcade_types import Point
from arcade.particle import FilenameOrTexture
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
)
)
def make_interval_emitter(
center_xy: Point,
filenames_and_textures: List[FilenameOrTexture],
emit_interval: float,
emit_duration: float,
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 its particles at a constant rate for a given amount of time"""
particle_factory = arcade.LifetimeParticle
if fade_particles:
particle_factory = arcade.FadeParticle
return arcade.Emitter(
center_xy=center_xy,
emit_controller=arcade.EmitterIntervalWithTime(emit_interval, emit_duration),
particle_factory=lambda emitter: particle_factory(
filename_or_texture=random.choice(filenames_and_textures),
change_xy=arcade.rand_on_circle((0.0, 0.0), particle_speed),
lifetime=random.uniform(particle_lifetime_min, particle_lifetime_max),
scale=particle_scale
)
)