use std::time::Duration;
use bevy::prelude::*;
use iyes_progress::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.init_state::<MyStates>()
.add_plugins(
ProgressPlugin::<MyStates>::new()
.auto_clear(false, true)
.with_state_transition(MyStates::Loading, MyStates::Done),
)
.add_systems(OnEnter(MyStates::Loading), spawn_background_work)
.add_systems(OnEnter(MyStates::Done), move || {
info!("Loading complete!");
})
.run();
}
#[derive(States, Default, Debug, Clone, Copy, PartialEq, Eq, Hash)]
enum MyStates {
#[default]
Loading,
Done,
}
fn spawn_background_work(
mut pt: ResMut<ProgressTracker<MyStates>>,
) {
let sender = pt.new_async_entry();
pt.set_total(sender.id(), 1);
std::thread::spawn(move || {
std::thread::sleep(Duration::from_secs(5));
sender.set_done(1);
});
}