From 95c5bea3cca50eb765d0dc18cccd802e35e7608c Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Thu, 10 Apr 2025 01:57:01 +0300 Subject: [PATCH 1/7] Update to Bevy 0.16 RC 3 --- Cargo.toml | 17 +++++++--- examples/all_conditions.rs | 2 +- examples/context_layering.rs | 20 ++++++------ examples/context_switch.rs | 16 +++++----- examples/keybinding_menu.rs | 48 ++++++++++++++--------------- examples/local_multiplayer.rs | 6 ++-- examples/simple.rs | 6 ++-- macros/Cargo.toml | 2 +- src/action_binding.rs | 1 + src/action_instances.rs | 5 +-- src/action_map.rs | 3 +- src/actions.rs | 2 +- src/input_binding.rs | 2 +- src/input_condition.rs | 2 +- src/input_condition/block_by.rs | 4 ++- src/input_condition/chord.rs | 4 ++- src/input_modifier.rs | 2 +- src/input_modifier/accumulate_by.rs | 4 ++- src/input_reader.rs | 2 +- src/lib.rs | 6 ++-- src/preset.rs | 2 +- src/trigger_tracker.rs | 1 + tests/accumulation.rs | 2 +- tests/condition_kind.rs | 2 +- tests/consume_input.rs | 8 ++--- tests/context_gamepad.rs | 4 +-- tests/dim.rs | 2 +- tests/instances.rs | 8 +++-- tests/preset.rs | 2 +- tests/priority.rs | 4 +-- tests/require_reset.rs | 4 +-- tests/state_and_value_merge.rs | 2 +- 32 files changed, 106 insertions(+), 89 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6813db49..e92cec0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_enhanced_input" -version = "0.9.0" +version = "0.10.0-rc.3" authors = ["Hennadii Chernyshchyk "] edition = "2024" description = "Input manager for Bevy, inspired by Unreal Engine Enhanced Input" @@ -12,17 +12,24 @@ license = "MIT OR Apache-2.0" include = ["/src", "/LICENSE*"] [dependencies] -bevy_enhanced_input_macros = { path = "macros", version = "0.9.0" } -bevy = { version = "0.15", default-features = false, features = ["serialize"] } +bevy_enhanced_input_macros = { path = "macros", version = "0.10.0-rc.3" } +bevy = { version = "0.16.0-rc.3", default-features = false, features = [ + "serialize", +] } +log = "0.4" # Directly depend on `log` like other `no_std` Bevy crates, since `bevy_log` currently requires `std`. +variadics_please = "1.0" serde = { version = "1.0", default-features = false, features = ["derive"] } bitflags = { version = "2.6", features = ["serde"] } [dev-dependencies] -bevy = { version = "0.15", default-features = false, features = [ +bevy = { version = "0.16.0-rc.3", default-features = false, features = [ "bevy_gilrs", - "bevy_ui", "bevy_gizmos", + "bevy_log", + "bevy_ui_picking_backend", + "bevy_ui", "bevy_window", + "default_font", "x11", ] } ron = "0.9" diff --git a/examples/all_conditions.rs b/examples/all_conditions.rs index b2eb13ee..bbdc95c6 100644 --- a/examples/all_conditions.rs +++ b/examples/all_conditions.rs @@ -33,7 +33,7 @@ fn spawn(mut commands: Commands) { } fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions .bind::() .to(PressAction::KEY) diff --git a/examples/context_layering.rs b/examples/context_layering.rs index cb6ff0e6..f0158b1c 100644 --- a/examples/context_layering.rs +++ b/examples/context_layering.rs @@ -44,7 +44,7 @@ fn spawn(mut commands: Commands) { } fn regular_binding(trigger: Trigger>, mut players: Query<&mut Actions>) { - let mut actions = players.get_mut(trigger.entity()).unwrap(); + let mut actions = players.get_mut(trigger.target()).unwrap(); actions .bind::() .to(Cardinal::wasd_keys()) @@ -58,7 +58,7 @@ fn regular_binding(trigger: Trigger>, mut players: Query<&mut Ac } fn swimming_binding(trigger: Trigger>, mut players: Query<&mut Actions>) { - let mut actions = players.get_mut(trigger.entity()).unwrap(); + let mut actions = players.get_mut(trigger.target()).unwrap(); // `Player` has lower priority, so `Dive` and `ExitWater` consume inputs first, // preventing `Rotate` and `EnterWater` from being triggered. // The consuming behavior can be configured in the `InputAction` trait. @@ -67,12 +67,12 @@ fn swimming_binding(trigger: Trigger>, mut players: Query<&mut } fn apply_movement(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.translation += trigger.value.extend(0.0); } fn rotate(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.rotate_z(FRAC_PI_4); } @@ -82,21 +82,21 @@ fn enter_water( mut players: Query<&mut PlayerColor>, ) { // Change color for visibility. - let mut color = players.get_mut(trigger.entity()).unwrap(); + let mut color = players.get_mut(trigger.target()).unwrap(); **color = INDIGO_600.into(); commands - .entity(trigger.entity()) + .entity(trigger.target()) .insert(Actions::::default()); } fn start_diving(trigger: Trigger>, mut players: Query<&mut Visibility>) { - let mut visibility = players.get_mut(trigger.entity()).unwrap(); + let mut visibility = players.get_mut(trigger.target()).unwrap(); *visibility = Visibility::Hidden; } fn end_diving(trigger: Trigger>, mut players: Query<&mut Visibility>) { - let mut visibility = players.get_mut(trigger.entity()).unwrap(); + let mut visibility = players.get_mut(trigger.target()).unwrap(); *visibility = Visibility::Visible; } @@ -105,11 +105,11 @@ fn exit_water( mut commands: Commands, mut players: Query<&mut PlayerColor>, ) { - let mut color = players.get_mut(trigger.entity()).unwrap(); + let mut color = players.get_mut(trigger.target()).unwrap(); **color = Default::default(); commands - .entity(trigger.entity()) + .entity(trigger.target()) .remove::>(); } diff --git a/examples/context_switch.rs b/examples/context_switch.rs index 8f3b2658..c2bbbaa7 100644 --- a/examples/context_switch.rs +++ b/examples/context_switch.rs @@ -42,7 +42,7 @@ fn spawn(mut commands: Commands) { } fn foot_binding(trigger: Trigger>, mut players: Query<&mut Actions>) { - let mut actions = players.get_mut(trigger.entity()).unwrap(); + let mut actions = players.get_mut(trigger.target()).unwrap(); actions .bind::() .to(Cardinal::wasd_keys()) @@ -56,7 +56,7 @@ fn foot_binding(trigger: Trigger>, mut players: Query<&mut Actio } fn car_binding(trigger: Trigger>, mut players: Query<&mut Actions>) { - let mut actions = players.get_mut(trigger.entity()).unwrap(); + let mut actions = players.get_mut(trigger.target()).unwrap(); actions .bind::() .to(Cardinal::wasd_keys()) @@ -69,12 +69,12 @@ fn car_binding(trigger: Trigger>, mut players: Query<&mut Actions } fn apply_movement(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.translation += trigger.value.extend(0.0); } fn rotate(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.rotate_z(FRAC_PI_4); } @@ -84,11 +84,11 @@ fn enter_car( mut players: Query<&mut PlayerColor>, ) { // Change color for visibility. - let mut color = players.get_mut(trigger.entity()).unwrap(); + let mut color = players.get_mut(trigger.target()).unwrap(); **color = FUCHSIA_400.into(); commands - .entity(trigger.entity()) + .entity(trigger.target()) .remove::>() .insert(Actions::::default()); } @@ -98,11 +98,11 @@ fn exit_car( mut commands: Commands, mut players: Query<&mut PlayerColor>, ) { - let mut color = players.get_mut(trigger.entity()).unwrap(); + let mut color = players.get_mut(trigger.target()).unwrap(); **color = Default::default(); commands - .entity(trigger.entity()) + .entity(trigger.target()) .remove::>() .insert(Actions::::default()); } diff --git a/examples/keybinding_menu.rs b/examples/keybinding_menu.rs index f0091409..1fefd18e 100644 --- a/examples/keybinding_menu.rs +++ b/examples/keybinding_menu.rs @@ -26,10 +26,8 @@ impl Plugin for KeybindingMenuPlugin { ( update_button_text, ( - cancel_binding - .never_param_warn() - .run_if(input_just_pressed(KeyCode::Escape)), - bind.never_param_warn(), + cancel_binding.run_if(input_just_pressed(KeyCode::Escape)), + bind, ) .chain(), ), @@ -62,11 +60,11 @@ fn setup(mut commands: Commands) { // We use separate root node to let dialogs cover the whole UI. commands - .spawn((Node { + .spawn(Node { width: Val::Percent(100.0), height: Val::Percent(100.0), ..Default::default() - },)) + }) .with_children(|parent| { parent .spawn(Node { @@ -124,7 +122,7 @@ struct SettingsField(&'static str); /// Number of input columns. const INPUTS_PER_ACTION: usize = 3; -fn setup_actions(parent: &mut ChildBuilder, settings: &KeyboardSettings) -> Entity { +fn setup_actions(parent: &mut ChildSpawnerCommands, settings: &KeyboardSettings) -> Entity { parent .spawn(Node { display: Display::Grid, @@ -172,7 +170,7 @@ fn setup_actions(parent: &mut ChildBuilder, settings: &KeyboardSettings) -> Enti } fn setup_action_row( - parent: &mut ChildBuilder, + parent: &mut ChildSpawnerCommands, name: &'static str, inputs: &[Input], field: SettingsField, @@ -210,7 +208,7 @@ fn delete_binding( mut input_buttons: Query<(&Name, &mut InputButton)>, delete_buttons: Query<&DeleteButton>, ) { - let delete_button = delete_buttons.get(trigger.entity()).unwrap(); + let delete_button = delete_buttons.get(trigger.target()).unwrap(); let (name, mut input_button) = input_buttons .get_mut(delete_button.button_entity) .expect("delete button should point to an input button"); @@ -221,16 +219,16 @@ fn delete_binding( fn show_binding_dialog( trigger: Trigger>, mut commands: Commands, - root_entity: Single, Without)>, + root_entity: Single, Without)>, names: Query<&Name>, ) { - let name = names.get(trigger.entity()).unwrap(); + let name = names.get(trigger.target()).unwrap(); info!("starting binding for '{name}'"); commands.entity(*root_entity).with_children(|parent| { parent .spawn(BindingDialog { - button_entity: trigger.entity(), + button_entity: trigger.target(), }) .with_children(|parent| { parent @@ -264,7 +262,7 @@ fn bind( mut key_events: EventReader, mut mouse_button_events: EventReader, dialog: Single<(Entity, &BindingDialog)>, - root_entity: Single, Without)>, + root_entity: Single, Without)>, mut buttons: Query<(Entity, &Name, &mut InputButton)>, ) { let keys = key_events @@ -337,12 +335,12 @@ fn bind( button.input = Some(input); } - commands.entity(dialog_entity).despawn_recursive(); + commands.entity(dialog_entity).despawn(); } fn cancel_binding(mut commands: Commands, dialog_entity: Single>) { info!("cancelling binding"); - commands.entity(*dialog_entity).despawn_recursive(); + commands.entity(*dialog_entity).despawn(); } fn replace_binding( @@ -364,7 +362,7 @@ fn replace_binding( button.input = input; info!("reassigning binding to '{name}'"); - commands.entity(dialog_entity).despawn_recursive(); + commands.entity(dialog_entity).despawn(); } fn cancel_replace_binding( @@ -373,7 +371,7 @@ fn cancel_replace_binding( dialog_entity: Single>, ) { info!("cancelling replace binding"); - commands.entity(*dialog_entity).despawn_recursive(); + commands.entity(*dialog_entity).despawn(); } fn apply( @@ -432,13 +430,13 @@ fn update_button_background( #[derive(Component, Default)] #[require( Button, - Node(|| Node { + Node { justify_content: JustifyContent::Center, align_items: AlignItems::Center, width: Val::Px(160.0), height: Val::Px(35.0), ..Default::default() - }), + }, )] struct SettingsButton; @@ -454,13 +452,13 @@ struct InputButton { #[derive(Component)] #[require( Button, - Node(|| Node { + Node { justify_content: JustifyContent::Center, align_items: AlignItems::Center, width: Val::Px(35.0), height: Val::Px(35.0), ..Default::default() - }), + }, )] struct DeleteButton { /// Entity with [`InputButton`]. @@ -469,16 +467,16 @@ struct DeleteButton { #[derive(Component, Default)] #[require( - Node(|| Node { + Node { position_type: PositionType::Absolute, width: Val::Percent(100.0), height: Val::Percent(100.0), align_items: AlignItems::Center, justify_content: JustifyContent::Center, ..Default::default() - }), - FocusPolicy(|| FocusPolicy::Block), - BackgroundColor(|| BackgroundColor(Color::srgba(1.0, 1.0, 1.0, 0.3))), + }, + FocusPolicy::Block, + BackgroundColor(Color::srgba(1.0, 1.0, 1.0, 0.3)), )] struct Dialog; diff --git a/examples/local_multiplayer.rs b/examples/local_multiplayer.rs index 40303c28..16c225a9 100644 --- a/examples/local_multiplayer.rs +++ b/examples/local_multiplayer.rs @@ -62,7 +62,7 @@ fn binding( gamepads: Res, mut players: Query<(&Player, &mut Actions)>, ) { - let (&player, mut actions) = players.get_mut(trigger.entity()).unwrap(); + let (&player, mut actions) = players.get_mut(trigger.target()).unwrap(); // By default actions read inputs from all gamepads, // but for local multiplayer we need assign specific @@ -101,12 +101,12 @@ fn binding( } fn apply_movement(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.translation += trigger.value.extend(0.0); } fn rotate(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.rotate_z(FRAC_PI_4); } diff --git a/examples/simple.rs b/examples/simple.rs index 6091ed63..5e01abeb 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -43,7 +43,7 @@ fn spawn(mut commands: Commands) { // It's also possible to create bindings before the insertion, // but this way you can conveniently reload bindings when settings change. fn binding(trigger: Trigger>, mut players: Query<&mut Actions>) { - let mut actions = players.get_mut(trigger.entity()).unwrap(); + let mut actions = players.get_mut(trigger.target()).unwrap(); // Bindings like WASD or sticks are very common, // so we provide built-ins to assign all keys/axes at once. @@ -66,13 +66,13 @@ fn binding(trigger: Trigger>, mut players: Query<&mut Actions>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); // The value has already been preprocessed by defined modifiers. transform.translation += trigger.value.extend(0.0); } fn rotate(trigger: Trigger>, mut players: Query<&mut Transform>) { - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); transform.rotate_z(FRAC_PI_4); } diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 6d8d9119..9da916d7 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_enhanced_input_macros" -version = "0.9.0" +version = "0.10.0-rc.3" authors = ["Hennadii Chernyshchyk "] edition = "2021" description = "Bevy Enhanced Input Macros" diff --git a/src/action_binding.rs b/src/action_binding.rs index 7dff84da..87b557e2 100644 --- a/src/action_binding.rs +++ b/src/action_binding.rs @@ -5,6 +5,7 @@ use core::{ }; use bevy::prelude::*; +use log::{debug, trace}; use crate::{ action_map::{ActionMap, ActionState}, diff --git a/src/action_instances.rs b/src/action_instances.rs index 2f6858ca..ab440767 100644 --- a/src/action_instances.rs +++ b/src/action_instances.rs @@ -9,6 +9,7 @@ use bevy::{ ecs::{component::ComponentId, world::FilteredEntityMut}, prelude::*, }; +use log::{debug, trace}; use crate::{ actions::{Actions, InputContext}, @@ -56,7 +57,7 @@ fn add_context( mut commands: Commands, mut instances: ResMut, ) { - instances.add::(&mut commands, trigger.entity()); + instances.add::(&mut commands, trigger.target()); } fn remove_context( @@ -72,7 +73,7 @@ fn remove_context( &mut reset_input, &time, &mut actions, - trigger.entity(), + trigger.target(), ); } diff --git a/src/action_map.rs b/src/action_map.rs index 50836fd0..e684b680 100644 --- a/src/action_map.rs +++ b/src/action_map.rs @@ -3,7 +3,8 @@ use core::{ fmt::Debug, }; -use bevy::{prelude::*, utils::HashMap}; +use bevy::{platform_support::collections::HashMap, prelude::*}; +use log::debug; use crate::{ action_value::ActionValue, diff --git a/src/actions.rs b/src/actions.rs index 8ad7334b..03f8630e 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -4,7 +4,7 @@ use core::{ marker::PhantomData, }; -use bevy::{prelude::*, utils::Entry}; +use bevy::{platform_support::collections::hash_map::Entry, prelude::*}; use crate::{ action_binding::ActionBinding, diff --git a/src/input_binding.rs b/src/input_binding.rs index ee971e8c..f7d99010 100644 --- a/src/input_binding.rs +++ b/src/input_binding.rs @@ -246,7 +246,7 @@ macro_rules! impl_tuple_binds { }; } -bevy::utils::all_tuples!(impl_tuple_binds, 1, 15, I); +variadics_please::all_tuples!(impl_tuple_binds, 1, 15, I); /// Bindings with assigned modifiers. /// diff --git a/src/input_condition.rs b/src/input_condition.rs index 5d783b29..4cfc4356 100644 --- a/src/input_condition.rs +++ b/src/input_condition.rs @@ -106,4 +106,4 @@ macro_rules! impl_tuple_condition { }; } -bevy::utils::all_tuples!(impl_tuple_condition, 1, 15, I); +variadics_please::all_tuples!(impl_tuple_condition, 1, 15, I); diff --git a/src/input_condition/block_by.rs b/src/input_condition/block_by.rs index 8ce3c77e..95eadf59 100644 --- a/src/input_condition/block_by.rs +++ b/src/input_condition/block_by.rs @@ -1,6 +1,7 @@ use core::{any, marker::PhantomData}; use bevy::prelude::*; +use log::warn; use super::{ConditionKind, InputCondition}; use crate::{ @@ -65,7 +66,8 @@ impl InputCondition for BlockBy { return ActionState::None; } } else { - warn_once!( + // TODO: use `warn_once` when `bevy_log` becomes `no_std` compatible. + warn!( "action `{}` is not present in context", any::type_name::() ); diff --git a/src/input_condition/chord.rs b/src/input_condition/chord.rs index 953c35bd..1b8cfca2 100644 --- a/src/input_condition/chord.rs +++ b/src/input_condition/chord.rs @@ -1,6 +1,7 @@ use core::{any, marker::PhantomData}; use bevy::prelude::*; +use log::warn; use super::{ConditionKind, InputCondition}; use crate::{ @@ -45,7 +46,8 @@ impl InputCondition for Chord { // Inherit state from the chorded action. action.state() } else { - warn_once!( + // TODO: use `warn_once` when `bevy_log` becomes `no_std` compatible. + warn!( "action `{}` is not present in context", any::type_name::() ); diff --git a/src/input_modifier.rs b/src/input_modifier.rs index 1357c9f9..69087b9a 100644 --- a/src/input_modifier.rs +++ b/src/input_modifier.rs @@ -64,4 +64,4 @@ macro_rules! impl_tuple_modifiers { }; } -bevy::utils::all_tuples!(impl_tuple_modifiers, 1, 15, I); +variadics_please::all_tuples!(impl_tuple_modifiers, 1, 15, I); diff --git a/src/input_modifier/accumulate_by.rs b/src/input_modifier/accumulate_by.rs index 46908603..c1799d35 100644 --- a/src/input_modifier/accumulate_by.rs +++ b/src/input_modifier/accumulate_by.rs @@ -1,6 +1,7 @@ use core::{any, marker::PhantomData}; use bevy::prelude::*; +use log::warn; use super::InputModifier; use crate::{ @@ -46,7 +47,8 @@ impl InputModifier for AccumulateBy { } ActionValue::Axis3D(self.value).convert(value.dim()) } else { - warn_once!( + // TODO: use `warn_once` when `bevy_log` becomes `no_std` compatible. + warn!( "action `{}` is not present in context", any::type_name::() ); diff --git a/src/input_reader.rs b/src/input_reader.rs index 6adfe78a..1459f6aa 100644 --- a/src/input_reader.rs +++ b/src/input_reader.rs @@ -4,8 +4,8 @@ use core::hash::Hash; use bevy::{ ecs::system::SystemParam, input::mouse::{AccumulatedMouseMotion, AccumulatedMouseScroll}, + platform_support::collections::HashSet, prelude::*, - utils::HashSet, }; use crate::{ diff --git a/src/lib.rs b/src/lib.rs index b82ae97b..b9091641 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -201,7 +201,7 @@ fn bind_actions( settings: Res, mut actions: Query<&mut Actions> ) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions .bind::() .to((settings.keyboard.jump, GamepadButton::South)); @@ -254,7 +254,7 @@ app.add_observer(apply_movement); /// Apply movement when `Move` action considered fired. fn apply_movement(trigger: Trigger>, mut players: Query<&mut Transform>) { // Read transform from the context entity. - let mut transform = players.get_mut(trigger.entity()).unwrap(); + let mut transform = players.get_mut(trigger.target()).unwrap(); // We defined the output of `Move` as `Vec2`, // but since translation expects `Vec3`, we extend it to 3 axes. @@ -312,8 +312,6 @@ Alternatively you can configure [`LogPlugin`](bevy::log::LogPlugin) to make it p #![no_std] -extern crate std; - extern crate alloc; // Required for the derive macro to work within the crate. diff --git a/src/preset.rs b/src/preset.rs index aefca1c9..adf8dd69 100644 --- a/src/preset.rs +++ b/src/preset.rs @@ -29,7 +29,7 @@ use crate::{ /// settings: Res, /// mut players: Query<&mut Actions>, /// ) { -/// let mut actions = players.get_mut(trigger.entity()).unwrap(); +/// let mut actions = players.get_mut(trigger.target()).unwrap(); /// actions.bind::().to(Cardinal { /// north: &settings.forward, /// east: &settings.right, diff --git a/src/trigger_tracker.rs b/src/trigger_tracker.rs index 520672c3..64f11ecc 100644 --- a/src/trigger_tracker.rs +++ b/src/trigger_tracker.rs @@ -1,6 +1,7 @@ use alloc::boxed::Box; use bevy::prelude::*; +use log::trace; use crate::{ action_map::{ActionMap, ActionState}, diff --git a/tests/accumulation.rs b/tests/accumulation.rs index 4fbc9ce6..a4592b47 100644 --- a/tests/accumulation.rs +++ b/tests/accumulation.rs @@ -50,7 +50,7 @@ fn cumulative() { } fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(Cardinal::wasd_keys()); actions.bind::().to(Cardinal::arrow_keys()); } diff --git a/tests/condition_kind.rs b/tests/condition_kind.rs index ae2e1a9b..7986e085 100644 --- a/tests/condition_kind.rs +++ b/tests/condition_kind.rs @@ -250,7 +250,7 @@ fn events_blocker() { } fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions .bind::() .to(ReleaseAction::KEY) diff --git a/tests/consume_input.rs b/tests/consume_input.rs index 1f9734ea..c0a92f68 100644 --- a/tests/consume_input.rs +++ b/tests/consume_input.rs @@ -148,7 +148,7 @@ fn consume_only_binding( trigger: Trigger>, mut actions: Query<&mut Actions>, ) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(KEY); } @@ -156,7 +156,7 @@ fn passthrough_only_binding( trigger: Trigger>, mut actions: Query<&mut Actions>, ) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(KEY); } @@ -164,7 +164,7 @@ fn consume_then_passthrough_binding( trigger: Trigger>, mut actions: Query<&mut Actions>, ) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(KEY); actions.bind::().to(KEY); } @@ -173,7 +173,7 @@ fn passthrough_then_consume_binding( trigger: Trigger>, mut actions: Query<&mut Actions>, ) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(KEY); actions.bind::().to(KEY); } diff --git a/tests/context_gamepad.rs b/tests/context_gamepad.rs index 10487235..bb5e6364 100644 --- a/tests/context_gamepad.rs +++ b/tests/context_gamepad.rs @@ -93,7 +93,7 @@ fn any_gamepad_binding( trigger: Trigger>, mut actions: Query<&mut Actions>, ) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(DummyAction::BUTTON); } @@ -101,7 +101,7 @@ fn single_gamepad_binding( trigger: Trigger>, mut actions: Query<(&mut Actions, &mut SingleGamepad)>, ) { - let (mut actions, gamepad) = actions.get_mut(trigger.entity()).unwrap(); + let (mut actions, gamepad) = actions.get_mut(trigger.target()).unwrap(); actions.set_gamepad(**gamepad); actions.bind::().to(DummyAction::BUTTON); } diff --git a/tests/dim.rs b/tests/dim.rs index 456b2cf5..244736c9 100644 --- a/tests/dim.rs +++ b/tests/dim.rs @@ -126,7 +126,7 @@ fn axis3d() { } fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(Bool::KEY); actions.bind::().to(Axis1D::KEY); actions.bind::().to(Axis2D::KEY); diff --git a/tests/instances.rs b/tests/instances.rs index 441ef89b..9abff307 100644 --- a/tests/instances.rs +++ b/tests/instances.rs @@ -21,8 +21,12 @@ fn removal() { .resource_mut::>() .press(DummyAction::KEY); + #[allow( + clippy::unused_unit, + reason = "https://github.com/rust-lang/rust-clippy/issues/14577" + )] app.world_mut() - .add_observer(|_: Trigger>| { + .add_observer(|_: Trigger>| -> () { panic!("action shouldn't trigger"); }); @@ -84,7 +88,7 @@ fn rebuild_all() { } fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(DummyAction::KEY); } diff --git a/tests/preset.rs b/tests/preset.rs index e9888677..e76a3336 100644 --- a/tests/preset.rs +++ b/tests/preset.rs @@ -130,7 +130,7 @@ const DOWN: Vec2 = Vec2::new(0.0, -1.0); const RIGHT: Vec2 = Vec2::new(1.0, 0.0); fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(( Cardinal::wasd_keys(), Cardinal::arrow_keys(), diff --git a/tests/priority.rs b/tests/priority.rs index 04b89e98..830b6736 100644 --- a/tests/priority.rs +++ b/tests/priority.rs @@ -45,13 +45,13 @@ fn prioritization() { } fn first_binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(CONSUME_KEY); actions.bind::().to(PASSTHROUGH_KEY); } fn second_binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(CONSUME_KEY); actions.bind::().to(PASSTHROUGH_KEY); } diff --git a/tests/require_reset.rs b/tests/require_reset.rs index d3d97e33..fa19af41 100644 --- a/tests/require_reset.rs +++ b/tests/require_reset.rs @@ -113,12 +113,12 @@ fn switching() { } fn first_binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(DummyAction::KEY); } fn second_binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); actions.bind::().to(DummyAction::KEY); } diff --git a/tests/state_and_value_merge.rs b/tests/state_and_value_merge.rs index 0fe67b1c..63e09ce7 100644 --- a/tests/state_and_value_merge.rs +++ b/tests/state_and_value_merge.rs @@ -256,7 +256,7 @@ fn both_levels() { } fn binding(trigger: Trigger>, mut actions: Query<&mut Actions>) { - let mut actions = actions.get_mut(trigger.entity()).unwrap(); + let mut actions = actions.get_mut(trigger.target()).unwrap(); let down = Press::default(); let release = Release::default(); From 77247098a22e6a815020ab232f0f9caaa6fc0d1c Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Thu, 10 Apr 2025 02:09:40 +0300 Subject: [PATCH 2/7] Add CI check --- .github/workflows/main.yml | 19 +++++++++++++++++++ Cargo.toml | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9f2efccf..57af0028 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,6 +67,25 @@ jobs: - name: Rustdoc run: cargo rustdoc -- -D warnings + no-std-portable-atomic: + name: Without atomics and std + runs-on: ubuntu-latest + steps: + - name: Clone repo + uses: actions/checkout@v4 + + # Use the same target platform as Bevy (Game Boy Advance). + - name: Instal stable toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: thumbv6m-none-eabi + + - name: Cache crates + uses: Swatinem/rust-cache@v2 + + - name: Check compilation + run: cargo check --target thumbv6m-none-eabi --features bevy/critical-section + doctest: name: Doctest runs-on: ubuntu-latest diff --git a/Cargo.toml b/Cargo.toml index e92cec0e..2a6cd572 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ bevy = { version = "0.16.0-rc.3", default-features = false, features = [ log = "0.4" # Directly depend on `log` like other `no_std` Bevy crates, since `bevy_log` currently requires `std`. variadics_please = "1.0" serde = { version = "1.0", default-features = false, features = ["derive"] } -bitflags = { version = "2.6", features = ["serde"] } +bitflags = { version = "2.6", default-features = false, features = ["serde"] } [dev-dependencies] bevy = { version = "0.16.0-rc.3", default-features = false, features = [ From 678e630ffd369bdb2f8d9b2d7dea1d6f19689bcf Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Thu, 10 Apr 2025 02:14:04 +0300 Subject: [PATCH 3/7] Update doc links --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b9091641..53778806 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -129,7 +129,7 @@ actions.bind::().to(( ``` You can also attach modifiers to input tuples using [`IntoBindings::with_modifiers_each`]. It works similarly to -[`IntoSystemConfigs::distributive_run_if`] in Bevy. +[`IntoScheduleConfigs::distributive_run_if`] in Bevy. ### Presets @@ -307,7 +307,7 @@ RUST_LOG=bevy_enhanced_input=debug cargo run The exact method depends on the OS shell. -Alternatively you can configure [`LogPlugin`](bevy::log::LogPlugin) to make it permanent. +Alternatively you can configure `LogPlugin` to make it permanent. */ #![no_std] From e4b4ff78005fa3c7671372329012510fe7f60240 Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Thu, 10 Apr 2025 02:42:09 +0300 Subject: [PATCH 4/7] Use `ops` for portable `powf` --- src/input_modifier/exponential_curve.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input_modifier/exponential_curve.rs b/src/input_modifier/exponential_curve.rs index fcd630b2..7cdcf728 100644 --- a/src/input_modifier/exponential_curve.rs +++ b/src/input_modifier/exponential_curve.rs @@ -56,7 +56,7 @@ impl InputModifier for ExponentialCurve { } fn apply_exp(value: f32, exp: f32) -> f32 { - value.abs().powf(exp).copysign(value) + ops::powf(value.abs(), exp).copysign(value) } #[cfg(test)] From 6545b14e166ead4836c07c9f18e03cf54b3e33ff Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Thu, 10 Apr 2025 02:43:58 +0300 Subject: [PATCH 5/7] Don't collect coverage until all tests pass --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 57af0028..856ad4fb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -144,7 +144,7 @@ jobs: codecov: name: Upload to Codecov if: github.actor != 'dependabot[bot]' - needs: [typos, format, lint, doctest, test] + needs: [typos, format, lint, no-std-portable-atomic, doctest, test] runs-on: ubuntu-latest steps: - name: Clone repo From 1e1003e2efad34304c2208048db41d6aa2e448c8 Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Sat, 12 Apr 2025 21:16:45 +0300 Subject: [PATCH 6/7] Update to RC 4 --- Cargo.toml | 10 +++++----- macros/Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2a6cd572..3adf68e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_enhanced_input" -version = "0.10.0-rc.3" +version = "0.10.0-rc.4" authors = ["Hennadii Chernyshchyk "] edition = "2024" description = "Input manager for Bevy, inspired by Unreal Engine Enhanced Input" @@ -12,8 +12,8 @@ license = "MIT OR Apache-2.0" include = ["/src", "/LICENSE*"] [dependencies] -bevy_enhanced_input_macros = { path = "macros", version = "0.10.0-rc.3" } -bevy = { version = "0.16.0-rc.3", default-features = false, features = [ +bevy_enhanced_input_macros = { path = "macros", version = "0.10.0-rc.4" } +bevy = { version = "0.16.0-rc.4", default-features = false, features = [ "serialize", ] } log = "0.4" # Directly depend on `log` like other `no_std` Bevy crates, since `bevy_log` currently requires `std`. @@ -22,10 +22,10 @@ serde = { version = "1.0", default-features = false, features = ["derive"] } bitflags = { version = "2.6", default-features = false, features = ["serde"] } [dev-dependencies] -bevy = { version = "0.16.0-rc.3", default-features = false, features = [ +bevy = { version = "0.16.0-rc.4", default-features = false, features = [ "bevy_gilrs", "bevy_gizmos", - "bevy_log", + "tracing", "bevy_ui_picking_backend", "bevy_ui", "bevy_window", diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 9da916d7..0a385f83 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_enhanced_input_macros" -version = "0.10.0-rc.3" +version = "0.10.0-rc.4" authors = ["Hennadii Chernyshchyk "] edition = "2021" description = "Bevy Enhanced Input Macros" From b86d30cb506c10bab105a39b17dd2e4be7455a98 Mon Sep 17 00:00:00 2001 From: Hennadii Chernyshchyk Date: Tue, 15 Apr 2025 18:23:55 +0300 Subject: [PATCH 7/7] Update to RC 5 --- CHANGELOG.md | 4 ++++ Cargo.toml | 10 +++++----- macros/Cargo.toml | 2 +- src/action_map.rs | 2 +- src/actions.rs | 2 +- src/input_reader.rs | 2 +- tests/instances.rs | 6 +----- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f21b4b90..322ab8cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Update to Bevy 0.16. + ## [0.9.0] - 2025-04-08 ### Added diff --git a/Cargo.toml b/Cargo.toml index 3adf68e3..1973ce6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_enhanced_input" -version = "0.10.0-rc.4" +version = "0.10.0-rc.5" authors = ["Hennadii Chernyshchyk "] edition = "2024" description = "Input manager for Bevy, inspired by Unreal Engine Enhanced Input" @@ -12,8 +12,8 @@ license = "MIT OR Apache-2.0" include = ["/src", "/LICENSE*"] [dependencies] -bevy_enhanced_input_macros = { path = "macros", version = "0.10.0-rc.4" } -bevy = { version = "0.16.0-rc.4", default-features = false, features = [ +bevy_enhanced_input_macros = { path = "macros", version = "0.10.0-rc.5" } +bevy = { version = "0.16.0-rc.5", default-features = false, features = [ "serialize", ] } log = "0.4" # Directly depend on `log` like other `no_std` Bevy crates, since `bevy_log` currently requires `std`. @@ -22,10 +22,10 @@ serde = { version = "1.0", default-features = false, features = ["derive"] } bitflags = { version = "2.6", default-features = false, features = ["serde"] } [dev-dependencies] -bevy = { version = "0.16.0-rc.4", default-features = false, features = [ +bevy = { version = "0.16.0-rc.5", default-features = false, features = [ "bevy_gilrs", "bevy_gizmos", - "tracing", + "bevy_log", "bevy_ui_picking_backend", "bevy_ui", "bevy_window", diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 0a385f83..cf0d95db 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_enhanced_input_macros" -version = "0.10.0-rc.4" +version = "0.10.0-rc.5" authors = ["Hennadii Chernyshchyk "] edition = "2021" description = "Bevy Enhanced Input Macros" diff --git a/src/action_map.rs b/src/action_map.rs index e684b680..b6d8ff75 100644 --- a/src/action_map.rs +++ b/src/action_map.rs @@ -3,7 +3,7 @@ use core::{ fmt::Debug, }; -use bevy::{platform_support::collections::HashMap, prelude::*}; +use bevy::{platform::collections::HashMap, prelude::*}; use log::debug; use crate::{ diff --git a/src/actions.rs b/src/actions.rs index 03f8630e..ef3ff868 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -4,7 +4,7 @@ use core::{ marker::PhantomData, }; -use bevy::{platform_support::collections::hash_map::Entry, prelude::*}; +use bevy::{platform::collections::hash_map::Entry, prelude::*}; use crate::{ action_binding::ActionBinding, diff --git a/src/input_reader.rs b/src/input_reader.rs index 1459f6aa..c8e2ce10 100644 --- a/src/input_reader.rs +++ b/src/input_reader.rs @@ -4,7 +4,7 @@ use core::hash::Hash; use bevy::{ ecs::system::SystemParam, input::mouse::{AccumulatedMouseMotion, AccumulatedMouseScroll}, - platform_support::collections::HashSet, + platform::collections::HashSet, prelude::*, }; diff --git a/tests/instances.rs b/tests/instances.rs index 9abff307..ce12b4ca 100644 --- a/tests/instances.rs +++ b/tests/instances.rs @@ -21,12 +21,8 @@ fn removal() { .resource_mut::>() .press(DummyAction::KEY); - #[allow( - clippy::unused_unit, - reason = "https://github.com/rust-lang/rust-clippy/issues/14577" - )] app.world_mut() - .add_observer(|_: Trigger>| -> () { + .add_observer(|_: Trigger>| { panic!("action shouldn't trigger"); });