Crates.io | bevy-undo2 |
lib.rs | bevy-undo2 |
version | 0.1.0 |
source | src |
created_at | 2023-08-14 17:18:42.012561 |
updated_at | 2023-08-20 15:44:38.430166 |
description | This crate makes it easy to use the undo-operation on bevy |
homepage | |
repository | https://github.com/elm-register/bevy-undo2 |
max_upload_size | |
id | 944377 |
size | 574,883 |
This crate makes it easy to use the undo-operation on bevy.
use bevy::prelude::*;
use bevy_undo2::prelude::*;
#[derive(Event, Clone)]
struct GreetEvent(String);
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(UndoPlugin)
.add_systems(Startup, setup)
.add_systems(Update, (keyboard_input_system, read_undo_event_system))
.add_undo_event::<GreetEvent>()
.run();
}
fn setup(
mut commands: Commands,
mut scheduler: UndoScheduler<GreetEvent>,
asset: Res<AssetServer>
) {
commands.spawn(Camera2dBundle::default());
commands.spawn(Text2dBundle{
text: Text::from_section("Please Press [R]", TextStyle{
font: asset.load("fonts/FiraSans-Bold.ttf"),
font_size: 31.,
..default()
}),
..default()
});
scheduler.register(GreetEvent("Undo!".to_string()));
}
fn keyboard_input_system(
mut requester: UndoRequester,
key: Res<Input<KeyCode>>,
) {
if key.pressed(KeyCode::R) {
requester.undo();
}
}
fn read_undo_event_system(
mut er: EventReader<GreetEvent>,
mut text: Query<&mut Text>
) {
for GreetEvent(message) in er.iter() {
text.single_mut().sections[0].value = message.clone();
}
}
Callbacks can also be registered by using UndoCallbackEvent
, which is built in by default.
fn setup(
mut scheduler: UndoScheduler<UndoCallbackEvent>
) {
let entity: Enity;
scheduler.register(UndoCallbackEvent::new(move |cmd| {
cmd.entity(text).despawn();
}));
}
It is possible to send multiple events with single call undo
by placing in the reserved area.
See below for an example:
this crate | bevy |
---|---|
0.0.1 | 0.11.0 |