Added GUI for wads, pwads, and launcher

This commit is contained in:
2023-05-31 22:58:06 +01:00
parent 0ea24dd987
commit b871c48c60

View File

@@ -16,6 +16,7 @@ struct RustDoomLauncher {
launchers: Vec<String>, launchers: Vec<String>,
all_iwads: Vec<String>, all_iwads: Vec<String>,
all_pwads: Vec<String>, all_pwads: Vec<String>,
selected_launcher: Option<String>,
selected_iwad: Option<String>, selected_iwad: Option<String>,
selected_pwads: Vec<String>, selected_pwads: Vec<String>,
} }
@@ -23,9 +24,18 @@ struct RustDoomLauncher {
impl Default for RustDoomLauncher { impl Default for RustDoomLauncher {
fn default() -> Self { fn default() -> Self {
Self { Self {
launchers: Vec::new(), launchers: vec!["GZDoom 1.9".to_string(), "PRBoom+".to_string()],
all_iwads: vec!["DOOM2.WAD".to_string(), "DOOM.WAD".to_string(), "FREEDOOM.WAD".to_string()], all_iwads: vec![
all_pwads: Vec::new(), "DOOM2.WAD".to_string(),
"DOOM.WAD".to_string(),
"FREEDOOM.WAD".to_string(),
],
all_pwads: vec![
"DOOM2.WAD".to_string(),
"DOOM.WAD".to_string(),
"FREEDOOM.WAD".to_string(),
],
selected_launcher: None,
selected_iwad: None, selected_iwad: None,
selected_pwads: Vec::new(), selected_pwads: Vec::new(),
} }
@@ -36,6 +46,26 @@ impl eframe::App for RustDoomLauncher {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::containers::panel::CentralPanel::default().show(ctx, |ui| { egui::containers::panel::CentralPanel::default().show(ctx, |ui| {
ui.heading("RustDoomLauncher"); ui.heading("RustDoomLauncher");
ui.horizontal(|ui| {
ui.label("Launcers");
if ui.button("Add Launcher").clicked() {
// Open file selector
// Add to the launchers list
// done?
}
});
for launcher in &self.launchers {
if ui
.add(egui::SelectableLabel::new(
self.selected_launcher.is_some()
&& self.selected_launcher.as_ref().unwrap() == launcher,
launcher,
))
.clicked()
{
self.selected_launcher = Some(launcher.to_string());
}
}
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.label("IWADs"); ui.label("IWADs");
if ui.button("Add IWAD").clicked() { if ui.button("Add IWAD").clicked() {
@@ -45,10 +75,63 @@ impl eframe::App for RustDoomLauncher {
} }
}); });
for iwad in &self.all_iwads { for iwad in &self.all_iwads {
if ui.add(egui::SelectableLabel::new(self.selected_iwad.is_some() && self.selected_iwad.as_ref().unwrap() == iwad, iwad)).clicked() { if ui
.add(egui::SelectableLabel::new(
self.selected_iwad.is_some()
&& self.selected_iwad.as_ref().unwrap() == iwad,
iwad,
))
.clicked()
{
self.selected_iwad = Some(iwad.to_string()); self.selected_iwad = Some(iwad.to_string());
} }
} }
ui.horizontal(|ui| {
ui.label("PWADs");
if ui.button("Add PWAD").clicked() {
// Open file selector
// Add to the PWADS list
// done?
}
});
for pwad in &self.all_pwads {
if ui
.add(egui::SelectableLabel::new(
self.selected_pwads.contains(pwad),
pwad,
))
.clicked()
{
self.selected_pwads.push(pwad.to_string());
}
}
ui.label("Command");
ui.horizontal(|ui| {
// I don't actually think using SelectableLabel is correct here - but it'll at least do the highlighting when hovered correctly
if let Some(l) = &self.selected_launcher {
if ui.add(egui::SelectableLabel::new(false, l)).clicked() {
self.selected_launcher = None;
}
} else {
ui.label("Select a launcher plz");
}
if let Some(i) = &self.selected_iwad {
if ui.add(egui::SelectableLabel::new(false, i)).clicked() {
self.selected_iwad = None;
}
} else {
ui.label("Select an iwad plz");
}
// This feels ver much more C-like, but I think it works?
let mut pos = 0 as usize;
while pos < self.selected_pwads.len() {
if ui.add(egui::SelectableLabel::new(false, self.selected_pwads[pos].clone())).clicked() {
self.selected_pwads.remove(pos);
continue;
}
pos += 1;
}
});
}); });
} }
} }