wolfrpg_map_parser/command/input_key_command/automatic_input/
mouse.rs

1#[cfg(feature = "serde")]
2use serde::{Serialize, Deserialize};
3use crate::byte_utils::as_u32_le;
4use crate::command::input_key_command::automatic_input::mouse_options::MouseOptions;
5use crate::command::input_key_command::automatic_input::mouse_type::MouseType;
6
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8#[derive(PartialEq, Clone)]
9#[allow(unused)]
10pub struct Mouse {
11    options: MouseOptions,
12    position_x: Option<u32>,
13    position_y: Option<u32>,
14    wheel_delta: Option<u32>,
15    unknown1: Option<u32>
16}
17
18impl Mouse {
19    pub(crate) fn parse(bytes: &[u8]) -> (usize, Self) {
20        let mut offset: usize = 0;
21
22        let options: u8 = bytes[offset];
23        let options: MouseOptions = MouseOptions::new(options);
24        offset += 1;
25
26        offset += 2; // Padding
27
28        offset += 1; // input_type
29
30        let (mut position_x, mut position_y, mut wheel_delta, mut unknown1)
31            : (Option<u32>, Option<u32>, Option<u32>, Option<u32>) = (None, None, None, None);
32
33        match *options.mouse_type() {
34            MouseType::Position => {
35                position_x = Some(as_u32_le(&bytes[offset..offset + 4]));
36                offset += 4;
37                position_y = Some(as_u32_le(&bytes[offset..offset + 4]));
38                offset += 4;
39            }
40
41            MouseType::Wheel => {
42                wheel_delta = Some(as_u32_le(&bytes[offset..offset + 4]));
43                offset += 4;
44                unknown1 = Some(as_u32_le(&bytes[offset..offset + 4]));
45                offset += 4;
46            }
47
48            _ => ()
49        };
50
51        (offset, Self {
52            options,
53            position_x,
54            position_y,
55            wheel_delta,
56            unknown1
57        })
58    }
59
60    pub fn options(&self) -> &MouseOptions {
61        &self.options
62    }
63
64    pub fn options_mut(&mut self) -> &mut MouseOptions {
65        &mut self.options
66    }
67
68    pub fn position_x(&self) -> Option<u32> {
69        self.position_x
70    }
71
72    pub fn position_x_mut(&mut self) -> &mut Option<u32> {
73        &mut self.position_x
74    }
75
76    pub fn position_y(&self) -> Option<u32> {
77        self.position_y
78    }
79
80    pub fn position_y_mut(&mut self) -> &mut Option<u32> {
81        &mut self.position_y
82    }
83
84    pub fn wheel_delta(&self) -> Option<u32> {
85        self.wheel_delta
86    }
87
88    pub fn wheel_delta_mut(&mut self) -> &mut Option<u32> {
89        &mut self.wheel_delta
90    }
91}