From e840e9a78b4c60fb498ad603927cdc2005c383b7 Mon Sep 17 00:00:00 2001 From: demenik Date: Mon, 1 Dec 2025 16:59:33 +0100 Subject: [PATCH] refactor: Move mouse click to grid position logic into utils.rs --- src/features/input/mod.rs | 49 +++++-------------------------------- src/features/input/utils.rs | 28 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 43 deletions(-) create mode 100644 src/features/input/utils.rs diff --git a/src/features/input/mod.rs b/src/features/input/mod.rs index 72fe940..449c7f0 100644 --- a/src/features/input/mod.rs +++ b/src/features/input/mod.rs @@ -1,4 +1,5 @@ use crate::features::{ + input::utils::mouse_to_grid, phase::messages::{NextPhaseMessage, PhaseTimerPauseMessage}, pom::messages::InvalidMoveMessage, shop::ui::open_shop, @@ -7,6 +8,8 @@ use crate::prelude::*; use bevy::input::mouse::MouseButton; use bevy::window::PrimaryWindow; +pub mod utils; + pub struct InputPlugin; impl Plugin for InputPlugin { @@ -52,20 +55,7 @@ fn move_click( } if mouse_btn.just_pressed(MouseButton::Right) { - let (cam, cam_transform) = *camera; - - let Some(cursor_pos) = window.cursor_position() else { - return; - }; - if ui_blocks(window, cursor_pos, ui_query) { - return; - } - let Ok(world_pos) = cam.viewport_to_world(cam_transform, cursor_pos) else { - return; - }; - let Ok((x, y)) = - world_to_grid_coords(world_pos.origin, config.grid_width, config.grid_height) - else { + let Some((x, y)) = mouse_to_grid(window, camera, config, ui_query) else { return; }; @@ -93,20 +83,7 @@ fn interact_click( if keys.pressed(KeyCode::ShiftLeft) || keys.pressed(KeyCode::ShiftRight) { return; } - let (cam, cam_transform) = *camera; - - let Some(cursor_pos) = window.cursor_position() else { - return; - }; - if ui_blocks(window, cursor_pos, ui_query) { - return; - } - let Ok(world_pos) = cam.viewport_to_world(cam_transform, cursor_pos) else { - return; - }; - let Ok((x, y)) = - world_to_grid_coords(world_pos.origin, config.grid_width, config.grid_height) - else { + let Some((x, y)) = mouse_to_grid(window, camera, config, ui_query) else { return; }; @@ -135,21 +112,7 @@ fn debug_click( if !keys.pressed(KeyCode::ShiftLeft) && !keys.pressed(KeyCode::ShiftRight) { return; } - - let (cam, cam_transform) = *camera; - - let Some(cursor_pos) = window.cursor_position() else { - return; - }; - if ui_blocks(window, cursor_pos, ui_query) { - return; - } - let Ok(world_pos) = cam.viewport_to_world(cam_transform, cursor_pos) else { - return; - }; - let Ok((x, y)) = - world_to_grid_coords(world_pos.origin, config.grid_width, config.grid_height) - else { + let Some((x, y)) = mouse_to_grid(window, camera, config, ui_query) else { return; }; diff --git a/src/features/input/utils.rs b/src/features/input/utils.rs new file mode 100644 index 0000000..7f38b6e --- /dev/null +++ b/src/features/input/utils.rs @@ -0,0 +1,28 @@ +use crate::prelude::*; +use bevy::window::PrimaryWindow; + +pub fn mouse_to_grid( + window: Single<&Window, With>, + camera: Single<(&Camera, &GlobalTransform), With>, + config: Res, + ui_query: Query<(&ComputedNode, &GlobalTransform), With>, +) -> Option<(u32, u32)> { + let (cam, cam_transform) = *camera; + + let Some(cursor_pos) = window.cursor_position() else { + return None; + }; + if ui_blocks(window, cursor_pos, ui_query) { + return None; + } + let Ok(world_pos) = cam.viewport_to_world(cam_transform, cursor_pos) else { + return None; + }; + let Ok(grid_pos) = + world_to_grid_coords(world_pos.origin, config.grid_width, config.grid_height) + else { + return None; + }; + + Some(grid_pos) +}