Skip to main content

dualsense_tools/virtual_controller/
state.rs

1use crate::virtual_controller::{Axes, AxisId, AxisValue, ButtonId, Buttons, Hat};
2
3/// Represent the state of a virtual controller (its axes, buttons and hat)
4#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)]
5pub struct VirtualControllerState {
6    pub axes: Axes,
7    pub hat: Hat,
8    pub buttons: Buttons,
9    pub is_tilt_enabled: bool,
10}
11
12impl VirtualControllerState {
13    /// Gets a single axis value by identifier
14    pub fn get_axis(&self, id: &AxisId) -> AxisValue {
15        match id {
16            AxisId::X => self.axes.x,
17            AxisId::Y => self.axes.y,
18            AxisId::Z => self.axes.z,
19            AxisId::RX => self.axes.rx,
20            AxisId::RY => self.axes.ry,
21            AxisId::RZ => self.axes.rz,
22            AxisId::Pitch => self.axes.pitch,
23            AxisId::Roll => self.axes.roll,
24            AxisId::Throttle => self.axes.throttle,
25        }
26    }
27
28    /// Gets a single button value by identifier
29    pub fn get_button(&self, id: &ButtonId) -> bool {
30        match id {
31            ButtonId::Cross => self.buttons.cross,
32            ButtonId::Square => self.buttons.square,
33            ButtonId::Circle => self.buttons.circle,
34            ButtonId::Triangle => self.buttons.triangle,
35            ButtonId::L1 => self.buttons.l1,
36            ButtonId::R1 => self.buttons.r1,
37            ButtonId::L2 => self.buttons.l2,
38            ButtonId::R2 => self.buttons.r2,
39            ButtonId::L3 => self.buttons.l3,
40            ButtonId::R3 => self.buttons.r3,
41            ButtonId::Opt => self.buttons.option,
42            ButtonId::Share => self.buttons.share,
43            ButtonId::Mic => self.buttons.mic,
44            ButtonId::TouchClick => self.buttons.touch_click,
45            ButtonId::Ps => self.buttons.ps,
46        }
47    }
48}