added selection for level to export

This commit is contained in:
grimsace
2026-04-28 12:11:24 -05:00
parent dddf27ea6b
commit 773af39118
2 changed files with 34 additions and 4 deletions
+12 -3
View File
@@ -114,7 +114,12 @@ impl Drop for DungeonApp {
impl eframe::App for DungeonApp { impl eframe::App for DungeonApp {
// Render UI, handle input, and update app state each frame. // Render UI, handle input, and update app state each frame.
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
let panel_result = draw_side_panel(ctx, &mut self.settings, self.export_rx.is_some()); let panel_result = draw_side_panel(
ctx,
&mut self.settings,
self.export_rx.is_some(),
self.levels.len(),
);
let undo_requested = ctx.input(|i| i.modifiers.command && i.key_pressed(egui::Key::Z)); let undo_requested = ctx.input(|i| i.modifiers.command && i.key_pressed(egui::Key::Z));
let redo_requested = ctx.input(|i| { let redo_requested = ctx.input(|i| {
(i.modifiers.command && i.key_pressed(egui::Key::Y)) (i.modifiers.command && i.key_pressed(egui::Key::Y))
@@ -218,8 +223,12 @@ impl eframe::App for DungeonApp {
} }
} }
if self.settings.active_level_index < self.levels.len() { let export_idx = self
let layout = self.levels[self.settings.active_level_index].clone(); .settings
.export_level_index
.min(self.levels.len().saturating_sub(1));
if export_idx < self.levels.len() {
let layout = self.levels[export_idx].clone();
let settings = self.settings.clone(); let settings = self.settings.clone();
let (tx, rx) = mpsc::channel(); let (tx, rx) = mpsc::channel();
thread::spawn(move || { thread::spawn(move || {
+22 -1
View File
@@ -145,6 +145,7 @@ pub struct UiSettings {
pub min_levels: usize, pub min_levels: usize,
pub max_levels: usize, pub max_levels: usize,
pub active_level_index: usize, pub active_level_index: usize,
pub export_level_index: usize,
pub trap_frequency_percent: usize, pub trap_frequency_percent: usize,
pub min_traps_per_area: usize, pub min_traps_per_area: usize,
pub max_traps_per_area: usize, pub max_traps_per_area: usize,
@@ -223,6 +224,7 @@ impl Default for UiSettings {
max_stairs_per_level: 2, max_stairs_per_level: 2,
sync_stairs_across_levels: false, sync_stairs_across_levels: false,
manual_stair_size: 2, manual_stair_size: 2,
export_level_index: 0,
active_tab: Tab::Generate, active_tab: Tab::Generate,
} }
} }
@@ -260,6 +262,7 @@ pub fn draw_side_panel(
ctx: &egui::Context, ctx: &egui::Context,
settings: &mut UiSettings, settings: &mut UiSettings,
export_in_progress: bool, export_in_progress: bool,
num_levels: usize,
) -> SidePanelResult { ) -> SidePanelResult {
// Render the left side panel and return user interaction results. // Render the left side panel and return user interaction results.
let mut result = SidePanelResult::default(); let mut result = SidePanelResult::default();
@@ -307,7 +310,7 @@ pub fn draw_side_panel(
match settings.active_tab { match settings.active_tab {
Tab::Generate => { Tab::Generate => {
draw_generate_tab(ui, settings, &mut result, export_in_progress) draw_generate_tab(ui, settings, &mut result, export_in_progress, num_levels)
} }
Tab::Layout => draw_layout_tab(ui, settings, &mut result), Tab::Layout => draw_layout_tab(ui, settings, &mut result),
Tab::StartAndEnd => draw_start_and_end_tab(ui, settings, &mut result), Tab::StartAndEnd => draw_start_and_end_tab(ui, settings, &mut result),
@@ -326,6 +329,7 @@ fn draw_generate_tab(
settings: &mut UiSettings, settings: &mut UiSettings,
result: &mut SidePanelResult, result: &mut SidePanelResult,
export_in_progress: bool, export_in_progress: bool,
num_levels: usize,
) { ) {
ui.label(RichText::new("Grid Settings").strong()); ui.label(RichText::new("Grid Settings").strong());
ui.add_space(8.0); ui.add_space(8.0);
@@ -424,6 +428,23 @@ fn draw_generate_tab(
}); });
}); });
ui.add_space(4.0);
let level_count = num_levels;
ui.horizontal(|ui| {
ui.label("Level");
egui::ComboBox::from_id_salt("export_level")
.selected_text(format!("Level {}", settings.export_level_index))
.show_ui(ui, |ui| {
for i in 0..level_count {
ui.selectable_value(
&mut settings.export_level_index,
i,
format!("Level {}", i),
);
}
});
});
if settings.export_format == ExportFormat::Folder { if settings.export_format == ExportFormat::Folder {
ui.add_space(6.0); ui.add_space(6.0);
ui.horizontal(|ui| { ui.horizontal(|ui| {