wolfrpg_map_parser/db_parser/models/
game_data.rs1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3use crate::byte_utils::parse_string;
4
5#[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; let (bytes_read, game_name): (usize, String) = parse_string(&bytes[offset..]);
32 offset += bytes_read;
33
34 let (bytes_read, _): (usize, String) = parse_string(&bytes[offset..]);
36 offset += bytes_read;
37
38 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}