fantasy-craft 0.0.2

A 2D / 2.5D game engine built on top of Macroquad and Hecs for the Foxvoid Ecosystem
Documentation
use hecs::{Entity, World};
use macroquad::math::{Vec2, vec2};

use crate::scene::scene_loader::ComponentLoader;

#[derive(Debug)]
pub struct Parent(pub Entity);

pub fn find_children(world: &World, parent_id: Entity) -> Vec<Entity> {
    world.query::<&Parent>()
        .iter()
        .filter_map(|(child_entity, parent_component)| {
            if parent_component.0 == parent_id {
                Some(child_entity)
            } else {
                None
            }
        })
        .collect()
}

#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct LocalOffset(pub Vec2);

pub struct LocalOffsetLoader;

impl ComponentLoader for LocalOffsetLoader {
    fn load(&self, ctx: &mut crate::prelude::Context, entity: Entity, data: &serde_json::Value) {
        let (x, y): (f32, f32) = serde_json::from_value(data.clone())
            .unwrap_or((0.0, 0.0));

        let component = LocalOffset(vec2(x, y));

        ctx.world.insert_one(entity, component).expect("Failed to insert LocalOffset");
    }
}