1use crate::{
6 object::Object,
7 parsers::{parse_color, parse_data, parse_path, parse_property},
8 Color, TiledValue,
9};
10use serde::Deserialize;
11use std::collections::HashMap;
12use std::path::PathBuf;
13
14#[derive(Deserialize, Debug, PartialEq, Clone)]
15pub struct TileLayer {
16 pub chunks: Option<Vec<Chunk>>,
18 #[serde(deserialize_with = "parse_data", default)]
21 pub data: Vec<u32>,
22 pub height: u32,
24 pub width: u32,
26}
27
28#[derive(Deserialize, Debug, PartialEq, Clone)]
29pub struct ObjectGroup {
30 #[serde(rename(deserialize = "draworder"), default)]
32 pub draw_order: DrawOrder,
33 #[serde(default)]
35 pub objects: Vec<Object>,
36}
37
38#[derive(Deserialize, Debug, PartialEq, Clone)]
40pub struct ImageLayer {
41 #[serde(deserialize_with = "parse_path", default)]
43 pub image: PathBuf,
44 #[serde(
45 rename(deserialize = "transparentcolor"),
46 deserialize_with = "parse_color",
47 default
48 )]
49 pub transparent_color: Color,
51}
52
53#[derive(Deserialize, Debug, PartialEq, Clone)]
55pub struct Group {
56 pub layers: Vec<Layer>,
57}
58
59#[derive(Deserialize, Debug, PartialEq, Clone)]
80#[serde(rename_all(deserialize = "lowercase"), tag = "type")]
81pub enum LayerType {
82 TileLayer(TileLayer),
83 ObjectGroup(ObjectGroup),
84 ImageLayer(ImageLayer),
85 Group { layers: Vec<Layer> },
86}
87
88#[derive(Deserialize, Debug, PartialEq, Clone)]
93pub struct Layer {
94 pub name: String,
95 #[serde(rename(deserialize = "offsetx"), default)]
97 pub offset_x: f32,
98 #[serde(rename(deserialize = "offsety"), default)]
100 pub offset_y: f32,
101 pub opacity: f32,
103 #[serde(deserialize_with = "parse_property", default)]
104 pub properties: HashMap<String, TiledValue>,
105 #[serde(flatten)]
106 pub layer_type: LayerType,
108 pub x: i32,
110 pub y: i32,
112}
113
114#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
116pub struct Chunk {
117 #[serde(deserialize_with = "parse_data", default)]
119 pub data: Vec<u32>,
120 pub height: u32,
121 pub width: u32,
122 pub x: i32,
123 pub y: i32,
124}
125
126#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
128#[serde(rename_all(deserialize = "lowercase"))]
129pub enum DrawOrder {
130 TopDown,
131 Index,
132}
133
134impl Default for DrawOrder {
135 fn default() -> Self {
136 DrawOrder::TopDown
137 }
138}