#bevy #events #channel #crossbeam #gamedev #callback #fire

bevy_crossbeam_event

从 crossbeam 通道触发 Bevy 事件

5 个版本 (破坏性更新)

0.6.0 2024年7月10日
0.5.0 2024年2月23日
0.3.0 2023年11月7日
0.2.0 2023年7月10日
0.1.0 2023年3月10日

#1007 in 游戏开发

Download history 6/week @ 2024-04-22 71/week @ 2024-04-29 134/week @ 2024-05-06 22/week @ 2024-05-13 127/week @ 2024-05-20 16/week @ 2024-05-27 85/week @ 2024-06-03 24/week @ 2024-06-10 60/week @ 2024-06-17 19/week @ 2024-06-24 181/week @ 2024-07-08 15/week @ 2024-07-15 2/week @ 2024-07-22 33/week @ 2024-07-29 13/week @ 2024-08-05

71 个月下载量
4 crates 中使用

MIT/Apache

7KB

bevy_crossbeam_event

crates.io MIT/Apache 2.0 crates.io docs.rs

从 crossbeam 通道触发 Bevy 事件。

如果您需要处理第三方库中的回调等,例如 steamworks-rs,或从 tracing 层获取事件,这将很有用。

用法

使用 .add_crossbeam_event::<EventType> 将事件添加到您的应用程序中

#[derive(Clone, Debug)]
struct LobbyJoined(Lobby);

impl Plugin for MyPlugin {
    fn build(&self, app: &mut App) {
        app.add_crossbeam_event::<LobbyJoined>();
        app.add_startup_system(setup);
        app.add_system(handle_lobby_joined);
    }
}

通过使用 Res<CrossbeamEventSender<EventType>> 触发事件(这可以克隆并发送到回调中)

fn setup(service: Res<ThirdPartyCode>, sender: Res<CrossbeamEventSender<LobbyJoined>>) {
    let sender = sender.clone();
    service.join_lobby(id, move |lobby| {
        sender.send(LobbyJoined(lobby));
    });
}

像处理正常的 Bevy 事件一样处理事件(它们就是)

fn handle_lobby_joined(mut lobby_joined_events: EventReader<LobbyJoined>) {
    for lobby in lobby_joined_events.iter() {
        info!("lobby joined: {lobby:?}");
    }
}

Bevy 版本支持

main 分支针对最新的 bevy 发布版。

bevy bevy_crossbeam_event
0.14 0.6, main
0.13 0.5
0.12 0.3
0.11 0.2
0.10 0.1

许可证

bevy_crossbeam_event 可以根据您的选择使用以下许可证之一双许可:

贡献

欢迎 PR!

依赖关系

~23MB
~411K SLoC