wolfrpg_map_parser/command/input_key_command/automatic_input/
mouse.rs1#[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; offset += 1; 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}