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