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 {
|
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 || {
|
||||||
|
|||||||
@@ -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| {
|
||||||
|
|||||||
Reference in New Issue
Block a user