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
465KB
481 行
bevy-undo2
这个包使得在 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();
}
}
回调
也可以通过使用默认内置的 UndoCallbackEvent
来注册回调。
fn setup(
mut scheduler: UndoScheduler<UndoCallbackEvent>
) {
let entity: Enity;
scheduler.register(UndoCallbackEvent::new(move |cmd| {
cmd.entity(text).despawn();
}));
}
预留区域
可以在预留区域通过单个调用 undo
发送多个事件。
以下是一个示例
兼容的Bevy版本
这个包 | bevy |
---|---|
0.0.1 | 0.11.0 |
依赖
~18–28MB
~418K SLoC