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 {
// Render UI, handle input, and update app state each 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 redo_requested = ctx.input(|i| {
(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 layout = self.levels[self.settings.active_level_index].clone();
let export_idx = self
.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 (tx, rx) = mpsc::channel();
thread::spawn(move || {
+22 -1
View File
@@ -145,6 +145,7 @@ pub struct UiSettings {
pub min_levels: usize,
pub max_levels: usize,
pub active_level_index: usize,
pub export_level_index: usize,
pub trap_frequency_percent: usize,
pub min_traps_per_area: usize,
pub max_traps_per_area: usize,
@@ -223,6 +224,7 @@ impl Default for UiSettings {
max_stairs_per_level: 2,
sync_stairs_across_levels: false,
manual_stair_size: 2,
export_level_index: 0,
active_tab: Tab::Generate,
}
}
@@ -260,6 +262,7 @@ pub fn draw_side_panel(
ctx: &egui::Context,
settings: &mut UiSettings,
export_in_progress: bool,
num_levels: usize,
) -> SidePanelResult {
// Render the left side panel and return user interaction results.
let mut result = SidePanelResult::default();
@@ -307,7 +310,7 @@ pub fn draw_side_panel(
match settings.active_tab {
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::StartAndEnd => draw_start_and_end_tab(ui, settings, &mut result),
@@ -326,6 +329,7 @@ fn draw_generate_tab(
settings: &mut UiSettings,
result: &mut SidePanelResult,
export_in_progress: bool,
num_levels: usize,
) {
ui.label(RichText::new("Grid Settings").strong());
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 {
ui.add_space(6.0);
ui.horizontal(|ui| {