Skip to main content

ParticleSystem

Struct ParticleSystem 

Source
pub struct ParticleSystem<const N: usize> { /* private fields */ }
Expand description

Fixed-capacity particle system.

N is the maximum number of simultaneously live particles. Slots are reused in-place so spawning never allocates.

Implementations§

Source§

impl<const N: usize> ParticleSystem<N>

Source

pub fn new() -> Self

Create a new, empty system.

Source

pub fn spawn(&mut self, s: ParticleSpawn) -> bool

Spawn a particle. Returns true on success, false if the pool is at capacity (N particles already live).

Source

pub fn update(&mut self, dt: f32, gravity: Vector3<f32>)

Advance all particles by dt seconds.

gravity is applied uniformly to every particle’s velocity. Pass Vector3::zeros() to disable gravity for this system.

Source

pub fn active_count(&self) -> usize

Number of currently live particles.

Source

pub fn is_empty(&self) -> bool

true if no particles are live.

Source

pub fn iter_active(&self) -> impl Iterator<Item = &Particle>

Iterate over live particles (read-only).

Source

pub fn record<const MAX: usize>( &self, engine: &K3dengine, commands: &mut CommandBuffer<MAX>, ) -> usize

Record all live particles as camera-facing billboard quads into commands.

Each particle emits two DrawPrimitive::ColoredTriangleWithDepth commands. Billboard orientation uses world-up (0, 1, 0), which is correct for all but extreme pitch angles.

Returns the number of particles successfully projected and emitted. Particles that project behind the camera or outside the frustum are silently skipped.

Trait Implementations§

Source§

impl<const N: usize> Default for ParticleSystem<N>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<const N: usize> Freeze for ParticleSystem<N>

§

impl<const N: usize> RefUnwindSafe for ParticleSystem<N>

§

impl<const N: usize> Send for ParticleSystem<N>

§

impl<const N: usize> Sync for ParticleSystem<N>

§

impl<const N: usize> Unpin for ParticleSystem<N>

§

impl<const N: usize> UnsafeUnpin for ParticleSystem<N>

§

impl<const N: usize> UnwindSafe for ParticleSystem<N>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.