From c588f7d1ae78fcaed002b40cedda6ae4592492c6 Mon Sep 17 00:00:00 2001 From: grimsace Date: Thu, 12 Mar 2026 11:12:50 -0500 Subject: [PATCH] added indicators for hovering over corredors --- src/main.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5bc9fc6..db9464f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,6 +32,7 @@ struct DungeonApp { add_corridor_drag: Option, resize_state: Option, hover_room_idx: Option, + hover_corridor_idx: Option, } impl Default for DungeonApp { @@ -60,6 +61,7 @@ impl Default for DungeonApp { add_corridor_drag: None, resize_state: None, hover_room_idx: None, + hover_corridor_idx: None, } } } @@ -170,7 +172,7 @@ impl eframe::App for DungeonApp { let (response, painter) = ui.allocate_painter(available, egui::Sense::click_and_drag()); let canvas = response.rect.shrink(12.0); let geometry = draw_grid(&painter, canvas, self.settings.cols, self.settings.rows); - self.update_hover_room(ctx, &geometry); + self.update_hover_targets(ctx, &geometry); let resizing = self.handle_resize(ctx, &response, &geometry); if !resizing { self.handle_drag(ctx, &response, &geometry); @@ -190,6 +192,7 @@ impl eframe::App for DungeonApp { ); self.draw_add_overlay(&painter, &geometry); self.draw_resize_overlay(&painter, &geometry); + self.draw_corridor_hover_overlay(&painter, &geometry); }); } } @@ -545,15 +548,22 @@ impl DungeonApp { self.refresh_doors(); } - fn update_hover_room(&mut self, ctx: &egui::Context, geometry: &GridGeometry) { + fn update_hover_targets(&mut self, ctx: &egui::Context, geometry: &GridGeometry) { let Some(pointer_pos) = ctx.pointer_hover_pos() else { self.hover_room_idx = None; + self.hover_corridor_idx = None; return; }; if let Some((room_idx, _, _)) = self.room_at_pointer(pointer_pos, geometry) { self.hover_room_idx = Some(room_idx); + self.hover_corridor_idx = None; } else { self.hover_room_idx = None; + if let Some(corridor_drag) = self.corridor_drag_at_pointer(pointer_pos, geometry) { + self.hover_corridor_idx = Some(corridor_drag.corridor_index); + } else { + self.hover_corridor_idx = None; + } } } @@ -750,6 +760,23 @@ impl DungeonApp { } } + fn draw_corridor_hover_overlay(&self, painter: &egui::Painter, geometry: &GridGeometry) { + let Some(idx) = self.hover_corridor_idx else { + return; + }; + let Some(corridor) = self.layout.corridors.get(idx) else { + return; + }; + + let color = Color32::from_gray(170); + let stroke = Stroke::new(2.0, color); + for pair in corridor.path.windows(2) { + let a = cell_center(geometry, pair[0].0, pair[0].1); + let b = cell_center(geometry, pair[1].0, pair[1].1); + draw_dashed_line(painter, a, b, stroke, 6.0, 6.0); + } + } + fn delete_at_pointer(&mut self, pointer_pos: egui::Pos2, geometry: &GridGeometry) { if let Some((room_idx, _, _)) = self.room_at_pointer(pointer_pos, geometry) { self.delete_room(room_idx);