arci/traits/
gamepad.rs

1use async_trait::async_trait;
2use auto_impl::auto_impl;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
7pub enum Button {
8    South,
9    East,
10    North,
11    West,
12    LeftTrigger,
13    LeftTrigger2,
14    RightTrigger,
15    RightTrigger2,
16    Select,
17    Start,
18    Mode,
19    LeftThumb,
20    RightThumb,
21    DPadUp,
22    DPadDown,
23    DPadLeft,
24    DPadRight,
25    Unknown,
26}
27
28#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
29pub enum Axis {
30    LeftStickX,
31    LeftStickY,
32    LeftTrigger,
33    RightStickX,
34    RightStickY,
35    RightTrigger,
36    DPadX,
37    DPadY,
38    Unknown,
39}
40
41#[derive(Debug, Clone)]
42pub enum GamepadEvent {
43    ButtonPressed(Button),
44    ButtonReleased(Button),
45    AxisChanged(Axis, f64),
46    Connected,
47    Disconnected,
48    Unknown,
49}
50
51#[async_trait]
52#[auto_impl(Box, Arc)]
53pub trait Gamepad: Send + Sync {
54    async fn next_event(&self) -> GamepadEvent;
55    fn stop(&self);
56}