Skip to main content

FrameClock

Struct FrameClock 

Source
pub struct FrameClock { /* private fields */ }
Expand description

A fixed-timestep accumulator.

Feed elapsed wall time with advance, then call tick in a loop to drain whole logic steps. Use alpha to interpolate rendering between logic frames.

See the 08_animation example for FrameClock in action: https://main.retroglyph.dev/examples/08_animation/terminal/.

Implementations§

Source§

impl FrameClock

Source

pub fn new(hz: u32) -> Self

Create an accumulator targeting hz logic updates per second.

Catch-up is capped at five steps per frame to avoid a “spiral of death” when logic temporarily runs slower than real time.

hz above roughly 1e9 rounds 1.0 / hz below Duration’s 1ns resolution; the step is floored at 1ns instead of letting it round down to zero, which would otherwise make tick return true forever (nothing is ever deducted from the accumulator) and alpha divide by zero.

§Panics

Panics if hz is zero.

Source

pub const fn step(&self) -> Duration

The fixed timestep duration.

Source

pub fn advance(&mut self, dt: Duration)

Add elapsed wall time to the accumulator, clamped to the catch-up cap.

Call once per rendered frame with Frame::delta.

Source

pub fn tick(&mut self) -> bool

Consume one fixed step if enough time has accumulated.

Returns true when a logic step is due (and deducts it). Call in a loop until it returns false, then render:

clock.advance(Duration::from_millis(16));
while clock.tick() {
    // one fixed logic update
}
Source

pub fn alpha(&self) -> f64

Fraction of the next step already accumulated, in 0.0..1.0.

Multiply by the delta between the previous and current state to render an interpolated position between fixed logic frames.

Source

pub const fn reset(&mut self)

Reset the accumulator. Call after a pause to avoid a burst of catch-up steps on the next frame.

Trait Implementations§

Source§

impl Clone for FrameClock

Source§

fn clone(&self) -> FrameClock

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FrameClock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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> 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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.