bevy-undo2

This crate makes it easy to use the undo-operation on bevy.

License: MIT/Apache Crate

Examples

examples/simple.rs

```rust

use bevy::prelude::; use bevy_undo2::prelude::;

[derive(Event, Clone)]

struct GreetEvent(String);

fn main() { App::new() .addplugins(DefaultPlugins) .addplugins(UndoPlugin) .addsystems(Startup, setup) .addsystems(Update, (keyboardinputsystem, readundoeventsystem)) .addundo_event::() .run(); }

fn setup( mut commands: Commands, mut scheduler: UndoScheduler, asset: Res ) { commands.spawn(Camera2dBundle::default()); commands.spawn(Text2dBundle{ text: Text::fromsection("Please Press [R]", TextStyle{ font: asset.load("fonts/FiraSans-Bold.ttf"), fontsize: 31., ..default() }), ..default() }); scheduler.register(GreetEvent("Undo!".to_string())); }

fn keyboardinputsystem( mut requester: UndoRequester, key: Res>, ) { if key.pressed(KeyCode::R) { requester.undo(); } }

fn readundoeventsystem( mut er: EventReader, mut text: Query<&mut Text> ) { for GreetEvent(message) in er.iter() { text.singlemut().sections[0].value = message.clone(); } } ```

Callback

Callbacks can also be registered by using UndoCallbackEvent, which is built in by default.

examples/callback.rs

rust fn setup( mut scheduler: UndoScheduler<UndoCallbackEvent> ) { let entity: Enity; scheduler.register(UndoCallbackEvent::new(move |cmd| { cmd.entity(text).despawn(); })); }

Reserved Area

It is possible to send multiple events with single call undo by placing in the reserved area.

See below for an example:

examples/reserve.rs

Compatible Bevy versions

| this crate | bevy | |------------|--------| | 0.0.1 | 0.11.0 |