Crates.io | zcomponents |
lib.rs | zcomponents |
version | 0.2.0 |
source | src |
created_at | 2018-08-09 12:49:57.198622 |
updated_at | 2021-06-17 16:39:08.971994 |
description | ZComponents is a stupid component storage |
homepage | https://github.com/ozkriff/zemeroth/tree/master/zcomponents |
repository | https://github.com/ozkriff/zemeroth |
max_upload_size | |
id | 78506 |
size | 21,309 |
ZComponents
- a stupid component storageI 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.
use zcomponents::zcomponents_storage;
#[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.
It's implemented as a simple macro and a bunch of naive HashMap
s
so don't expect any outstanding performance.