Crates.io | xanadu |
lib.rs | xanadu |
version | 0.0.5 |
source | src |
created_at | 2021-10-09 01:01:05.40475 |
updated_at | 2024-05-11 08:29:56.588823 |
description | A toy ECS library |
homepage | |
repository | https://github.com/yuma140902/xanadu |
max_upload_size | |
id | 462594 |
size | 81,465 |
A toy ECS library; works on Windows, macOS, Linux and WebAssembly.
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;
}
cargo t --workspace
wasm-pack test --node
wasm-pack test --firefox --headless -- --features test_in_browser