Skip to main content

fantasy_craft/hierarchy/
components.rs

1use hecs::{Entity, World};
2use macroquad::math::{Vec2, vec2};
3
4use crate::scene::scene_loader::ComponentLoader;
5
6#[derive(Debug)]
7pub struct Parent(pub Entity);
8
9pub fn find_children(world: &World, parent_id: Entity) -> Vec<Entity> {
10    world.query::<&Parent>()
11        .iter()
12        .filter_map(|(child_entity, parent_component)| {
13            if parent_component.0 == parent_id {
14                Some(child_entity)
15            } else {
16                None
17            }
18        })
19        .collect()
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Default)]
23pub struct LocalOffset(pub Vec2);
24
25pub struct LocalOffsetLoader;
26
27impl ComponentLoader for LocalOffsetLoader {
28    fn load(&self, ctx: &mut crate::prelude::Context, entity: Entity, data: &serde_json::Value) {
29        let (x, y): (f32, f32) = serde_json::from_value(data.clone())
30            .unwrap_or((0.0, 0.0));
31
32        let component = LocalOffset(vec2(x, y));
33
34        ctx.world.insert_one(entity, component).expect("Failed to insert LocalOffset");
35    }
36}