6 releases
0.0.5 | May 11, 2024 |
---|---|
0.0.4 | May 8, 2024 |
0.0.3 | Apr 23, 2024 |
0.0.0 | Oct 9, 2021 |
#827 in Game dev
56KB
551 lines
Xanadu
A toy ECS library; works on Windows, macOS, Linux and WebAssembly.
Benchmark
Usage
use xanadu::ecs::{Mut, World};
#[repr(C)]
#[derive(Debug, Default, Clone, Copy, bytemuck::Pod, bytemuck::Zeroable, PartialEq)]
pub struct Position {
pub x: f64,
pub y: f64,
pub z: f64,
}
fn main() {
let mut world = World::builder().register_component::<Position>().build();
for i in 0..5 {
let entity = world.new_entity();
world.attach_component(
entity,
Position {
x: i as f64,
y: i as f64,
z: i as f64,
},
);
}
world.execute::<'_, Position, _>(&print_system);
world.execute::<'_, Mut<Position>, _>(&shuffle_system);
world.execute::<'_, Mut<Position>, _>(&increment_system);
world.execute::<'_, Mut<Position>, _>(&shuffle_system);
println!("Shuffled and incremented");
world.execute::<'_, Position, _>(&print_system);
}
fn print_system(pos: &Position) {
println!("Pos: [{}, {}, {}]", pos.x, pos.y, pos.z);
}
fn shuffle_system(pos: &mut Position) {
let tmp = pos.x;
pos.x = pos.y;
pos.y = pos.z;
pos.z = tmp;
}
fn increment_system(pos: &mut Position) {
pos.x += 1.0;
pos.y += 2.0;
pos.z += 3.0;
}
Tests
cargo t --workspace
wasm-pack test --node
wasm-pack test --firefox --headless -- --features test_in_browser
Dependencies
~0.4–0.8MB
~18K SLoC