use std::collections::{HashMap, HashSet}; use sdl2::controller::GameController; use serde::{Deserialize, Serialize}; use crate::{framework::context::Context, settings::PlayerControllerInputType}; #[derive(Debug, Hash, Ord, PartialOrd, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)] #[repr(u32)] pub enum Axis { LeftX, LeftY, RightX, RightY, TriggerLeft, TriggerRight, } #[derive(Clone, Debug)] pub enum AxisDirection { None, Either, Up, Left, Right, Down, } impl AxisDirection { pub fn compare(&self, value: f64, axis_sensitivity: f64) -> bool { match self { AxisDirection::None => false, AxisDirection::Either => value.abs() > 0.0, AxisDirection::Down | AxisDirection::Right => value > axis_sensitivity, AxisDirection::Up | AxisDirection::Left => value < -axis_sensitivity, } } } #[derive(Debug, Hash, Ord, PartialOrd, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)] #[repr(u32)] pub enum Button { South, East, West, North, Back, Guide, Start, LeftStick, RightStick, LeftShoulder, RightShoulder, DPadUp, DPadDown, DPadLeft, DPadRight, } pub struct GamepadData { controller: GameController, left_x: f64, left_y: f64, right_x: f64, right_y: f64, trigger_left: f64, trigger_right: f64, axis_sensitivity: f64, pressed_buttons_set: HashSet