#![allow(deprecated)]
#[cfg(doc)] use crate::*;
use bytemuck::{Pod, Zeroable};
use winapi::um::xinput::*;
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Pod, Zeroable)]
#[repr(transparent)] pub struct Buttons(u16);
flags! { Buttons => u16; None, DPadUp, DPadDown, DPadLeft, DPadRight, Start, Guide, Back, LeftThumb, RightThumb, LeftShoulder, RightShoulder, A, B, X, Y }
impl Buttons {
pub fn any_held(&self, buttons: Buttons) -> bool { self.0 & buttons.0 != 0 }
pub fn all_held(&self, buttons: Buttons) -> bool { self.0 & buttons.0 == buttons.0 }
}
#[allow(non_upper_case_globals)] impl Buttons {
pub const None : Buttons = Buttons(0);
pub const DPadUp : Buttons = Buttons(XINPUT_GAMEPAD_DPAD_UP as _);
pub const DPadDown : Buttons = Buttons(XINPUT_GAMEPAD_DPAD_DOWN as _);
pub const DPadLeft : Buttons = Buttons(XINPUT_GAMEPAD_DPAD_LEFT as _);
pub const DPadRight : Buttons = Buttons(XINPUT_GAMEPAD_DPAD_RIGHT as _);
pub const Start : Buttons = Buttons(XINPUT_GAMEPAD_START as _);
pub const Back : Buttons = Buttons(XINPUT_GAMEPAD_BACK as _);
pub const LeftThumb : Buttons = Buttons(XINPUT_GAMEPAD_LEFT_THUMB as _);
pub const RightThumb : Buttons = Buttons(XINPUT_GAMEPAD_RIGHT_THUMB as _);
pub const LeftShoulder : Buttons = Buttons(XINPUT_GAMEPAD_LEFT_SHOULDER as _);
pub const RightShoulder : Buttons = Buttons(XINPUT_GAMEPAD_RIGHT_SHOULDER as _);
#[cfg(doc)]
pub const LeftTrigger : () = ();
#[cfg(doc)]
pub const RightTrigger : () = ();
#[cfg(feature = "undocumented")] #[cfg_attr(doc_cfg, doc(cfg(feature = "undocumented")))]
pub const Guide : Buttons = Buttons(1 << 10);
#[cfg(not(feature = "undocumented"))]
pub(crate) const Guide : Buttons = Buttons(1 << 10);
pub const A : Buttons = Buttons(XINPUT_GAMEPAD_A as _);
pub const B : Buttons = Buttons(XINPUT_GAMEPAD_B as _);
pub const X : Buttons = Buttons(XINPUT_GAMEPAD_X as _);
pub const Y : Buttons = Buttons(XINPUT_GAMEPAD_Y as _);
}