iyes_loopless 0.9.1

Composable alternatives to Bevy's States/FixedTimestep/RunCriteria
Documentation
use bevy::{prelude::*, window::PresentMode};
use bevy_utils::{Duration, Instant};
use iyes_loopless::prelude::*;

fn main() {
    let mut app = App::new();
    app.add_plugins(
        DefaultPlugins
        .set(WindowPlugin {
          window: WindowDescriptor {
            present_mode: PresentMode::Fifo,
            ..default()
          },
          ..default()
        })
    );
    app.add_fixed_timestep(Duration::from_secs_f64(1.0 / 60.0), "fix");
    // app.get_fixed_timestep_stage_mut("fix").set_rate_lock(5, 0.125);
    app.add_fixed_timestep_system("fix", 0, print_timestep);
    app.add_system(print_dt);
    app.run();
}

fn print_timestep(
    t: Res<Time>, mut last: Local<Option<Instant>>
) {
    if let (Some(last), Some(this)) = (*last, t.last_update()) {
        println!("ts: {:?}", this - last);
    }
    *last = t.last_update();
}

fn print_dt(t: Res<Time>) {
    println!("dt {:?}", t.delta());
}