#![forbid(missing_docs)]
#![warn(clippy::doc_markdown)]
#![doc = include_str!("../README.md")]
use crate::action_state::ActionState;
use crate::input_map::InputMap;
use bevy::ecs::prelude::*;
use bevy::reflect::{FromReflect, Reflect, TypePath};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
use std::hash::Hash;
pub mod action_diff;
pub mod action_state;
pub mod axislike;
pub mod buttonlike;
pub mod clashing_inputs;
pub mod common_conditions;
pub mod input_map;
pub mod input_processing;
pub mod plugin;
pub mod systems;
#[cfg(feature = "timing")]
pub mod timing;
pub mod typetag;
pub mod user_input;
pub use leafwing_input_manager_macros::Actionlike;
pub mod prelude {
pub use crate::InputControlKind;
pub use crate::action_state::ActionState;
pub use crate::clashing_inputs::ClashStrategy;
pub use crate::input_map::InputMap;
pub use crate::input_processing::*;
pub use crate::user_input::*;
pub use crate::plugin::InputManagerPlugin;
pub use crate::{Actionlike, InputManagerBundle};
pub use leafwing_input_manager_macros::serde_typetag;
}
pub trait Actionlike:
Debug + Eq + Hash + Send + Sync + Clone + Reflect + TypePath + FromReflect + 'static
{
fn input_control_kind(&self) -> InputControlKind;
}
#[derive(Bundle)]
pub struct InputManagerBundle<A: Actionlike> {
pub action_state: ActionState<A>,
pub input_map: InputMap<A>,
}
impl<A: Actionlike> Default for InputManagerBundle<A> {
fn default() -> Self {
Self {
action_state: ActionState::default(),
input_map: InputMap::default(),
}
}
}
impl<A: Actionlike> InputManagerBundle<A> {
pub fn with_map(input_map: InputMap<A>) -> Self {
Self {
input_map,
action_state: ActionState::default(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Reflect, Serialize, Deserialize)]
#[must_use]
pub enum InputControlKind {
Button,
Axis,
DualAxis,
TripleAxis,
}