1use std::collections::HashMap;
5use std::hash::Hash;
6
7use repame_sim::bevy_ecs::prelude::*;
8use repose_core::input::GamepadAxis;
9
10mod aim;
11mod binding;
12mod haptics;
13mod held;
14mod keymap;
15mod map;
16mod motion;
17mod remap;
18mod snapshot;
19mod state;
20
21pub use aim::{AimTracker, StagedClick};
22pub use binding::Binding;
23pub use haptics::{HapticBus, HapticEffect, HapticSink};
24pub use held::reconcile_held;
25pub use keymap::{
26 Keymap, KeymapCapture, KeymapDevice, KeymapEntry, KeymapRow, chord_for_physical,
27 decode_keymap_entry, encode_keymap_entry, glyph_for_physical,
28};
29pub use map::ActionMap;
30pub use motion::{GRAVITY, MotionSample, MotionSnapshot, MotionSource, MotionTracker, SensorKind};
31pub use remap::RemapSession;
32pub use snapshot::{GamepadState, MouseState, TouchContact, apply_stick, dead_zone};
33pub use state::ActionState;
34
35pub trait ActionLike: Clone + Eq + Hash + Send + Sync + 'static {}
38
39impl<T: Clone + Eq + Hash + Send + Sync + 'static> ActionLike for T {}
40
41pub fn init_state<A: ActionLike + std::fmt::Debug>(sim: &mut repame_sim::Sim, map: ActionMap<A>) {
43 sim.world.insert_resource(ActionState::new(map));
44}
45
46pub fn end_tick_system<A: ActionLike + std::fmt::Debug>(mut state: ResMut<ActionState<A>>) {
48 state.end_tick();
49}
50
51pub fn stick_pair(state_axes: &HashMap<GamepadAxis, f32>) -> (f32, f32) {
53 let x = state_axes
54 .get(&GamepadAxis::LeftStickX)
55 .copied()
56 .unwrap_or(0.0);
57 let y = state_axes
58 .get(&GamepadAxis::LeftStickY)
59 .copied()
60 .unwrap_or(0.0);
61 (x, y)
62}
63
64pub use repose_core::input::PointerButton as MouseButton;
65pub use repose_core::input::{GamepadAxis as Axis, GamepadButton as PadButton};
66pub use repose_core::shortcuts::KeyChord as Chord;