Overview
muds
is a minimalistic data structure library for data-oriented design in high-performance, realtime applications such as games. It provides a collections library with data structures that support generational indices as key, and an entity-component-system (ECS) library built on top of it.
Highlights
- Flexible and extensible generational-index ECS model
- Supports multiple entity types akin to a relational database, with type-safe entity IDs
- Custom storage type for entities and components
- Cross-platform; compatible with
no_std
and WASM build. Defaults to f64 generational indices for interop with JS from WASM. - Minimal size, minimal dependencies, good performance
- Library, not framework. Unlike other ECS with
System
scheduler / dispatcher,muds
does not take control of your program flow. - Uses cons to perform type-level recursion elegantly, instead of using macros to implement for tuples of fixed lengths, as seen in other ECS libraries.
Install
[]
= "0.1"
Features:
std
- enablesstd
support. enabled by default.serde
- enablesserde
serialize/deserialize implementations of collections and indicesderive
- enables#[derive(Entity)]
and#[derive(Component)]
macrosindex-u64
- usesIndexU64
as the generational index type for ECS instead of the defaultIndexF64
Documentation
See Docs.rs: https://docs.rs/muds
Usage
Below is a sample usage of the ECS library. See benches for more examples.
use *;
use SparseSetStorage;
// 1. Defines the entity and components.
;
;
// `#[storage(S)]` can be used to customize the entity / component storage type.
;
// 2. Registers the entity-components archetype to registry.
let mut registry = default;
registry.>;
// 3. Insert entities/components to mut storage.
// registry.storage returns cons of collection types.
// Each entity/component storage can be retrieved either as immutable (&C) or mutable (&mut C).
// 4. Storages are just standard Map types that can be iterated.
// Use MapJoin trait to jointly iterate components as cons.
License
This repository and the code inside it is licensed under the MIT License. Read LICENSE for more information.