From 27868c7f1fda4d42b5dadf038189d6488bb8a666 Mon Sep 17 00:00:00 2001 From: Pcornat Date: Thu, 5 Feb 2026 18:51:04 +0100 Subject: [PATCH] Adding _mut methods to change base, carac and materiel fields --- src/sheet.rs | 70 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/src/sheet.rs b/src/sheet.rs index 1779c0a..c8085d8 100644 --- a/src/sheet.rs +++ b/src/sheet.rs @@ -57,6 +57,13 @@ impl CharacterSheet { unreachable!() } } + fn address_mut(&mut self) -> &mut Characteristic { + if let CharacteristicType::Address(addr) = &mut self.address { + addr + } else { + unreachable!() + } + } pub fn stamina(&self) -> &Characteristic { if let CharacteristicType::Stamina(sta) = &self.stamina { sta @@ -64,6 +71,13 @@ impl CharacterSheet { unreachable!() } } + fn stamina_mut(&mut self) -> &mut Characteristic { + if let CharacteristicType::Stamina(sta) = &mut self.stamina { + sta + } else { + unreachable!() + } + } pub fn luck(&self) -> &Characteristic { if let CharacteristicType::Luck(luck) = &self.luck { luck @@ -71,6 +85,13 @@ impl CharacterSheet { unreachable!() } } + fn luck_mut(&mut self) -> &mut Characteristic { + if let CharacteristicType::Luck(luck) = &mut self.luck { + luck + } else { + unreachable!() + } + } pub fn skill(&self) -> &Characteristic { if let CharacteristicType::Skill(sk) = &self.skill { sk @@ -78,6 +99,14 @@ impl CharacterSheet { unreachable!() } } + + fn skill_mut(&mut self) -> &mut Characteristic { + if let CharacteristicType::Skill(sk) = &mut self.skill { + sk + } else { + unreachable!() + } + } pub fn health(&self) -> u32 { self.health } @@ -95,6 +124,17 @@ impl CharacterSheet { } } +impl CharacteristicType { + fn check(&self) { + match self { + CharacteristicType::Address(_) => println!("Rules for address"), + CharacteristicType::Stamina(_) => println!("Rules for stamina"), + CharacteristicType::Luck(_) => println!("Rules for luck"), + CharacteristicType::Skill(_) => println!("Rules for skill"), + } + } +} + impl SheetGui for CharacterSheet { fn shortcut( &self, @@ -123,27 +163,39 @@ impl SheetGui for CharacterSheet { fn gui_address(&mut self, ui: &mut Ui) { let workaround = self as &CharacterSheet; - (self.address.base, self.address.carac, self.address.materiel) = - self.shortcut(ui, "Adresse", workaround.address()); + ( + self.address_mut().base, + self.address_mut().carac, + self.address_mut().materiel, + ) = self.shortcut(ui, "Adresse", workaround.address()); ui.label("Ne peut dépasser 5"); } fn gui_stamina(&mut self, ui: &mut Ui) { let workaround = self as &CharacterSheet; - (self.stamina.base, self.stamina.carac, self.stamina.materiel) = - self.shortcut(ui, "Endurance", workaround.stamina()); + ( + self.stamina_mut().base, + self.stamina_mut().carac, + self.stamina_mut().materiel, + ) = self.shortcut(ui, "Endurance", workaround.stamina()); } fn gui_luck(&mut self, ui: &mut Ui) { let workaround = self as &CharacterSheet; - (self.luck.base, self.luck.carac, self.luck.materiel) = - self.shortcut(ui, "Chance", workaround.luck()); + ( + self.luck_mut().base, + self.luck_mut().carac, + self.luck_mut().materiel, + ) = self.shortcut(ui, "Chance", workaround.luck()); } fn gui_skill(&mut self, ui: &mut Ui) { let workaround = self as &CharacterSheet; - (self.skill.base, self.skill.carac, self.skill.materiel) = - self.shortcut(ui, "Habileté", workaround.skill()); + ( + self.skill_mut().base, + self.skill_mut().carac, + self.skill_mut().materiel, + ) = self.shortcut(ui, "Habileté", workaround.skill()); } fn secondary_stats(&mut self, ui: &mut Ui) { @@ -162,6 +214,8 @@ impl SheetGui for CharacterSheet { ui.add(DragValue::new(&mut armor)); }); ui.label("Critique"); + self.damage = damage; + self.armor = armor; } }