1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#![allow(clippy::missing_safety_doc)]
#![allow(clippy::module_inception)]
#![allow(clippy::needless_doctest_main)]
#![allow(clippy::unused_unit)]

//! Sparsey is a sparse set-based Entity Component System with lots of features
//! and nice syntax \~( ˘▾˘\~)
//! ```
//! use sparsey::prelude::*;
//!
//! struct Position(f32, f32);
//! struct Velocity(f32, f32);
//!
//! fn main() {
//!     let mut world = World::default();
//!     world.register::<Position>();
//!     world.register::<Velocity>();
//!
//!     world.create((Position(0.0, 0.0), Velocity(1.0, 2.0)));
//!     world.create((Position(0.0, 0.0), Velocity(3.0, 4.0)));
//!     
//!     let mut positions = world.borrow_mut::<Position>();
//!     let velocities = world.borrow::<Velocity>();
//!
//!     (&mut positions, &velocities).for_each(|(position, velocity)| {
//!         position.0 += velocity.0;
//!         position.1 += velocity.1;
//!     });
//! }
//! ```

pub mod components;
pub mod layout;
pub mod query;
pub mod resources;
pub mod storage;
pub mod systems;
pub mod world;

/// Re-exports the most commonly used items.
pub mod prelude {
    pub use crate::layout::{Layout, LayoutGroupDescriptor};
    pub use crate::query::{IntoEntityIter, Query, QueryFilters};
    pub use crate::resources::{Res, ResMut, Resources};
    pub use crate::storage::Entity;
    pub use crate::systems::Schedule;
    pub use crate::world::{Comp, CompMut, Entities, World};
}

pub(crate) mod utils;