From 5514ecda670cfb9e5dd514f28cf38a1729c46541 Mon Sep 17 00:00:00 2001 From: Pcornat Date: Sun, 30 Oct 2022 18:59:05 +0100 Subject: [PATCH] Implementing the GUI with the SheetGui interface. --- src/main.rs | 28 ++++++++-------------- src/sheet.rs | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/main.rs b/src/main.rs index ffff12b..bf2c973 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,7 @@ use eframe::egui; +use billy_sheet::gui::SheetGui; + fn main() { let options = eframe::NativeOptions::default(); eframe::run_native( @@ -58,29 +60,17 @@ impl eframe::App for Gui { // let mut in_col1 = &mut two_columns[0]; // let mut in_col2 = &mut two_columns[1]; two_columns[0].vertical_centered_justified(|ui| { - ui.heading("Habileté"); - ui.columns(2, |columns| { - let mut column = &mut columns[0]; - { - column.label("Base"); - column.label("Carac."); - column.label("Matériel"); - } - column = &mut columns[1]; - { - let mut base = self.test.skill().base; - let mut carac = self.test.skill().carac; - let mut materiel = self.test.skill().materiel; - column.add(egui::widgets::DragValue::new(&mut base)); - column.add(egui::widgets::DragValue::new(&mut carac)); - column.add(egui::widgets::DragValue::new(&mut materiel)); - } - }) + self.test.gui_skill(ui); + self.test.gui_stamina(ui); }); two_columns[1].vertical_centered_justified(|ui| { - ui.heading("Adresse"); + self.test.gui_address(ui); + self.test.gui_luck(ui); }); }); + columns[1].vertical_centered_justified(|ui| { + self.test.secondary_stats(ui); + }); }); }); if ctx.input_mut().consume_key(egui::Modifiers::CTRL, egui::Key::Q) diff --git a/src/sheet.rs b/src/sheet.rs index e5dcb0c..e52abd0 100644 --- a/src/sheet.rs +++ b/src/sheet.rs @@ -1,3 +1,8 @@ +use eframe::egui::Ui; +use eframe::egui::widgets::DragValue; + +use crate::gui::SheetGui; + #[derive(Debug)] pub enum Classe { Warrior, @@ -66,6 +71,66 @@ impl CharacterSheet { } } +impl SheetGui for CharacterSheet { + fn shortcut(&self, ui: &mut Ui, category: &str, character_field: &Characteristic) -> (u32, u32, u32) { + let mut base = character_field.base; + let mut carac = character_field.carac; + let mut materiel = character_field.materiel; + ui.heading(category); + ui.columns(2, |columns| { + let mut ui_column = &mut columns[0]; + ui_column.label("Base"); + ui_column.label("Carac."); + ui_column.label("Matériel"); + + ui_column = &mut columns[1]; + ui_column.add(DragValue::new(&mut base)); + ui_column.add(DragValue::new(&mut carac)); + ui_column.add(DragValue::new(&mut materiel)); + }); + return (base, carac, materiel); + } + + fn gui_address(&mut self, ui: &mut Ui) { + let workaround: &CharacterSheet = self; + (self.address.base, self.address.carac, self.address.materiel) = self.shortcut(ui, "Habileté", workaround.address()); + ui.label("Ne peut dépasser 5"); + } + + fn gui_stamina(&mut self, ui: &mut Ui) { + let workaround: &CharacterSheet = self; + (self.stamina.base, self.stamina.carac, self.stamina.materiel) = self.shortcut(ui, "Endurance", workaround.stamina()); + } + + fn gui_luck(&mut self, ui: &mut Ui) { + let workaround: &CharacterSheet = self; + (self.luck.base, self.luck.carac, self.luck.materiel) = self.shortcut(ui, "Chance", workaround.luck()); + } + + fn gui_skill(&mut self, ui: &mut Ui) { + let workaround: &CharacterSheet = self; + (self.skill.base, self.skill.carac, self.skill.materiel) = self.shortcut(ui, "Habileté", workaround.skill()); + } + + fn secondary_stats(&mut self, ui: &mut Ui) { + let workaround: &CharacterSheet = self; + ui.heading("Stat. secondaires"); + ui.columns(2, |columns| { + columns[0].vertical_centered_justified(|ui| { + ui.label("Dégâts"); + ui.label("Armure"); + ui.label("Critique"); + }); + columns[1].vertical_centered_justified(|ui| { + let mut damage = workaround.damage; + let mut armor = workaround.armor; + ui.add(DragValue::new(&mut damage)); + ui.add(DragValue::new(&mut armor)); + }); + }); + } +} + #[derive(Debug)] pub struct Characteristic { characteristic_type: CharacteristicType,