Skip to main content

dualsense_tools/virtual_controller/
hat.rs

1use std::fmt::Display;
2
3use crate::state::HatDirection;
4
5/// Identifies hat direction in a virtual controller
6#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
7pub enum Hat {
8    Up,
9    UpRight,
10    Right,
11    DownRight,
12    Down,
13    DownLeft,
14    Left,
15    UpLeft,
16    #[default]
17    Neutral,
18}
19
20impl Display for Hat {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        match self {
23            Hat::Up => f.write_str("Up"),
24            Hat::UpRight => f.write_str("UpRight"),
25            Hat::Right => f.write_str("Right"),
26            Hat::DownRight => f.write_str("DownRight"),
27            Hat::Down => f.write_str("Down"),
28            Hat::DownLeft => f.write_str("DownLeft"),
29            Hat::Left => f.write_str("Left"),
30            Hat::UpLeft => f.write_str("UpLeft"),
31            Hat::Neutral => f.write_str("Neutral"),
32        }
33    }
34}
35
36impl From<HatDirection> for Hat {
37    fn from(val: HatDirection) -> Self {
38        match val {
39            HatDirection::Up => Hat::Up,
40            HatDirection::UpRight => Hat::UpRight,
41            HatDirection::Right => Hat::Right,
42            HatDirection::DownRight => Hat::DownRight,
43            HatDirection::Down => Hat::Down,
44            HatDirection::DownLeft => Hat::DownLeft,
45            HatDirection::Left => Hat::Left,
46            HatDirection::UpLeft => Hat::UpLeft,
47            HatDirection::Neutral => Hat::Neutral,
48        }
49    }
50}