bevy-undo2 0.0.1

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

bevy-undo2

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

License: MIT/Apache

Crate

Examples

examples/simple.rs


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();
    }
}

examples/callback.rs

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


fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(UndoPlugin)
        .add_systems(Startup, setup)
        .add_systems(Update, keyboard_input_system)
        .run();
}


fn setup(
    mut commands: Commands,
    mut scheduler: UndoCallbackScheduler,
    asset: Res<AssetServer>,
) {
    commands.spawn(Camera2dBundle::default());
    let text = commands
        .spawn(Text2dBundle {
            text: Text::from_section("Please Press [R]: Delete text", TextStyle {
                font: asset.load("fonts/FiraSans-Bold.ttf"),
                font_size: 31.,
                ..default()
            }),
            ..default()
        })
        .id();

    scheduler.register(move |cmd| {
        cmd.entity(text).despawn();
    });
}


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

Compatible Bevy versions

this crate bevy
0.0.1 0.11.0