Skip to content
Tree: 7a1a957b3c
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
src
Cargo.toml
README.md

README.md

ZComponents - a stupid component storage

Crates.io Docs.rs

I find "serious" ECS to be an overkill for turn-based game logic, so I've created this simple library that does only one thing: stores your components.

Basic Example

#[macro_use]
extern crate zcomponents;

#[derive(PartialEq, Eq, Clone, Copy, Debug, Hash, Default)]
pub struct Id(i32);

#[derive(Clone, Debug)]
pub struct SomeComponent(pub i32);

#[derive(Clone, Debug)]
pub struct SomeFlag;

zcomponents_storage!(Storage<Id>: {
    component: SomeComponent,
    flag: SomeFlag,
});

let mut storage = Storage::new();

let id0 = storage.alloc_id();
storage.component.insert(id0, SomeComponent(0));

let id1 = storage.alloc_id();
storage.component.insert(id1, SomeComponent(1));
storage.flag.insert(id1, SomeFlag);

storage.component.get_mut(id0).0 += 1;

if let Some(component) = storage.component.get_opt_mut(id1) {
    component.0 += 1;
}

storage.flag.remove(id1);

storage.remove(id0);

See a more advanced example in crate's documentation.

Implementation

It's implemented as a simple macro and a bunch of naive HashMaps so don't expect any outstanding performance.

You can’t perform that action at this time.