def make_spinner(): spinner = arcadeplus.Emitter( center_xy=(SCREEN_WIDTH / 2, SPINNER_HEIGHT - 5), emit_controller=arcadeplus.EmitterIntervalWithTime(0.025, 2.0), particle_factory=lambda emitter: arcadeplus.FadeParticle( filename_or_texture=random.choice(STAR_TEXTURES), change_xy=(0, 6.0), lifetime=0.2)) spinner.change_angle = 16.28 return spinner
def make_emitter(): return arcadeplus.Emitter( center_xy=(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2), emit_controller=arcadeplus.EmitterIntervalWithTime(0.0004, 15.0), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_in_circle((0.0, 0.0), 5.0), lifetime=1.0, scale=0.5, alpha=128 ) )
def emitter_37(): """Rotating emitter. Particles initial velocity is relative to emitter's angle.""" e = arcadeplus.Emitter(center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus. LifetimeParticle(filename_or_texture=TEXTURE, change_xy=(0.0, 2.0), lifetime=2.0, scale=DEFAULT_SCALE)) e.change_angle = 10.0 return emitter_37.__doc__, e
def emitter_33(): """Particles that fade over time""" e = arcadeplus.Emitter(center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus. FadeParticle(filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_FAST), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE)) return emitter_33.__doc__, e
def emitter_22(): """Interval, emit from center, velocity in fixed angle and speed""" e = arcadeplus.Emitter(center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( 0.2, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus. LifetimeParticle(filename_or_texture=TEXTURE, change_xy=(1.0, 1.0), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE, alpha=128)) return emitter_22.__doc__, e
def emitter_28(): """random particle textures""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=random.choice((TEXTURE, TEXTURE2, TEXTURE3)), change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_FAST), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE)) return emitter_28.__doc__, e
def emitter_24(): """Interval, emit from center, velocity from angle with spread""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_vec_spread_deg(90, 45, 2.0), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_24.__doc__, e
def emitter_23(): """Interval, emit from center, velocity in fixed angle and random speed""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL * 8, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_vec_magnitude(45, 1.0, 4.0), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_23.__doc__, e
def emitter_25(): """Interval, emit from center, velocity along a line""" e = arcadeplus.Emitter(center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus. LifetimeParticle(filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_on_line( (-2, 1), (2, 1)), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_25.__doc__, e
def emitter_30(): """random particle alpha""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL * 5, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_FAST), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE, alpha=random.uniform(32, 128))) return emitter_30.__doc__, e
def emitter_14(): """Interval, emit from center, particle lifetime 1.0 seconds""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_FAST), lifetime=1.0, scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_14.__doc__, e
def emitter_20(): """Interval, emit from center, velocity fixed speed around 360 degrees""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_on_circle( (0.0, 0.0), PARTICLE_SPEED_FAST), lifetime=DEFAULT_PARTICLE_LIFETIME, scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_20.__doc__, e
def emitter_17(): """Interval, emit on circle""" e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_SLOW), lifetime=DEFAULT_PARTICLE_LIFETIME, center_xy=arcadeplus.rand_on_circle((0.0, 0.0), 100), scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_17.__doc__, e
def emitter_35(): """Use most features""" soft_circle = arcadeplus.make_soft_circle_texture(80, (255, 64, 64)) textures = (TEXTURE, TEXTURE2, TEXTURE3, TEXTURE4, TEXTURE5, TEXTURE6, TEXTURE7, soft_circle) e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime(0.01, 1.0), particle_factory=lambda emitter: arcadeplus.FadeParticle( filename_or_texture=random.choice(textures), change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_FAST * 2), lifetime=random.uniform(1.0, 3.5), angle=random.uniform(0, 360), change_angle=random.uniform(-3, 3), scale=random.uniform(0.1, 0.8))) return emitter_35.__doc__, e
def emitter_18(): """Interval, emit in rectangle""" width, height = 200, 100 centering_offset = (-width / 2, -height / 2) e = arcadeplus.Emitter( center_xy=CENTER_POS, emit_controller=arcadeplus.EmitterIntervalWithTime( DEFAULT_EMIT_INTERVAL, DEFAULT_EMIT_DURATION), particle_factory=lambda emitter: arcadeplus.LifetimeParticle( filename_or_texture=TEXTURE, change_xy=arcadeplus.rand_in_circle( (0.0, 0.0), PARTICLE_SPEED_SLOW), lifetime=DEFAULT_PARTICLE_LIFETIME, center_xy=arcadeplus.rand_in_rect(centering_offset, width, height), scale=DEFAULT_SCALE, alpha=DEFAULT_ALPHA)) return emitter_18.__doc__, e
def make_rocket(emit_done_cb): """Emitter that displays the smoke trail as the firework shell climbs into the sky""" rocket = RocketEmitter( center_xy=(random.uniform(100, SCREEN_WIDTH - 100), 25), emit_controller=arcadeplus.EmitterIntervalWithTime(0.04, 2.0), particle_factory=lambda emitter: arcadeplus.FadeParticle( filename_or_texture=ROCKET_SMOKE_TEXTURE, change_xy=arcadeplus.rand_in_circle((0.0, 0.0), 0.08), scale=0.5, lifetime=random.uniform(1.0, 1.5), start_alpha=100, end_alpha=0, mutation_callback=rocket_smoke_mutator), emit_done_cb=emit_done_cb) rocket.change_x = random.uniform(-1.0, 1.0) rocket.change_y = random.uniform(5.0, 7.25) return rocket
def make_interval_emitter(center_xy: Point, filenames_and_textures: Sequence[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: Type[ arcadeplus.LifetimeParticle] = arcadeplus.LifetimeParticle if fade_particles: particle_factory = arcadeplus.FadeParticle return arcadeplus.Emitter( center_xy=center_xy, emit_controller=arcadeplus.EmitterIntervalWithTime( emit_interval, emit_duration), particle_factory=lambda emitter: particle_factory( filename_or_texture=random.choice(filenames_and_textures), change_xy=arcadeplus.rand_on_circle((0.0, 0.0), particle_speed), lifetime=random.uniform(particle_lifetime_min, particle_lifetime_max), scale=particle_scale))