Skip to main content

fantasy_craft/graphics/tiled_map/
components.rs

1use hecs::Entity;
2use serde::Deserialize;
3use serde_json::Value;
4
5use crate::scene::scene_loader::ComponentLoader;
6
7#[derive(Debug)]
8pub struct TileMapComponent(pub String);
9
10pub struct TileMapComponentLoader;
11
12impl ComponentLoader for TileMapComponentLoader {
13    fn load(&self, ctx: &mut crate::prelude::Context, entity: Entity, data: &Value) {
14        let map_name: String = serde_json::from_value(data.clone())
15            .unwrap_or_default();
16
17        let component = TileMapComponent(map_name);
18
19        ctx.world.insert_one(entity, component).expect("Failed to insert TileMapComponent");
20    }
21}
22
23#[derive(Debug)]
24pub struct TileMapLayerComponent {
25    pub tilemap_name: String,
26    pub layer_name: String
27}
28
29#[derive(Deserialize, Debug, Default)]
30struct TileMapLayerComponentLoaderData {
31    #[serde(default)]
32    pub tilemap_name: String,
33
34    #[serde(default)]
35    pub layer_name: String
36}
37
38pub struct TileMapLayerComponentLoader;
39
40impl ComponentLoader for TileMapLayerComponentLoader {
41    fn load(&self, ctx: &mut crate::prelude::Context, entity: Entity, data: &Value) {
42        let loader_data: TileMapLayerComponentLoaderData = serde_json::from_value(data.clone())
43            .unwrap_or_default();
44
45        let component = TileMapLayerComponent {
46            tilemap_name: loader_data.tilemap_name,
47            layer_name: loader_data.layer_name
48        };
49
50        ctx.world.insert_one(entity, component).expect("Failed to insert TileMapLayerComponent");
51    }
52}
53
54#[derive(Debug)]
55pub struct MainTileMap;
56
57pub struct MainTileMapLoader;
58
59impl ComponentLoader for MainTileMapLoader {
60    fn load(&self, ctx: &mut crate::prelude::Context, entity: Entity, _data: &Value) {
61        ctx.world.insert_one(entity, MainTileMap).expect("Failed to insert MainTileMap");
62    }
63}