refactor: Move mouse click to grid position logic into utils.rs

This commit is contained in:
demenik
2025-12-01 16:59:33 +01:00
parent e990957ac0
commit e840e9a78b
2 changed files with 34 additions and 43 deletions

View File

@@ -1,4 +1,5 @@
use crate::features::{ use crate::features::{
input::utils::mouse_to_grid,
phase::messages::{NextPhaseMessage, PhaseTimerPauseMessage}, phase::messages::{NextPhaseMessage, PhaseTimerPauseMessage},
pom::messages::InvalidMoveMessage, pom::messages::InvalidMoveMessage,
shop::ui::open_shop, shop::ui::open_shop,
@@ -7,6 +8,8 @@ use crate::prelude::*;
use bevy::input::mouse::MouseButton; use bevy::input::mouse::MouseButton;
use bevy::window::PrimaryWindow; use bevy::window::PrimaryWindow;
pub mod utils;
pub struct InputPlugin; pub struct InputPlugin;
impl Plugin for InputPlugin { impl Plugin for InputPlugin {
@@ -52,20 +55,7 @@ fn move_click(
} }
if mouse_btn.just_pressed(MouseButton::Right) { if mouse_btn.just_pressed(MouseButton::Right) {
let (cam, cam_transform) = *camera; let Some((x, y)) = mouse_to_grid(window, camera, config, ui_query) else {
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 {
return; return;
}; };
@@ -93,20 +83,7 @@ fn interact_click(
if keys.pressed(KeyCode::ShiftLeft) || keys.pressed(KeyCode::ShiftRight) { if keys.pressed(KeyCode::ShiftLeft) || keys.pressed(KeyCode::ShiftRight) {
return; return;
} }
let (cam, cam_transform) = *camera; let Some((x, y)) = mouse_to_grid(window, camera, config, ui_query) else {
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 {
return; return;
}; };
@@ -135,21 +112,7 @@ fn debug_click(
if !keys.pressed(KeyCode::ShiftLeft) && !keys.pressed(KeyCode::ShiftRight) { if !keys.pressed(KeyCode::ShiftLeft) && !keys.pressed(KeyCode::ShiftRight) {
return; return;
} }
let Some((x, y)) = mouse_to_grid(window, camera, config, ui_query) else {
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 {
return; return;
}; };

View File

@@ -0,0 +1,28 @@
use crate::prelude::*;
use bevy::window::PrimaryWindow;
pub fn mouse_to_grid(
window: Single<&Window, With<PrimaryWindow>>,
camera: Single<(&Camera, &GlobalTransform), With<Camera2d>>,
config: Res<GameConfig>,
ui_query: Query<(&ComputedNode, &GlobalTransform), With<Node>>,
) -> 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)
}