#bevy #undo #gamedev #game

bevy-undo2

这个包使得在bevy上使用撤销操作变得简单。

4个版本

0.1.0 2023年8月20日
0.0.3 2023年8月19日
0.0.2 2023年8月14日
0.0.1 2023年8月14日

2186游戏开发

每月下载量 35

MIT/Apache

465KB
481

bevy-undo2

这个包使得在 bevy 上使用撤销操作变得简单。

License: MIT/Apache Crate

示例

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

回调

也可以通过使用默认内置的 UndoCallbackEvent 来注册回调。

examples/callback.rs

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

预留区域

可以在预留区域通过单个调用 undo 发送多个事件。

以下是一个示例

examples/reserve.rs

兼容的Bevy版本

这个包 bevy
0.0.1 0.11.0

依赖

~18–28MB
~418K SLoC