basic start and end markers

This commit is contained in:
grimsace
2026-04-14 10:31:26 -05:00
parent a90d4498e1
commit 8a8dedd775
4 changed files with 442 additions and 2 deletions
+81
View File
@@ -8,6 +8,7 @@ enum Tab {
Generate,
Layout,
Add,
MonstersAndTraps,
}
impl Default for Tab {
@@ -131,6 +132,8 @@ pub struct UiSettings {
pub export_show_grid: bool,
pub add_tool: AddTool,
pub add_text_value: String,
pub start_marker_size: usize,
pub end_marker_size: usize,
active_tab: Tab,
}
@@ -170,6 +173,8 @@ impl Default for UiSettings {
export_show_grid: true,
add_tool: AddTool::None,
add_text_value: "Text".to_string(),
start_marker_size: 1,
end_marker_size: 1,
active_tab: Tab::Generate,
}
}
@@ -185,6 +190,8 @@ pub enum AddTool {
LockedDoor,
SecretDoor,
Text,
StartMarker,
EndMarker,
}
#[derive(Debug, Clone, Copy, Default)]
@@ -213,6 +220,7 @@ pub fn draw_side_panel(
let is_generate = settings.active_tab == Tab::Generate;
let is_layout = settings.active_tab == Tab::Layout;
let is_add = settings.active_tab == Tab::Add;
let is_monsters_and_traps = settings.active_tab == Tab::MonstersAndTraps;
if ui.selectable_label(is_generate, "Generate").clicked() {
settings.active_tab = Tab::Generate;
@@ -223,6 +231,12 @@ pub fn draw_side_panel(
if ui.selectable_label(is_add, "Add").clicked() {
settings.active_tab = Tab::Add;
}
if ui
.selectable_label(is_monsters_and_traps, "Monsters & Traps")
.clicked()
{
settings.active_tab = Tab::MonstersAndTraps;
}
});
ui.separator();
@@ -230,6 +244,7 @@ pub fn draw_side_panel(
Tab::Generate => draw_generate_tab(ui, settings, &mut result, export_in_progress),
Tab::Layout => draw_layout_tab(ui, settings, &mut result),
Tab::Add => draw_add_tab(ui, settings),
Tab::MonstersAndTraps => draw_monsters_and_traps_tab(ui, settings),
}
});
@@ -744,6 +759,72 @@ fn draw_add_tab(ui: &mut egui::Ui, settings: &mut UiSettings) {
ui.label("Note: Left click on the canvas to place the text.");
response
}
AddTool::StartMarker | AddTool::EndMarker => {
ui.label("Use the Monsters & Traps tab to place start and end markers.")
}
AddTool::None => ui.label("Select a tool to add rooms or corridors."),
};
}
fn draw_monsters_and_traps_tab(ui: &mut egui::Ui, settings: &mut UiSettings) {
ui.label(RichText::new("Start / End Markers").strong());
ui.add_space(8.0);
ui.label("Start Marker Size");
ui.horizontal(|ui| {
ui.add(egui::Slider::new(&mut settings.start_marker_size, 1..=10).show_value(false));
ui.add(
egui::DragValue::new(&mut settings.start_marker_size)
.speed(1.0)
.range(1..=10),
);
});
ui.add_space(4.0);
if ui
.selectable_label(settings.add_tool == AddTool::StartMarker, "Place Start Marker")
.clicked()
{
settings.add_tool = if settings.add_tool == AddTool::StartMarker {
AddTool::None
} else {
AddTool::StartMarker
};
}
ui.add_space(10.0);
ui.label("End Marker Size");
ui.horizontal(|ui| {
ui.add(egui::Slider::new(&mut settings.end_marker_size, 1..=10).show_value(false));
ui.add(
egui::DragValue::new(&mut settings.end_marker_size)
.speed(1.0)
.range(1..=10),
);
});
ui.add_space(4.0);
if ui
.selectable_label(settings.add_tool == AddTool::EndMarker, "Place End Marker")
.clicked()
{
settings.add_tool = if settings.add_tool == AddTool::EndMarker {
AddTool::None
} else {
AddTool::EndMarker
};
}
ui.add_space(8.0);
match settings.add_tool {
AddTool::StartMarker => {
ui.label("Click the grid to place the start marker. It is centered on the clicked cell.");
}
AddTool::EndMarker => {
ui.label("Click the grid to place the end marker. It is centered on the clicked cell.");
}
_ => {
ui.label("Monsters, traps, and bosses will live here next. For now, place start and end markers.");
}
}
}