use bevy::reflect::{FromReflect, Reflect};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Reflect, FromReflect)]
pub enum ButtonState {
JustPressed,
Pressed,
JustReleased,
Released,
}
impl ButtonState {
pub fn tick(&mut self) {
use ButtonState::*;
*self = match self {
JustPressed => Pressed,
Pressed => Pressed,
JustReleased => Released,
Released => Released,
}
}
#[inline]
pub fn press(&mut self) {
if *self != ButtonState::Pressed {
*self = ButtonState::JustPressed;
}
}
#[inline]
pub fn release(&mut self) {
if *self != ButtonState::Released {
*self = ButtonState::JustReleased;
}
}
#[inline]
#[must_use]
pub fn pressed(&self) -> bool {
*self == ButtonState::Pressed || *self == ButtonState::JustPressed
}
#[inline]
#[must_use]
pub fn released(&self) -> bool {
*self == ButtonState::Released || *self == ButtonState::JustReleased
}
#[inline]
#[must_use]
pub fn just_pressed(&self) -> bool {
*self == ButtonState::JustPressed
}
#[inline]
#[must_use]
pub fn just_released(&self) -> bool {
*self == ButtonState::JustReleased
}
}
impl Default for ButtonState {
fn default() -> Self {
ButtonState::Released
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum MouseWheelDirection {
Up,
Down,
Right,
Left,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum MouseMotionDirection {
Up,
Down,
Right,
Left,
}