From e990957ac067567c72f37def0297834f960b90b6 Mon Sep 17 00:00:00 2001 From: demenik Date: Mon, 1 Dec 2025 16:52:46 +0100 Subject: [PATCH] fix: Update toggle TileState debug bind to Shift + LMB instead of only LMB --- README.md | 2 +- src/features/input/mod.rs | 71 +++++++++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 73f0c50..f69b5e6 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ cargo run ### Hidden binds (Only available in the debug build) - `Shift + Enter`: Duration of the current phase is set to 3 seconds. -- `Left Mouse Button` on Tile: Rotate tile state. +- `Shift + Left Mouse Button` on Tile: Toggle tile state. - `Shift + Arrow Up`: Add one berry to your inventory - `Shift + Arrow Down`: Remove one berry from your inventory diff --git a/src/features/input/mod.rs b/src/features/input/mod.rs index 56d80ee..72fe940 100644 --- a/src/features/input/mod.rs +++ b/src/features/input/mod.rs @@ -21,6 +21,9 @@ impl Plugin for InputPlugin { interact_click.run_if(in_state(AppState::GameScreen)), ); + #[cfg(debug_assertions)] + app.add_systems(Update, debug_click.run_if(in_state(AppState::GameScreen))); + app.add_message::(); app.add_systems( Update, @@ -74,14 +77,12 @@ fn move_click( fn interact_click( mut interact_messages: MessageWriter, mouse_btn: Res>, + keys: Res>, window: Single<&Window, With>, camera: Single<(&Camera, &GlobalTransform), With>, config: Res, phase: Res, ui_query: Query<(&ComputedNode, &GlobalTransform), With>, - // for debug - grid: ResMut, - tile_query: Query<&mut TileState>, ) { match phase.0 { Phase::Focus { .. } => return, @@ -89,6 +90,9 @@ fn interact_click( } if mouse_btn.just_pressed(MouseButton::Left) { + if keys.pressed(KeyCode::ShiftLeft) || keys.pressed(KeyCode::ShiftRight) { + return; + } let (cam, cam_transform) = *camera; let Some(cursor_pos) = window.cursor_position() else { @@ -108,19 +112,58 @@ fn interact_click( println!("Interact Click: ({}, {})", x, y); interact_messages.write(InteractStartMessage { x, y }); + } +} - if cfg!(debug_assertions) { - grid.map_tile_state( - (x, y), - |state| match state { - TileState::Unclaimed => TileState::Empty, - TileState::Empty => TileState::Occupied, - TileState::Occupied => TileState::Unclaimed, - }, - tile_query, - ) - .unwrap_or_else(|_| ()); +fn debug_click( + mouse_btn: Res>, + keys: Res>, + window: Single<&Window, With>, + camera: Single<(&Camera, &GlobalTransform), With>, + config: Res, + phase: Res, + ui_query: Query<(&ComputedNode, &GlobalTransform), With>, + grid: Res, + tile_query: Query<&mut TileState>, +) { + match phase.0 { + Phase::Focus { .. } => return, + _ => {} + } + + if mouse_btn.just_pressed(MouseButton::Left) { + 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 { + return; + }; + + println!("Debug Toggle Click: ({}, {})", x, y); + grid.map_tile_state( + (x, y), + |state| match state { + TileState::Unclaimed => TileState::Empty, + TileState::Empty => TileState::Occupied, + TileState::Occupied => TileState::Unclaimed, + }, + tile_query, + ) + .unwrap_or_else(|_| ()); } }