//! Entity Component System module.
//!
//! Contains all ECS-related functionality:
//! - Components: Data attached to entities (transforms, meshes, materials, etc.)
//! - Resources: Global singletons (input, graphics settings, caches)
//! - Systems: Logic operating on components
//! - Commands: Deferred operations for spawning and loading
//!
//! The [`World`] struct is the central container generated by `freecs::ecs!`.
//! Components use struct-of-arrays storage accessed via:
//! - `world.core.get_<component>(entity)` - Immutable reference
//! - `world.core.get_<component>_mut(entity)` - Mutable reference
//! - `world.insert_<component>(entity, value)` - Add component
//! - `world.core.remove_<component>(entity)` - Remove component

pub mod animation;
pub mod asset_id;
pub mod asset_state;
#[cfg(all(
    feature = "assets",
    feature = "file_watcher",
    not(target_arch = "wasm32")
))]
pub mod asset_watcher;
pub mod audio;
pub mod bounding_volume;
pub mod camera;
pub mod cloth;
pub mod cutscene;
pub mod entity_registry;
#[cfg(all(feature = "file_watcher", not(target_arch = "wasm32")))]
pub mod file_watcher;

pub mod decal;
pub mod event_bus;
pub mod generational_registry;
#[cfg(feature = "gizmos")]
pub mod gizmos;
pub mod gpu_picking;
pub mod graphics;
pub mod input;
pub mod light;
pub mod lines;
pub mod loading;
pub mod material;
pub mod mesh;
pub mod morph;
pub mod navmesh;
pub mod particles;
pub mod physics;
#[cfg(feature = "picking")]
pub mod picking;
pub mod prefab;
pub mod primitives;
#[cfg(feature = "scene_graph")]
pub mod scene;
pub mod skin;
pub mod sync;
pub mod text;
#[cfg(feature = "assets")]
pub mod texture_loader;
pub mod transform;
pub mod ui;
pub mod window;
pub mod world;

pub use crate::ecs::world::*;
