Skip to main content

eldiron_shared/
tilemap.rs

1use 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    /// Set the buffer
41    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}