Crates.io | bevy_mod_actuate |
lib.rs | bevy_mod_actuate |
version | 0.4.1 |
source | src |
created_at | 2024-11-19 02:13:54.892984 |
updated_at | 2024-11-24 02:45:47.383791 |
description | A reactive user-interface framework |
homepage | |
repository | https://github.com/actuate-rs/bevy_mod_actuate |
max_upload_size | |
id | 1452827 |
size | 180,549 |
Declarative scenes and reactivity for Bevy powered by Actuate.
use actuate::prelude::{*, Mut};
use bevy::prelude::*;
use bevy_mod_actuate::prelude::*;
// Timer composable.
#[derive(Data)]
struct Timer;
impl Compose for Timer {
fn compose(cx: Scope<Self>) -> impl Compose {
let current_time = use_mut(&cx, Time::default);
// Use the `Time` resource from the ECS world, updating the `current_time`.
use_world(&cx, move |time: Res<Time>| Mut::set(current_time, *time));
// Spawn a `Text` component, updating it when this scope is re-composed.
spawn(Text::new(format!("Elapsed: {:?}", current_time.elapsed())))
}
}
fn main() {
App::new()
.add_plugins((DefaultPlugins, ActuatePlugin))
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera2d::default());
// Spawn a composition with a `Timer`, adding it to the Actuate runtime.
commands.spawn(Composition::new(Timer));
}