Adding some nice things
This commit is contained in:
56
src/main.rs
56
src/main.rs
@@ -1,5 +1,6 @@
|
|||||||
use config::{default_save_filename, load_config, save_config, Config};
|
use config::{default_save_filename, load_config, save_config, Config};
|
||||||
use eframe::egui;
|
use eframe::egui;
|
||||||
|
use eframe::egui::Color32;
|
||||||
use infos::{Difficulty, LauncherInfo, WadInfo};
|
use infos::{Difficulty, LauncherInfo, WadInfo};
|
||||||
use native_dialog::{MessageDialog, MessageType};
|
use native_dialog::{MessageDialog, MessageType};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
@@ -86,33 +87,27 @@ impl RustDoomLauncher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn get_launcher_and_command(&self, show_dialogs: bool) -> Result<(&str, Vec<&str>), MyErrors> {
|
fn get_launcher_and_command(&self, show_dialogs: bool) -> Result<(&str, Vec<&str>), MyErrors> {
|
||||||
let launcher = match self.selected_launcher {
|
let (launcher, iwad) = match self.launcher_and_iwad() {
|
||||||
Some(l) => self.all_launchers.get(l).unwrap(),
|
Err(e) => {
|
||||||
None => {
|
let text = match e {
|
||||||
if show_dialogs {
|
MyErrors::NoIwad => {
|
||||||
MessageDialog::new()
|
"an IWAD"
|
||||||
.set_type(MessageType::Error)
|
},
|
||||||
.set_title("I can't let you do that")
|
MyErrors::NoLauncher => {
|
||||||
.set_text("You didn't pick a launcher!\nPlease do that")
|
"a launcher"
|
||||||
.show_alert()
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
return Err(MyErrors::NoLauncher);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let iwad = match self.selected_iwad {
|
|
||||||
Some(i) => self.all_iwads.get(i).unwrap(),
|
|
||||||
None => {
|
|
||||||
if show_dialogs {
|
if show_dialogs {
|
||||||
MessageDialog::new()
|
MessageDialog::new()
|
||||||
.set_type(MessageType::Error)
|
.set_type(MessageType::Error)
|
||||||
.set_title("I can't let you do that")
|
.set_title("I can't let you do that")
|
||||||
.set_text("You didn't pick an IWAD!\nPlease do that")
|
.set_text(&format!("You didn't pick {}!\nPlease do that", text))
|
||||||
.show_alert()
|
.show_alert()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
return Err(MyErrors::NoIwad);
|
return Err(e);
|
||||||
}
|
},
|
||||||
|
Ok((l, i)) => (l, i)
|
||||||
};
|
};
|
||||||
let mut command = vec!["-iwad", iwad.path.to_str().unwrap()];
|
let mut command = vec!["-iwad", iwad.path.to_str().unwrap()];
|
||||||
for pwad_index in &self.selected_pwads {
|
for pwad_index in &self.selected_pwads {
|
||||||
@@ -156,6 +151,22 @@ impl RustDoomLauncher {
|
|||||||
Command::new(launcher).args(command).spawn();
|
Command::new(launcher).args(command).spawn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn launcher_and_iwad(&self) -> Result<(&LauncherInfo,& WadInfo), MyErrors> {
|
||||||
|
let launcher = match self.selected_launcher {
|
||||||
|
Some(l) => self.all_launchers.get(l).unwrap(),
|
||||||
|
None => {
|
||||||
|
return Err(MyErrors::NoLauncher);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let iwad = match self.selected_iwad {
|
||||||
|
Some(i) => self.all_iwads.get(i).unwrap(),
|
||||||
|
None => {
|
||||||
|
return Err(MyErrors::NoIwad);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Ok((launcher, iwad))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl eframe::App for RustDoomLauncher {
|
impl eframe::App for RustDoomLauncher {
|
||||||
@@ -177,7 +188,11 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
egui::containers::panel::CentralPanel::default().show(ctx, |ui| {
|
egui::containers::panel::CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.heading("RustDoomLauncher");
|
ui.heading("RustDoomLauncher");
|
||||||
if ui.button("PLAY SOME DOOM!").clicked() {
|
let button = match self.launcher_and_iwad() {
|
||||||
|
Err(_) => egui::Button::new("PLAY SOME DOOM!"),
|
||||||
|
Ok((_, _)) => egui::Button::new("PLAY SOME DOOM!").fill(Color32::DARK_GREEN)
|
||||||
|
};
|
||||||
|
if ui.add(button).clicked() {
|
||||||
self.launch_doom();
|
self.launch_doom();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -217,7 +232,7 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
ui.separator();
|
ui.separator();
|
||||||
ui.vertical(|ui| {
|
ui.vertical(|ui| {
|
||||||
ui.set_min_width(100.0);
|
ui.set_min_width(100.0);
|
||||||
ui.label("PWADs and Mods");
|
ui.label("PWADs");
|
||||||
for (pos, pwad) in self.all_pwads.iter().enumerate() {
|
for (pos, pwad) in self.all_pwads.iter().enumerate() {
|
||||||
if ui
|
if ui
|
||||||
.add(egui::SelectableLabel::new(
|
.add(egui::SelectableLabel::new(
|
||||||
@@ -267,6 +282,7 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// TODO - add Mod button - or probably just rethink the whole thing
|
||||||
if ui.button("Add PWAD or Mod").clicked() {
|
if ui.button("Add PWAD or Mod").clicked() {
|
||||||
if let Some(path) = rfd::FileDialog::new().pick_file() {
|
if let Some(path) = rfd::FileDialog::new().pick_file() {
|
||||||
self.all_pwads.push(WadInfo {
|
self.all_pwads.push(WadInfo {
|
||||||
|
|||||||
Reference in New Issue
Block a user