diff --git a/crate/bevy_controls/example/basic/src/main.rs b/crate/bevy_controls/example/basic/src/main.rs index 1d17500..d2d1abb 100644 --- a/crate/bevy_controls/example/basic/src/main.rs +++ b/crate/bevy_controls/example/basic/src/main.rs @@ -10,8 +10,9 @@ use bevy_controls::{ contract::InputsContainer, plugin::ControlsPlugin, resource::{ - ActivationMode, ActivationOptions, Binding, BindingCondition, BindingConfig, Bindings, - ButtonCombination, Controls, InputType, InputValue, OptionsMode, PlayerActions, + ActivationMode, ActivationOptions, AxisName, Binding, BindingCondition, BindingConfig, + Bindings, ButtonCombination, Controls, InputType, InputValue, MouseInput, OptionsMode, + PlayerActions, }, }; use bevy_controls_derive::{Action, GameState}; @@ -25,6 +26,8 @@ enum MyAction { Right, Up, Down, + MouseHorizontal, + MouseVertical, } #[derive(States, PartialEq, Eq, Clone, Hash, Debug, Default, GameState)] @@ -109,6 +112,18 @@ fn main() { MyAction::Up, BindingConfig::from_bind(Binding::from_single(InputType::Keyboard(KeyCode::Space))), ) + .with( + MyAction::MouseHorizontal, + BindingConfig::from_bind(Binding::from_single(InputType::Mouse(MouseInput::Axis( + AxisName::Horizontal, + )))), + ) + .with( + MyAction::MouseVertical, + BindingConfig::from_bind(Binding::from_single(InputType::Mouse(MouseInput::Axis( + AxisName::Vertical, + )))), + ) .with( MyAction::Down, BindingConfig::from_bind(Binding::from_single( @@ -178,6 +193,20 @@ fn setup(mut commands: Commands) { ..default() }, ), + TextSection::new( + "(MouseDeltaX)", + TextStyle { + font_size: TEXT_SIZE, + ..default() + }, + ), + TextSection::new( + "(MouseDeltaY)", + TextStyle { + font_size: TEXT_SIZE, + ..default() + }, + ), ]) .with_background_color(Color::BLACK), TextBlock, @@ -190,6 +219,8 @@ const MOVE_BACK_INDEX: usize = 2; const MOVE_FORWARD_INDEX: usize = 3; const MOVE_RIGHT_INDEX: usize = 4; const JUMP_INDEX: usize = 5; +const DELTA_X_INDEX: usize = 6; +const DELTA_Y_INDEX: usize = 7; fn text_update_system( mut query: Query<&mut Text, With>, @@ -213,6 +244,7 @@ fn text_update_system( **jumps_count += 1; text.sections[JUMP_INDEX].value = format!("Up (Space) - {}", **jumps_count); } + if player_inputs .get_just_pressed(MyAction::Down) .unwrap_or(false) @@ -220,6 +252,12 @@ fn text_update_system( **jumps_count -= 1; text.sections[JUMP_INDEX].value = format!("Up (Space) - {}", **jumps_count); } + + let x = player_inputs.get(MyAction::MouseHorizontal).to_float(); + text.sections[DELTA_X_INDEX].value = format!("(MouseDeltaX) - {}", x); + + let y = player_inputs.get(MyAction::MouseVertical).to_float(); + text.sections[DELTA_Y_INDEX].value = format!("(MouseDeltaY) - {}", y); } } diff --git a/crate/bevy_controls/src/plugin.rs b/crate/bevy_controls/src/plugin.rs index 37e5971..6b0ca6d 100644 --- a/crate/bevy_controls/src/plugin.rs +++ b/crate/bevy_controls/src/plugin.rs @@ -153,16 +153,16 @@ impl, Gs: GameState> ControlsPlugin } } - //log::info!("{:#?}", collected_inputs); + log::info!("{:#?}", collected_inputs); //log::info!("{:#?}", action_binding_pairs[0]); match &binding.input { ButtonCombination::Single(input_type) => { // TODO: exclude if used - if collected_inputs.contains_key(&*input_type) { - inputs.forced_set(**action, true); + if let Some(value) = collected_inputs.get(&*input_type) { + inputs.forced_set(**action, *value); } else { - inputs.forced_set(**action, false); + inputs.forced_set(**action, InputValue::Empty); } } } diff --git a/crate/bevy_controls/src/resource.rs b/crate/bevy_controls/src/resource.rs index 73b455a..bb3a415 100644 --- a/crate/bevy_controls/src/resource.rs +++ b/crate/bevy_controls/src/resource.rs @@ -199,6 +199,7 @@ impl PlayerActions { } } +// TODO: add option on exlude or not exclude if used common_traits_conditions! { #[derive(Debug, PartialEq, Clone, Eq, Hash)] pub enum InputType {