qmi 0.3.1

An extension of HECS that adds easy entity saving using Persy.
Documentation

crates.io docs.rs donate

Coverage Status

Usage

Quickstart

use qmi::Qmi;
use tempfile::tempdir;

pub fn main() -> anyhow::Result<()> {
    // Temporary file for the example
    let file = tempdir().unwrap();
    // `Qmi` is the ECS/DB manager object
    let mut qmi = Qmi::new(file.path().join("qmi.persy"))?;
    // Any (sized) datatype works fine as a component.
    // `Entity` is a handle that can be used to refer to that entity again later
    let entity = qmi.spawn(("hello".to_string(), 32, 5.0));
    // Entities can be queried immutably
    for (text, number) in qmi.query::<(&String, &u32)>().iter() {
        println!("Text: {}\nNumber: {}", text, number);
    }
    // It is possible to insert components after an entity has been spawned
    qmi.insert(entity, (-5,))?;
    // Entities can also be queried mutably.
    for (text, negative_number) in qmi.query_mut::<(&mut String, &i32)>() {
        println!("Text: {}\nNegative number: {}", text, negative_number);
        *text = "hello world".to_string();
        println!("Text: {}\nNegative number: {}", text, negative_number);
    }
    // Components can be loaded up one by one. They will be reassigned to the entity
    // that they belonged to, for consistency.
    qmi.save::<(String,)>()?;
    qmi.load::<(String,)>()?;
    Ok(())
}