Crates.io | world_dispatcher |
lib.rs | world_dispatcher |
version | 1.2.0 |
source | src |
created_at | 2020-12-21 14:39:07.922862 |
updated_at | 2021-05-14 16:16:51.497846 |
description | Provides the System part of a full ECS, along with a fast dispatcher and world container. |
homepage | |
repository | https://github.com/jojolepro/world_dispatcher/ |
max_upload_size | |
id | 325275 |
size | 54,289 |
Support an Open Source Developer! :hearts:
The system part of a full ECS (Entity-Component-System).
It also contains a World
structure, which holds the game data used by systems,
as well as the Dispatcher
that is used to execute systems in parallel and in
an optimised order.
Add the following to you Cargo.toml file:
world_dispatcher = "*"
Use it like so:
use world_dispatcher::*;
fn main() {
#[derive(Default)]
pub struct A;
let mut world = World::default();
let sys = (|_comps: &A| Ok(())).system();
let mut dispatch = DispatcherBuilder::new().add_system(sys).build(&mut world);
dispatch.run_seq(&world).unwrap();
dispatch.run_seq(&world).unwrap();
dispatch.run_seq(&world).unwrap();
assert!(world.get::<A>().is_ok());
}
It is also possible to convert most functions into systems.
There are five requirements for this:
Default
. If they don't, use
&/&mut Option<YourType>
instead.use world_dispatcher::*;
#[derive(Default)]
pub struct A;
#[derive(Default)]
pub struct B;
#[derive(Default)]
pub struct C;
pub struct D;
fn system_function(_a: &A, _b: &B, _c: &mut C, d: &mut Option<D>) -> SystemResult {
assert!(d.is_some());
Ok(())
}
fn main() {
let mut world = World::default();
// Will automatically create A, B, C, Option<D>::None inside of world.
let mut dispatch = DispatcherBuilder::new().add(system_function).build(&mut world);
// Let's assign a value to D.
*world.get_mut::<Option<D>>().unwrap() = Some(D);
dispatch.run_seq(&world).unwrap();
dispatch.run_seq(&world).unwrap();
dispatch.run_seq(&world).unwrap();
assert!(world.get::<Option<D>>().unwrap().is_some());
}
If you need more than 12 system parameters, there is a feature called big_systems
which will bump that limit to 22. First compilation time will be around 10
seconds if using it. Following compilations will be instant.