1pub mod error;
12
13mod tileset;
14mod layer;
15mod object_group;
16mod properties;
17mod image_layer;
18mod helper;
19mod map;
20
21pub use properties::Properties;
22pub use layer::{Layer, LayerData, LayerTiles};
23pub use object_group::*;
24pub use tileset::Tileset;
25pub use image_layer::ImageLayer;
26pub use map::*;
27
28use helper::*;
29use error::TiledError;
30
31pub struct Colour {
32 pub r : u8,
33 pub g : u8,
34 pub b : u8,
35 pub a : u8,
36}
37
38#[cfg(test)]
39mod tiled_tests {
40 use super::*;
41 use std::path::Path;
42 use geometry::*;
43 #[test]
44 fn test_map() {
45 let map = Map::new(Path::new("test-resources/test.tmx")).unwrap();
46 assert!(map.width == 4);
47 assert!(map.height == 4);
48 assert!(map.tile_width == 10);
49 assert!(map.tile_height == 10);
50 assert!(!map.infinite);
51 assert!(match map.orientation {
52 Orientation::Orthogonal => true,
53 _ => false,
54 });
55
56 assert!(map.tilesets.len() == 1);
57 assert!(map.tilesets[0].first_tile_id == 1);
58 assert!(map.tilesets[0].tile_width == 10);
59 assert!(map.tilesets[0].tile_height == 10);
60 assert!(map.tilesets[0].spacing == 2);
61 assert!(map.tilesets[0].margin == 5);
62 assert!(map.tilesets[0].tile_count == 4);
63 assert!(map.tilesets[0].column_count == 2);
64 assert!(map.tilesets[0].image_path == Path::new("test-resources/test-tileset.png"));
65 assert!(map.tilesets[0].image_width == 32);
66 assert!(map.tilesets[0].image_height == 32);
67
68 assert!(map.layers.len() == 2);
69 assert!(map.layers[0].width == 4);
70 assert!(map.layers[0].height == 4);
71 assert!(
72 map.layers[0].tiles == vec![
73 4, 4, 0, 0,
74 2, 2, 2, 0,
75 2, 2, 2, 0,
76 4, 4, 0, 0,
77 ]
78 );
79 assert!(map.layers[1].width == 4);
80 assert!(map.layers[1].height == 4);
81 assert!(map.layers[1].props.booleans["collidable"] == true);
82 assert!(
83 map.layers[1].tiles == vec![
84 0, 0, 0, 0,
85 0, 0, 0, 0,
86 1, 1, 1, 1,
87 1, 1, 1, 1,
88 ]
89 );
90 assert!(map.layers[1].info.id == 1);
91 assert!(map.layers[1].info.name == "Tile Layer 1");
92 assert!(map.layers[1].info.opacity == 0.90);
93 assert!(map.layers[1].info.tint.g == 0);
94
95 assert!(map.obj_groups.len() == 2);
96 assert!(map.obj_groups[0].props.booleans["obj_group"] == true);
97 assert!(map.obj_groups[0].objs.len() == 2);
98 assert!(map.obj_groups[0].polys.len() == 2);
99 assert!(map.obj_groups[0].points.len() == 1);
100 assert!(map.obj_groups[0].ellipse.len() == 1);
101 assert!(map.obj_groups[0].ellipse[0].rotation == 10.0);
102 assert!(map.obj_groups[0].points[0].info.name == "dd");
103 assert!(map.obj_groups[0].objs[1].props.integers["num"] == 5);
104 assert!(map.obj_groups[0].objs[1].props.booleans["test"] == true);
105 assert!(map.obj_groups[0].objs[1].rotation == 343.734);
106 assert!(map.obj_groups[0].objs[1].info.type_name == "asd");
107 assert!(map.obj_groups[0].objs[0].info.name == "barry");
108 assert!(map.obj_groups[0].objs[0].info.visible == false);
109 assert!(map.obj_groups[0].objs[1].info.id == 2);
110 assert!(map.obj_groups[0].objs[1].rect.x == 4.25998);
111 assert!(map.obj_groups[0].objs[1].rect.y == 10.0772);
112 assert!(map.obj_groups[0].objs[1].rect.w == 15.1719);
113 assert!(map.obj_groups[0].objs[1].rect.h == 18.3066);
114 assert!(map.obj_groups[0].objs[0].rect.x == 28.6511);
115 assert!(map.obj_groups[0].objs[0].rect.y == 10.658);
116 assert!(map.obj_groups[0].objs[0].rect.w == 7.71136);
117 assert!(map.obj_groups[0].objs[0].rect.h == 12.7269);
118 assert!(map.obj_groups[0].polys[1].obj.rect.x == 7.58597);
119 assert!(map.obj_groups[0].polys[1].obj.rect.y == 6.33209);
120 assert!(map.obj_groups[0].polys[1].obj.rect.w == 0.0);
121 assert!(map.obj_groups[0].polys[1].obj.rect.h == 0.0);
122 assert!(map.obj_groups[0].polys[1].obj.props.booleans["open"] == true);
123 assert!(map.obj_groups[0].polys[1].closed == false);
124 assert!(map.obj_groups[0].polys[1].points.iter()
125 .map(|Vec2 {x, y}| {
126 (*x as i32, *y as i32)
127 })
128 .collect::<Vec<(i32, i32)>>() ==
129 vec![
130 (0, 0),
131 (15, -3),
132 (4, 13),
133 ]
134 );
135 assert!(map.obj_groups[0].polys[0].obj.rect.x == 9.15332);
136 assert!(map.obj_groups[0].polys[0].obj.rect.y == 33.7294);
137 assert!(map.obj_groups[0].polys[0].obj.rect.w == 0.0);
138 assert!(map.obj_groups[0].polys[0].obj.rect.h == 0.0);
139 assert!(map.obj_groups[0].polys[0].closed == true);
140 assert!(map.obj_groups[0].polys[0].points.iter()
141 .map(|Vec2 {x, y}| {
142 (*x as i32, *y as i32)
143 })
144 .collect::<Vec<(i32, i32)>>() ==
145 vec![
146 (0, 0),
147 (0, -7),
148 (9, -1),
149 ]
150 );
151 assert!(map.obj_groups[0].text.len() == 1);
152 assert!(map.obj_groups[0].text[0].text == "Hello World");
153 assert!(map.obj_groups[0].text[0].font_family == "MS Sans Serif");
154 assert!(map.obj_groups[0].text[0].colour.r == 98);
155 assert!(map.obj_groups[0].text[0].horizontal_align == TextHorizontalAlign::Justify);
156 assert!(map.obj_groups[0].text[0].vertical_align == TextVerticalAlign::Center);
157 assert!(map.obj_groups[0].text[0].italic == true);
158 assert!(map.obj_groups[0].text[0].bold == true);
159 assert!(map.obj_groups[0].text[0].wrap == true);
160 assert!(map.obj_groups[0].text[0].pixel_size == 29);
161
162 assert!(map.obj_groups[1].info.id == 5);
163 assert!(map.obj_groups[1].info.name == "obj2s");
164 assert!(map.obj_groups[1].info.index_draw_order == true);
165 assert!(map.obj_groups[1].info.offset.x == 5.05);
166 assert!(map.obj_groups[1].info.parallax.x == 1.10);
167 assert!(map.obj_groups[1].info.colour.r == 85);
168 assert!(map.obj_groups[1].info.colour.a == 10);
169 assert!(map.obj_groups[1].info.visible == true);
170 assert!(map.obj_groups[1].info.locked == true);
171 assert!(map.obj_groups[1].info.tint.g == 115);
172 assert!(map.obj_groups[1].info.tint.a == 255);
173 assert!(map.obj_groups[1].props.booleans["collidable"] == true);
174 assert!(map.obj_groups[1].objs.len() == 2);
175 assert!(map.obj_groups[1].polys.len() == 0);
176 assert!(map.obj_groups[1].objs[1].info.id == 8);
177 assert!(map.obj_groups[1].objs[1].rect.x == 10.0);
178 assert!(map.obj_groups[1].objs[1].rect.y == 20.0);
179 assert!(map.obj_groups[1].objs[1].rect.w == 20.0);
180 assert!(map.obj_groups[1].objs[1].rect.h == 0.0);
181 assert!(map.obj_groups[1].objs[0].info.id == 9);
182 assert!(map.obj_groups[1].objs[0].rect.x == 0.0);
183 assert!(map.obj_groups[1].objs[0].rect.y == 0.0);
184 assert!(map.obj_groups[1].objs[0].rect.w == 20.0);
185 assert!(map.obj_groups[1].objs[0].rect.h == 10.0);
186 assert!(map.obj_groups[1].objs[0].props.booleans["test_coll"] == true);
187
188 assert!(map.img_layers.len() == 1);
189 assert!(map.img_layers[0].info.offset.x == 19.247);
190 assert!(map.img_layers[0].info.offset.y == -10.3445);
191 assert!(map.img_layers[0].image_path == Path::new("test-tileset.png"));
192 assert!(map.img_layers[0].width == 32);
193 assert!(map.img_layers[0].height == 32);
194 assert!(map.img_layers[0].repeat_x == false);
195 assert!(map.img_layers[0].repeat_y == true);
196 assert!(map.img_layers[0].info.parallax.x == 2.07);
197 assert!(map.img_layers[0].info.parallax.y == 1.0);
198 assert!(map.img_layers[0].props.booleans["img"] == false);
199 }
200}