wolfrpg_map_parser/command/effect_command/
map_shake.rs1#[cfg(feature = "serde")]
2use serde::{Serialize, Deserialize};
3use crate::byte_utils::as_u32_le;
4use shake_type::ShakeType;
5
6pub mod shake_type;
7
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9#[derive(PartialEq, Clone)]
10pub struct MapShake {
11 power: u8,
12 speed: u8,
13 shake_type: ShakeType,
14 duration: u32,
15}
16
17impl MapShake {
18 pub(crate) fn parse(bytes: &[u8]) -> (usize, Self) {
19 let mut offset: usize = 0;
20
21 let options: u32 = as_u32_le(&bytes[offset..offset+4]);
22 offset += 4;
23
24 let power: u8 = (options & 0x0f) as u8;
25 let speed: u8 = ((options & 0xf0) >> 4) as u8;
26
27 let shake_type: u8 = ((options >> 8) & 0xff) as u8;
28 let shake_type: ShakeType = ShakeType::new(shake_type);
29
30 let duration: u32 = as_u32_le(&bytes[offset..offset+4]);
31 offset += 4;
32
33 offset += 3; (offset, Self {
36 power,
37 speed,
38 shake_type,
39 duration
40 })
41 }
42
43 pub fn power(&self) -> u8 {
44 self.power
45 }
46
47 pub fn power_mut(&mut self) -> &mut u8 {
48 &mut self.power
49 }
50
51 pub fn speed(&self) -> u8 {
52 self.speed
53 }
54
55 pub fn speed_mut(&mut self) -> &mut u8 {
56 &mut self.speed
57 }
58
59 pub fn shake_type(&self) -> &ShakeType {
60 &self.shake_type
61 }
62
63 pub fn shake_type_mut(&mut self) -> &mut ShakeType {
64 &mut self.shake_type
65 }
66
67 pub fn duration(&self) -> u32 {
68 self.duration
69 }
70
71 pub fn duration_mut(&mut self) -> &mut u32 {
72 &mut self.duration
73 }
74}