1use serde::Deserialize;
16use std::collections::HashMap;
17
18use crate::{
19 layer::Layer,
20 parsers::{parse_color, parse_property},
21 tile_set::TileSet,
22 Color, TiledValue,
23};
24
25#[derive(Deserialize, Debug, PartialEq, Clone)]
27pub struct Map {
28 #[serde(
29 rename(deserialize = "backgroundcolor"),
30 deserialize_with = "parse_color",
31 default
32 )]
33 pub background_color: Color,
35 #[serde(rename(deserialize = "hexsidelength"))]
37 pub hex_side_length: Option<u32>,
38 #[serde(default)]
40 pub infinite: bool,
41 pub layers: Vec<Layer>,
45 pub orientation: Orientation,
47 #[serde(rename(deserialize = "renderorder"))]
49 pub render_order: Option<RenderOrder>,
50 #[serde(rename(deserialize = "staggeraxis"))]
52 pub stagger_axis: Option<StaggerAxis>,
53 #[serde(rename(deserialize = "staggerindex"))]
55 pub stagger_index: Option<StaggerIndex>,
56 #[serde(rename(deserialize = "tileheight"))]
58 pub tile_height: u32,
59 #[serde(rename(deserialize = "tilewidth"))]
61 pub tile_width: u32,
62 pub height: u32,
64 pub width: u32,
66 #[serde(rename(deserialize = "tilesets"))]
67 pub tile_sets: Vec<TileSet>,
68 #[serde(deserialize_with = "parse_property", default)]
69 pub properties: HashMap<String, TiledValue>,
70}
71
72#[derive(Deserialize, Debug, PartialEq, Clone)]
74pub enum RenderOrder {
75 #[serde(rename(deserialize = "right-down"))]
76 RightDown,
77 #[serde(rename(deserialize = "right-up"))]
78 RightUp,
79 #[serde(rename(deserialize = "left-down"))]
80 LeftDown,
81 #[serde(rename(deserialize = "left-up"))]
82 LeftUp,
83}
84
85#[derive(Deserialize, Debug, PartialEq, Clone)]
87#[serde(rename_all(deserialize = "lowercase"))]
88pub enum StaggerAxis {
89 X,
90 Y,
91}
92
93#[derive(Deserialize, Debug, PartialEq, Clone)]
95#[serde(rename_all(deserialize = "lowercase"))]
96pub enum StaggerIndex {
97 Odd,
98 Even,
99}
100
101#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
103#[serde(rename_all(deserialize = "lowercase"))]
104pub enum Orientation {
105 Orthogonal,
106 Isometric,
107 Staggered,
108 Hexagonal,
109}