fantasy_craft/hierarchy/
components.rs1use 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}