Skip to content

Instantly share code, notes, and snippets.

@IceSentry
Created June 2, 2025 18:20
Show Gist options
  • Save IceSentry/57cac87f21b2daf677c48286380d597f to your computer and use it in GitHub Desktop.
Save IceSentry/57cac87f21b2daf677c48286380d597f to your computer and use it in GitHub Desktop.
Extract events from main world to render world
use bevy::{
prelude::*,
render::{Extract, RenderApp},
};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_event::<FooEvent>()
.add_plugins(ExractEventPlugin)
.add_systems(Update, update)
.run();
}
#[derive(Event, Clone, Copy)]
struct FooEvent;
fn update(mut events: EventWriter<FooEvent>, time: Res<Time>, mut event_written: Local<bool>) {
if !*event_written && time.elapsed_secs() > 1.0 {
println!("write event in main world");
events.write(FooEvent);
*event_written = true;
}
}
struct ExractEventPlugin;
impl Plugin for ExractEventPlugin {
fn build(&self, app: &mut App) {
if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
render_app.add_systems(ExtractSchedule, extract_event);
}
}
}
fn extract_event(mut extracted_events: Extract<EventReader<FooEvent>>) {
for _ev in extracted_events.read() {
println!("event received in render world");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment