xanadu

Crates.ioxanadu
lib.rsxanadu
version0.0.5
sourcesrc
created_at2021-10-09 01:01:05.40475
updated_at2024-05-11 08:29:56.588823
descriptionA toy ECS library
homepage
repositoryhttps://github.com/yuma140902/xanadu
max_upload_size
id462594
size81,465
yuma14 (yuma140902)

documentation

README

Xanadu

GitHub Actions Workflow Status Crates.io Version docs.rs

A toy ECS library; works on Windows, macOS, Linux and WebAssembly.

Benchmark

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
Commit count: 118

cargo fmt