wolfrpg_map_parser/command/sound_command/
variable.rs

1#[cfg(feature = "serde")]
2use serde::{Serialize, Deserialize};
3use crate::byte_utils::as_u32_le;
4use crate::command::sound_command::operation::Operation;
5use crate::command::sound_command::options::Options;
6
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8#[derive(PartialEq, Clone)]
9pub struct Variable {
10    delay_playback: Option<u32>,
11    fade_time: Option<u32>,
12    variable: u32,
13    start_time: u32,
14}
15
16impl Variable {
17    pub(crate) fn parse(bytes: &[u8], options: &Options) -> (usize, Self) {
18        let mut offset: usize = 0;
19
20        let value: u32 = as_u32_le(&bytes[offset..offset + 4]);
21        offset += 4;
22
23        let (delay_playback, fade_time): (Option<u32>, Option<u32>) = match *options.operation() {
24            Operation::SetSE => (Some(value), None),
25            _ => (None, Some(value))
26        };
27
28        let variable: u32 = as_u32_le(&bytes[offset..offset + 4]);
29        offset += 4;
30
31        let start_time: u32 = as_u32_le(&bytes[offset..offset + 4]);
32        offset += 4;
33
34        offset += 2; // Padding
35
36        (offset, Self {
37            delay_playback,
38            fade_time,
39            variable,
40            start_time
41        })
42    }
43
44    pub fn delay_playback(&self) -> Option<u32> {
45        self.delay_playback
46    }
47    
48    pub fn delay_playback_mut(&mut self) -> &mut Option<u32> {
49        &mut self.delay_playback
50    }
51
52    pub fn fade_time(&self) -> Option<u32> {
53        self.fade_time
54    }
55    
56    pub fn fade_time_mut(&mut self) -> &mut Option<u32> {
57        &mut self.fade_time
58    }
59
60    pub fn variable(&self) -> u32 {
61        self.variable
62    }
63    
64    pub fn variable_mut(&mut self) -> &mut u32 {
65        &mut self.variable
66    }
67
68    pub fn start_time(&self) -> u32 {
69        self.start_time
70    }
71    
72    pub fn start_time_mut(&mut self) -> &mut u32 {
73        &mut self.start_time
74    }
75}