wolfrpg_map_parser/command/sound_command/
variable.rs1#[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; (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}