added selection for level to export
This commit is contained in:
+12
-3
@@ -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 || {
|
||||
|
||||
@@ -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| {
|
||||
|
||||
Reference in New Issue
Block a user