feat: implement event handlers for OpenXR events so that plugins can handle events without needing to modify bevy_mod_openxr

Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
Schmarni
2024-11-29 23:45:02 +01:00
parent 58db782997
commit 5239700eca
4 changed files with 130 additions and 57 deletions

View File

@@ -1,12 +1,13 @@
use std::{mem, ptr};
use bevy::prelude::*;
use openxr::sys;
use openxr::{sys, Event};
use crate::{
next_chain::{OxrNextChainStructBase, OxrNextChainStructProvider},
openxr::exts::OxrEnabledExtensions,
openxr_session_available,
poll_events::{OxrEvent, OxrEventHandlerExt},
session::{OxrSessionCreateNextChain, OxrSessionCreateNextProvider},
};
@@ -20,6 +21,16 @@ impl Plugin for OxrOverlayPlugin {
First,
add_overlay_info_to_chain.run_if(openxr_session_available),
);
app.add_oxr_event_handler(handle_overlay_event);
}
}
fn handle_overlay_event(event: In<OxrEvent>, mut writer: EventWriter<OxrOverlaySessionEvent>) {
if let Event::MainSessionVisibilityChangedEXTX(event) = unsafe { event.get() } {
writer.send(OxrOverlaySessionEvent::MainSessionVisibilityChanged {
visible: event.visible(),
flags: event.flags(),
});
}
}