mod hook;
pub mod reload;
use bevy::{ecs::system::SystemParam, prelude::*};
pub use hook::{run_hooks, SceneHook, SceneHooked};
#[derive(Bundle)]
pub struct HookedSceneBundle {
pub hook: SceneHook,
pub scene: SceneBundle,
}
#[derive(Bundle)]
pub struct HookedDynamicSceneBundle {
pub hook: SceneHook,
pub scene: DynamicSceneBundle,
}
#[derive(SystemParam)]
pub struct HookedSceneState<'w, 's, M: Component> {
query: Query<'w, 's, (), (With<M>, With<SceneHooked>)>,
}
impl<'w, 's, T: Component> HookedSceneState<'w, 's, T> {
pub fn is_loaded(&self) -> bool {
self.query.iter().next().is_some()
}
}
pub fn is_scene_hooked<M: Component>(state: HookedSceneState<M>) -> bool {
state.is_loaded()
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, SystemSet)]
pub enum Systems {
SceneHookRunner,
}
pub struct HookPlugin;
impl Plugin for HookPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Update, run_hooks.in_set(Systems::SceneHookRunner));
}
}