mod hook;
pub mod reload;
use bevy::{ecs::system::SystemParam, prelude::*, scene::scene_spawner_system};
pub use hook::{run_hooks, SceneHook, SceneHooked};
#[cfg(doctest)]
#[doc = include_str!("../Readme.md")]
pub struct TestReadme;
#[derive(Bundle)]
#[allow(missing_docs /* field description is trivial */)]
pub struct HookedSceneBundle {
pub hook: SceneHook,
pub scene: SceneBundle,
}
#[derive(Bundle)]
#[allow(missing_docs /* field description is trivial */)]
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> {
#[must_use]
pub fn is_loaded(&self) -> bool {
self.query.iter().next().is_some()
}
}
#[allow(clippy::must_use_candidate)]
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(
SpawnScene,
run_hooks
.in_set(Systems::SceneHookRunner)
.after(scene_spawner_system),
);
}
}