pub mod components;
pub mod types;
#[cfg(feature = "physics")]
pub mod bundles;
#[cfg(feature = "physics")]
pub mod camera_collision;
#[cfg(feature = "physics")]
pub mod character_controller;
#[cfg(feature = "physics")]
pub mod collision_events;
#[cfg(feature = "physics")]
pub mod commands;
#[cfg(all(feature = "physics", feature = "debug_render"))]
pub mod debug;
#[cfg(feature = "physics")]
pub mod events;
#[cfg(feature = "physics")]
pub mod foot_ik;
#[cfg(feature = "physics")]
pub mod geometry;
#[cfg(feature = "physics")]
pub mod joints;
#[cfg(feature = "physics")]
pub mod picking;
#[cfg(all(feature = "physics", feature = "scene_graph"))]
pub mod prefab;
#[cfg(feature = "physics")]
pub mod ragdoll;
#[cfg(feature = "physics")]
pub mod resources;
#[cfg(all(feature = "physics", feature = "scene_graph"))]
pub mod scene;
#[cfg(feature = "physics")]
pub mod schema;
#[cfg(feature = "physics")]
pub mod snapshot;
#[cfg(feature = "physics")]
pub mod systems;
pub use components::*;
pub use types::*;
#[cfg(feature = "physics")]
pub use character_controller::*;
#[cfg(feature = "physics")]
pub use commands::*;
#[cfg(all(feature = "physics", feature = "debug_render"))]
pub use debug::*;
#[cfg(feature = "physics")]
pub use events::*;
#[cfg(feature = "physics")]
pub use joints::*;
#[cfg(feature = "physics")]
pub use resources::*;
#[cfg(feature = "physics")]
pub use schema::physics_component_world;
#[cfg(feature = "physics")]
pub use systems::*;
#[cfg(feature = "physics")]
pub fn install(world: &mut crate::ecs::world::World) {
if world.ecs.resource::<PhysicsWorld>().is_none() {
world.ecs.insert_resource(PhysicsWorld::default());
}
world.plugin_resource_mut::<PhysicsWorld>().enabled = true;
}
#[cfg(feature = "physics")]
pub fn register_frame_systems(stages: &mut nightshade_ecs::Stages<crate::ecs::world::World>) {
use crate::app::{Stage, push_frame_system};
push_frame_system(stages, Stage::FrameUpdate, systems::run_physics_systems);
push_frame_system(
stages,
Stage::FrameUpdate,
collision_events::emit_collision_events_system,
);
push_frame_system(stages, Stage::FramePostUpdate, ragdoll::ragdoll_sync_system);
}
#[cfg(feature = "physics")]
pub struct PhysicsPlugin;
#[cfg(feature = "physics")]
impl crate::app::Plugin for PhysicsPlugin {
fn build(&self, app: &mut crate::app::App) {
app.world
.insert_resource(crate::plugins::physics::resources::PhysicsWorld::default());
app.world
.insert_resource(crate::plugins::physics::picking::resources::PickingWorld::default());
install(&mut app.world);
camera_collision::install_camera_collision(&mut app.world);
foot_ik::install_foot_ik_ground_query(&mut app.world);
#[cfg(feature = "scene_graph")]
scene::register_scene_hooks(&mut app.world);
#[cfg(feature = "scene_graph")]
prefab::register_prefab_hooks(&mut app.world);
snapshot::register_snapshot_capability(&mut app.world);
register_frame_systems(&mut app.stages);
}
}