#events #bevy #utility-macro #macro #utility

bevy_event_set

为Bevy创建事件束的宏

3个不稳定版本

0.2.0 2021年2月12日
0.1.1 2021年2月11日
0.1.0 2021年2月11日

1888游戏开发

MIT 许可证

7KB
73

bevy_event_set

为Bevy 0.4创建事件束的宏

Crates.io GitHub

Bevy当前的标准做法是声明枚举类型的事件。这对于许多用例来说是不错的,但在某些情况下,你希望在系统中监听单个事件的同时,仍然能够轻松地发送多种类型的事件(例如,在解析用户输入时)。

使用 event_set 宏,你可以创建一个事件集,允许你发送多种事件类型。

设置

将crate添加到你的 Cargo.toml 依赖项中

[dependencies]
bevy_event_set = "0.1"

Bevy 0.4的一个子crate中的错误阻止了这个crate正常工作。将以下补丁添加到你的 Cargo.toml 以应用修复

[patch.crates-io]
bevy_ecs_macros = { git = "https://github.com/woubuc/bevy", branch = "fix/ecs-macro-systemparam-0.4" }

这个错误在Bevy的PR #1434 中已修复。

使用方法

use bevy::prelude::*;
use bevy_event_set::*;

// Define your events
struct EventOne;
struct EventTwo;
struct EventThree(usize);

// Create an event set named `MyEvents`
event_set!(MyEvents { EventOne, EventTwo, EventThree });

// Use the event set in a system
fn event_emitter_system(mut events: MyEvents) {
    events.send(EventOne);
    events.send(EventTwo);
    events.send(EventThree(42));
}

// Subscribe to events selectively in different systems
fn event_one_listener_system(events: Res<Events<EventOne>>) { }
fn event_two_listener_system(events: Res<Events<EventTwo>>) { }
fn event_three_listener_system(events: Res<Events<EventThree>>) { }

// Add the event set to your app
App::build()
    .add_event_set::<MyEvents>();

注意

  • 支持Bevy 0.4
  • 基本可行,但请注意,代码非常基础
  • 欢迎贡献以使其更具可扩展性/用户友好性

依赖项

~15–24MB
~365K SLoC