wolfrpg_map_parser/db_parser/models/
game_data.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3use crate::byte_utils::parse_string;
4
5/// Miscellaneous information on a WolfRPG Editor game
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[derive(PartialEq)]
8pub struct GameData {
9    tile_size: u8,
10    character_directions: u8,
11    character_movements: u8,
12    game_name: String,
13    fonts: [String; 4]
14}
15
16impl GameData {
17    pub fn parse(bytes: &[u8]) -> GameData {
18        let mut offset: usize = 0;
19
20        let tile_size: u8 = bytes[offset];
21        offset += 1;
22
23        let character_directions: u8 = bytes[offset];
24        offset += 1;
25
26        let character_movements: u8 = bytes[offset];
27        offset += 1;
28
29        offset += 23; // Unknown
30
31        let (bytes_read, game_name): (usize, String) = parse_string(&bytes[offset..]);
32        offset += bytes_read;
33
34        // Unknown
35        let (bytes_read, _): (usize, String) = parse_string(&bytes[offset..]);
36        offset += bytes_read;
37
38        // Unknown
39        let (bytes_read, _): (usize, String) = parse_string(&bytes[offset..]);
40        offset += bytes_read;
41
42        let mut fonts: Vec<String> = Vec::with_capacity(4);
43        for _ in 0..4 {
44            let (bytes_read, font): (usize, String) = parse_string(&bytes[offset..]);
45            offset += bytes_read;
46            fonts.push(font);
47        }
48
49        let fonts: [String; 4] = fonts.try_into().unwrap();
50
51        GameData {
52            tile_size,
53            character_directions,
54            character_movements,
55            game_name,
56            fonts
57        }
58    }
59    pub fn tile_size(&self) -> u8 {
60        self.tile_size
61    }
62
63    pub fn tile_size_mut(&mut self) -> &mut u8 {
64        &mut self.tile_size
65    }
66
67    pub fn character_directions(&self) -> u8 {
68        self.character_directions
69    }
70
71    pub fn character_directions_mut(&mut self) -> &mut u8 {
72        &mut self.character_directions
73    }
74
75    pub fn character_movements(&self) -> u8 {
76        self.character_movements
77    }
78
79    pub fn character_movements_mut(&mut self) -> &mut u8 {
80        &mut self.character_movements
81    }
82
83    pub fn game_name(&self) -> &str {
84        &self.game_name
85    }
86
87    pub fn game_name_mut(&mut self) -> &mut String {
88        &mut self.game_name
89    }
90
91    pub fn fonts(&self) -> &[String; 4] {
92        &self.fonts
93    }
94
95    pub fn fonts_mut(&mut self) -> &mut [String; 4] {
96        &mut self.fonts
97    }
98}