mini_arcade_core.scenes.systems.builtins.particles

Reusable procedural particle systems for simple fire/smoke style effects.

Attributes

Classes

ProceduralParticle

One simulated procedural particle.

ProceduralParticleEmitterState

Mutable state for one emitter.

ProceduralParticleBinding

Configuration for one procedural particle emitter.

ProceduralParticleProfile

Reusable visual/physics preset for a particle emitter style.

ProceduralParticleSimulationSystem

Spawn and simulate particles for one or more emitters.

ProceduralParticleRenderSystem

Render procedural particles using primitive circles.

ProceduralParticleBundle

Compose simulation and render systems for one or more procedural emitters.

Functions

particle_binding_with_profile(...)

Build an emitter binding from a reusable particle style profile.

fire_particle_binding(→ ProceduralParticleBinding[TCtx])

Convenience preset for a warm fire emitter.

smoke_particle_binding(→ ProceduralParticleBinding[TCtx])

Convenience preset for a soft smoke emitter.

magic_particle_binding(→ ProceduralParticleBinding[TCtx])

Convenience preset for arcane glow/spark emitters.

potion_particle_binding(→ ProceduralParticleBinding[TCtx])

Convenience preset for bubbling potion/fume emitters.

Module Contents

mini_arcade_core.scenes.systems.builtins.particles.FIRE_COLOR_RAMP: tuple[ColorStop, Ellipsis] = ((0.0, (255, 252, 220)), (0.14, (255, 236, 150)), (0.34, (255, 182, 84)), (0.58, (255, 96, 44)),...
mini_arcade_core.scenes.systems.builtins.particles.SMOKE_COLOR_RAMP: tuple[ColorStop, Ellipsis] = ((0.0, (146, 128, 124)), (0.3, (118, 104, 102)), (0.7, (82, 76, 78)), (1.0, (36, 32, 36)))
mini_arcade_core.scenes.systems.builtins.particles.FIRE_ALPHA_RAMP: tuple[AlphaStop, Ellipsis] = ((0.0, 48), (0.08, 128), (0.28, 216), (0.72, 138), (1.0, 0))
mini_arcade_core.scenes.systems.builtins.particles.SMOKE_ALPHA_RAMP: tuple[AlphaStop, Ellipsis] = ((0.0, 18), (0.18, 42), (0.45, 64), (0.82, 34), (1.0, 0))
mini_arcade_core.scenes.systems.builtins.particles.MAGIC_COLOR_RAMP: tuple[ColorStop, Ellipsis] = ((0.0, (244, 222, 255)), (0.25, (188, 126, 255)), (0.55, (108, 72, 255)), (0.82, (56, 34, 162)),...
mini_arcade_core.scenes.systems.builtins.particles.MAGIC_ALPHA_RAMP: tuple[AlphaStop, Ellipsis] = ((0.0, 34), (0.1, 96), (0.45, 188), (0.82, 92), (1.0, 0))
mini_arcade_core.scenes.systems.builtins.particles.POTION_COLOR_RAMP: tuple[ColorStop, Ellipsis] = ((0.0, (198, 255, 226)), (0.28, (120, 255, 200)), (0.56, (62, 214, 166)), (0.82, (20, 98, 88)),...
mini_arcade_core.scenes.systems.builtins.particles.POTION_ALPHA_RAMP: tuple[AlphaStop, Ellipsis] = ((0.0, 22), (0.12, 74), (0.38, 146), (0.84, 60), (1.0, 0))
class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticle[source]

One simulated procedural particle.

x: float
y: float
vx: float
vy: float
age: float
lifetime: float
start_radius: float
end_radius: float
phase: float = 0.0
class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticleEmitterState[source]

Mutable state for one emitter.

particles: list[ProceduralParticle] = []
spawn_accumulator: float = 0.0
elapsed: float = 0.0
class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticleBinding[source]

Bases: Generic[TCtx]

Configuration for one procedural particle emitter.

state_getter: Callable[[TCtx], ProceduralParticleEmitterState]
origin_getter: Callable[[TCtx], tuple[float, float]]
enabled_when: Callable[[TCtx], bool]
intensity_getter: Callable[[TCtx], float]
wind_getter: Callable[[TCtx], float]
viewport_getter: Callable[[TCtx], tuple[float, float]]
spawn_rate: float = 96.0
max_particles: int = 180
spawn_spread_x: float = 18.0
spawn_spread_y: float = 6.0
velocity_x: tuple[float, float]
velocity_y: tuple[float, float]
acceleration_x: float = 0.0
acceleration_y: float = -18.0
turbulence: float = 20.0
turbulence_frequency: float = 7.0
drag: float = 0.9
lifetime: tuple[float, float] = (0.45, 0.9)
start_radius: tuple[float, float] = (8.0, 14.0)
end_radius: tuple[float, float] = (1.0, 4.0)
color_ramp: tuple[ColorStop, Ellipsis] = ((0.0, (255, 252, 220)), (0.14, (255, 236, 150)), (0.34, (255, 182, 84)), (0.58, (255, 96, 44)),...
alpha_ramp: tuple[AlphaStop, Ellipsis] = ((0.0, 48), (0.08, 128), (0.28, 216), (0.72, 138), (1.0, 0))
render_pass_scales: tuple[float, Ellipsis] = (1.4, 0.92, 0.56)
render_pass_color_scales: tuple[float, Ellipsis] = (0.78, 1.0, 1.08)
render_pass_alpha_scales: tuple[float, Ellipsis] = (0.18, 0.52, 0.95)
intensity_radius_scale: float = 0.45
intensity_lifetime_scale: float = 0.16
intensity_velocity_scale: float = 0.28
seed: int = 1
class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticleProfile[source]

Reusable visual/physics preset for a particle emitter style.

spawn_rate: float
max_particles: int
spawn_spread_x: float
spawn_spread_y: float
velocity_x: tuple[float, float]
velocity_y: tuple[float, float]
acceleration_x: float
acceleration_y: float
turbulence: float
turbulence_frequency: float
drag: float
lifetime: tuple[float, float]
start_radius: tuple[float, float]
end_radius: tuple[float, float]
color_ramp: tuple[ColorStop, Ellipsis]
alpha_ramp: tuple[AlphaStop, Ellipsis]
render_pass_scales: tuple[float, Ellipsis]
render_pass_color_scales: tuple[float, Ellipsis]
render_pass_alpha_scales: tuple[float, Ellipsis]
intensity_radius_scale: float = 0.45
intensity_lifetime_scale: float = 0.16
intensity_velocity_scale: float = 0.28
mini_arcade_core.scenes.systems.builtins.particles.FIRE_PARTICLE_PROFILE
mini_arcade_core.scenes.systems.builtins.particles.SMOKE_PARTICLE_PROFILE
mini_arcade_core.scenes.systems.builtins.particles.MAGIC_PARTICLE_PROFILE
mini_arcade_core.scenes.systems.builtins.particles.POTION_PARTICLE_PROFILE
mini_arcade_core.scenes.systems.builtins.particles.particle_binding_with_profile(*, profile: ProceduralParticleProfile, state_getter: Callable[[TCtx], ProceduralParticleEmitterState], origin_getter: Callable[[TCtx], tuple[float, float]], intensity_getter: Callable[[TCtx], float] = _default_intensity, wind_getter: Callable[[TCtx], float] = _default_wind, viewport_getter: Callable[[TCtx], tuple[float, float]] = _default_viewport, enabled_when: Callable[[TCtx], bool] = _default_enabled_when, seed: int = 1) ProceduralParticleBinding[TCtx][source]

Build an emitter binding from a reusable particle style profile.

mini_arcade_core.scenes.systems.builtins.particles.fire_particle_binding(*, state_getter: Callable[[TCtx], ProceduralParticleEmitterState], origin_getter: Callable[[TCtx], tuple[float, float]], intensity_getter: Callable[[TCtx], float] = _default_intensity, wind_getter: Callable[[TCtx], float] = _default_wind, viewport_getter: Callable[[TCtx], tuple[float, float]] = _default_viewport, seed: int = 1) ProceduralParticleBinding[TCtx][source]

Convenience preset for a warm fire emitter.

mini_arcade_core.scenes.systems.builtins.particles.smoke_particle_binding(*, state_getter: Callable[[TCtx], ProceduralParticleEmitterState], origin_getter: Callable[[TCtx], tuple[float, float]], intensity_getter: Callable[[TCtx], float] = _default_intensity, wind_getter: Callable[[TCtx], float] = _default_wind, viewport_getter: Callable[[TCtx], tuple[float, float]] = _default_viewport, seed: int = 2) ProceduralParticleBinding[TCtx][source]

Convenience preset for a soft smoke emitter.

mini_arcade_core.scenes.systems.builtins.particles.magic_particle_binding(*, state_getter: Callable[[TCtx], ProceduralParticleEmitterState], origin_getter: Callable[[TCtx], tuple[float, float]], intensity_getter: Callable[[TCtx], float] = _default_intensity, wind_getter: Callable[[TCtx], float] = _default_wind, viewport_getter: Callable[[TCtx], tuple[float, float]] = _default_viewport, enabled_when: Callable[[TCtx], bool] = _default_enabled_when, seed: int = 3) ProceduralParticleBinding[TCtx][source]

Convenience preset for arcane glow/spark emitters.

mini_arcade_core.scenes.systems.builtins.particles.potion_particle_binding(*, state_getter: Callable[[TCtx], ProceduralParticleEmitterState], origin_getter: Callable[[TCtx], tuple[float, float]], intensity_getter: Callable[[TCtx], float] = _default_intensity, wind_getter: Callable[[TCtx], float] = _default_wind, viewport_getter: Callable[[TCtx], tuple[float, float]] = _default_viewport, enabled_when: Callable[[TCtx], bool] = _default_enabled_when, seed: int = 4) ProceduralParticleBinding[TCtx][source]

Convenience preset for bubbling potion/fume emitters.

class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticleSimulationSystem[source]

Bases: Generic[TCtx]

Spawn and simulate particles for one or more emitters.

name: str = 'procedural_particle_simulation'
phase: int
order: int = 32
bindings: tuple[ProceduralParticleBinding[TCtx], Ellipsis] = ()
__post_init__() None[source]
step(ctx: TCtx) None[source]

Advance emitter state, cull dead particles, and spawn new ones.

class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticleRenderSystem[source]

Bases: Generic[TCtx]

Render procedural particles using primitive circles.

name: str = 'procedural_particle_render'
phase: int
order: int = 105
bindings: tuple[ProceduralParticleBinding[TCtx], Ellipsis] = ()
step(ctx: TCtx) None[source]

Build a render packet with draw calls for all particles from all emitters, sorted back-to-front by Y coordinate.

Parameters:

ctx (TCtx) – The current scene context, which must have a packet attribute that is a RenderPacket or None.

class mini_arcade_core.scenes.systems.builtins.particles.ProceduralParticleBundle[source]

Bases: mini_arcade_core.scenes.systems.SystemBundle[TCtx]

Compose simulation and render systems for one or more procedural emitters.

bindings: tuple[ProceduralParticleBinding[TCtx], Ellipsis] = ()
simulation_name: str = 'procedural_particle_simulation'
simulation_phase: int
simulation_order: int = 32
render_name: str = 'procedural_particle_render'
render_phase: int
render_order: int = 105
__post_init__() None[source]
iter_systems() Iterable[object][source]

Return the concrete systems that should be added to the pipeline.