From c904d73059dc10b8099ca0ffb2ca8585f5dfb22d Mon Sep 17 00:00:00 2001 From: extrawurst Date: Sun, 3 Nov 2024 20:56:27 +0100 Subject: [PATCH] docs and fixes --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 +++++- src/lib.rs | 6 ++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d9c2c0c..ec02145 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,7 +108,7 @@ dependencies = [ [[package]] name = "bevy_channel_trigger" -version = "0.1.1" +version = "0.1.2" dependencies = [ "bevy", "flume", diff --git a/Cargo.toml b/Cargo.toml index 7a81031..d40b1cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_channel_trigger" -version = "0.1.1" +version = "0.1.2" edition = "2021" authors = ["Rustunit "] categories = ["game-development"] diff --git a/README.md b/README.md index 492b6f5..6820a8d 100644 --- a/README.md +++ b/README.md @@ -4,5 +4,9 @@ [![crates.io](https://img.shields.io/crates/v/bevy_channel_trigger)](https://crates.io/crates/bevy_channel_trigger) [![docs.rs](https://docs.rs/bevy_channel_trigger/badge.svg)](https://docs.rs/bevy_channel_trigger) -Send events via a channels form anywhere (eg. web-dom, c-ffi) to Bevy Observers. +Send events via a channel from anywhere (eg. web-dom, c-ffi) to Bevy Observers. Inspired by [bevy_crossbeam_event](https://github.com/johanhelsing/bevy_crossbeam_event) but using [flume](https://github.com/zesterer/flume) instead of `crossbeam` as the underlying efficient unbounded channel and delivering the events via Bevy Observers instead of `EventReader`. Furthermore we lint to be guaranteed panic free. + +Example uses: + +* [bevy_web_drop_image_as_sprite](https://github.com/rustunit/bevy_web_drop_image_as_sprite) \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 376ec89..8fca307 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,12 @@ use bevy::{ecs::event::Event, prelude::*}; use flume::{Receiver, Sender, TryRecvError}; +/// channel sender to share with multiple producers and offering a simple `send` function #[derive(Resource, Clone, Debug)] pub struct ChannelSender(Sender); impl ChannelSender { + /// send `event` to our central receiver that forwards them as triggers that can be observed pub fn send(&self, event: impl Into) { let event = event.into(); if let Err(err) = self.0.send(event) { @@ -16,7 +18,11 @@ impl ChannelSender { #[derive(Resource)] struct EventReceiver(Receiver); +/// Extension to Bevy `App` that allows ergonomic creation of the channel pub trait ChannelTriggerApp { + /// Spawns a channel registers the receiver as a resource and returns the `ChannelSender` + /// This sender can be used from anywhere to send events into the Bevy world. + /// These triggers can be subscribed to via `app.observe`. fn add_channel_trigger(&mut self) -> ChannelSender; }