From 2c378d65a2018d73de236dc6716c821e5ee03f67 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Sun, 25 Aug 2024 17:57:52 -0500 Subject: [PATCH] Update leafwing-input-manager and fix various issues. --- Cargo.toml | 2 +- src/exploration.rs | 31 ++++++- src/navigation.rs | 200 +++++++++++++++++++-------------------------- src/pathfinding.rs | 161 +++++++++++++++++++++--------------- 4 files changed, 206 insertions(+), 188 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b94e8f0..3b0cbf3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ bevy_synthizer = "0.7" bevy_tts = { version = "0.9", default-features = false, features = ["tolk"] } coord_2d = "0.3" here_be_dragons = { version = "0.3", features = ["serde"] } -leafwing-input-manager = "0.14" +leafwing-input-manager = "0.15" maze_generator = "2" once_cell = "1" pathfinding = "4" diff --git a/src/exploration.rs b/src/exploration.rs index 6380c73..b6f164b 100644 --- a/src/exploration.rs +++ b/src/exploration.rs @@ -9,6 +9,7 @@ use crate::{ core::{Player, PointLike}, error::error_handler, map::Map, + navigation::NavigationAction, pathfinding::Destination, visibility::{RevealedTiles, Viewshed, Visible, VisibleEntities}, }; @@ -354,6 +355,25 @@ where Ok(()) } +fn cancel_on_navigate( + mut commands: Commands, + explorers: Query< + Entity, + ( + With>, + Changed>, + ), + >, + focused: Query>, +) { + if !explorers.is_empty() { + for entity in &focused { + println!("Clearing focus"); + commands.entity(entity).remove::(); + } + } +} + fn cleanup( mut commands: Commands, explorers: Query>, @@ -398,7 +418,7 @@ where .register_type::() .add_plugins(InputManagerPlugin::::default()) .add_systems( - Update, + FixedUpdate, ( exploration_type_change::.pipe(error_handler), exploration_type_changed_announcement::.pipe(error_handler), @@ -407,7 +427,7 @@ where .in_set(Exploration), ) .add_systems( - Update, + FixedUpdate, ( exploration_focus::, exploration_type_focus::.pipe(error_handler), @@ -417,11 +437,14 @@ where .chain() .in_set(Exploration), ) - .add_systems(Update, navigate_to_explored::.in_set(Exploration)); + .add_systems( + FixedUpdate, + (navigate_to_explored::, cancel_on_navigate).in_set(Exploration), + ); if !config.states.is_empty() { let states = config.states; for state in states { - app.configure_sets(Update, Exploration.run_if(in_state(state.clone()))) + app.configure_sets(FixedUpdate, Exploration.run_if(in_state(state.clone()))) .add_systems(OnExit(state), cleanup); } } diff --git a/src/navigation.rs b/src/navigation.rs index 67476c5..05ca405 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -3,17 +3,16 @@ use std::{collections::HashMap, error::Error, f32::consts::PI, fmt::Debug, hash: use bevy::prelude::*; use bevy_rapier2d::prelude::*; use bevy_tts::Tts; -use leafwing_input_manager::{axislike::DualAxisData, prelude::*}; +use leafwing_input_manager::prelude::*; use crate::{ core::{Angle, Area, CardinalDirection, GlobalTransformExt, Player, TransformExt}, error::error_handler, - exploration::{ExplorationFocused, Exploring}, log::Log, utils::target_and_other, }; -#[derive(Actionlike, PartialEq, Eq, Clone, Copy, Hash, Debug, Reflect)] +#[derive(PartialEq, Eq, Clone, Copy, Hash, Debug, Reflect)] pub enum NavigationAction { Move, Translate, @@ -26,6 +25,23 @@ pub enum NavigationAction { SnapReverse, } +impl Actionlike for NavigationAction { + fn input_control_kind(&self) -> InputControlKind { + match &self { + NavigationAction::Move + | NavigationAction::Translate + | NavigationAction::SetLinearVelocity => InputControlKind::DualAxis, + NavigationAction::Rotate | NavigationAction::SetAngularVelocity => { + InputControlKind::Axis + } + NavigationAction::SnapLeft + | NavigationAction::SnapRight + | NavigationAction::SnapCardinal + | NavigationAction::SnapReverse => InputControlKind::Button, + } + } +} + #[derive(Component, Clone, Copy, Debug, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct BackwardMovementFactor(pub f32); @@ -135,7 +151,6 @@ fn tick_snap_timers(time: Res