eldiron_shared/
tilemap.rs1use rusterix::TileRole;
2use theframework::prelude::*;
3
4#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
5pub struct Tilemap {
6 pub id: Uuid,
7
8 pub name: String,
9 pub buffer: TheRGBABuffer,
10
11 pub grid_size: i32,
12 pub scroll_offset: Vec2<i32>,
13 pub zoom: f32,
14
15 pub tiles: Vec<Tile>,
16}
17
18impl Default for Tilemap {
19 fn default() -> Self {
20 Self::new()
21 }
22}
23
24impl Tilemap {
25 pub fn new() -> Self {
26 Self {
27 id: Uuid::new_v4(),
28
29 name: String::new(),
30 buffer: TheRGBABuffer::empty(),
31
32 grid_size: 24,
33 scroll_offset: Vec2::zero(),
34 zoom: 1.0,
35
36 tiles: vec![],
37 }
38 }
39
40 pub fn set_buffer(&mut self, buffer: TheRGBABuffer) {
42 self.buffer = buffer;
43 }
44}
45
46fn default_tile_scale() -> f32 {
47 1.0
48}
49
50#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
51pub struct Tile {
52 pub id: Uuid,
53 pub name: String,
54 pub role: TileRole,
55 #[serde(default = "default_tile_scale")]
56 pub scale: f32,
57
58 pub sequence: TheRGBARegionSequence,
59 pub blocking: bool,
60 #[serde(default)]
61 pub render_mode: u8,
62}
63
64impl Default for Tile {
65 fn default() -> Self {
66 Self::new()
67 }
68}
69
70impl Tile {
71 pub fn new() -> Self {
72 Self {
73 id: Uuid::new_v4(),
74 name: String::new(),
75 role: TileRole::Nature,
76 scale: 1.0,
77
78 sequence: TheRGBARegionSequence::new(),
79 blocking: false,
80 render_mode: 0,
81 }
82 }
83}