BillySheet-Rust/src/sheet.rs

202 lines
5.3 KiB
Rust
Raw Normal View History

use eframe::egui::widgets::DragValue;
2022-11-18 10:53:36 +01:00
use eframe::egui::Ui;
2022-11-25 21:12:16 +01:00
use serde::{Deserialize, Serialize};
use std::io::Write as _;
2022-11-29 22:09:23 +01:00
use crate::gui::SheetGui;
2022-11-25 21:12:16 +01:00
#[derive(Debug, Serialize, Deserialize)]
2022-10-30 10:16:10 +01:00
pub enum Classe {
2022-11-18 10:53:36 +01:00
Warrior,
Cautious,
Farmer,
Resourceful,
2022-10-30 10:16:10 +01:00
}
2022-11-25 21:12:16 +01:00
#[derive(Debug, Serialize, Deserialize)]
2022-10-30 10:16:10 +01:00
enum CharacteristicType {
2022-11-18 10:53:36 +01:00
Address,
Stamina,
Luck,
Skill,
2022-10-30 10:16:10 +01:00
}
2022-11-25 21:12:16 +01:00
#[derive(Debug, Serialize, Deserialize)]
2022-10-30 10:16:10 +01:00
pub struct CharacterSheet {
2022-11-18 10:53:36 +01:00
character_class: Classe,
/// Field to write the personality/
pub character: String,
address: Characteristic,
stamina: Characteristic,
luck: Characteristic,
skill: Characteristic,
health: u32,
armor: u32,
damage: u32,
glory: u32,
money: u32,
2022-10-30 10:16:10 +01:00
}
pub fn write_sheet(path: &std::path::Path, sheet: &CharacterSheet) -> std::io::Result<()> {
let sheet_str = serde_json::to_string_pretty(&sheet)?;
let mut file = std::fs::File::create(path)?;
write!(file, "{}", sheet_str)
}
2022-10-30 13:16:25 +01:00
impl CharacterSheet {
2022-11-18 10:53:36 +01:00
pub fn character_class(&self) -> &Classe {
&self.character_class
}
pub fn character(&self) -> &str {
&self.character
}
pub fn address(&self) -> &Characteristic {
&self.address
}
pub fn stamina(&self) -> &Characteristic {
&self.stamina
}
pub fn luck(&self) -> &Characteristic {
&self.luck
}
pub fn skill(&self) -> &Characteristic {
&self.skill
}
pub fn health(&self) -> u32 {
self.health
}
pub fn armor(&self) -> u32 {
self.armor
}
pub fn damage(&self) -> u32 {
self.damage
}
pub fn glory(&self) -> u32 {
self.glory
}
pub fn money(&self) -> u32 {
self.money
}
2022-10-30 13:16:25 +01:00
}
impl SheetGui for CharacterSheet {
2022-11-18 10:53:36 +01:00
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);
2022-11-25 21:12:16 +01:00
ui.horizontal(|ui| {
ui.label("Base");
ui.add(DragValue::new(&mut base));
});
ui.horizontal(|ui| {
ui.label("Carac.");
ui.add(DragValue::new(&mut carac));
});
ui.horizontal(|ui| {
ui.label("Matériel");
ui.add(DragValue::new(&mut materiel));
});
2022-11-28 21:02:36 +01:00
(base, carac, materiel)
2022-11-25 21:12:16 +01:00
}
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());
ui.label("Ne peut dépasser 5");
}
2022-11-25 21:12:16 +01:00
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());
}
2022-11-25 21:12:16 +01:00
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());
}
2022-11-25 21:12:16 +01:00
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());
}
2022-11-25 21:12:16 +01:00
fn secondary_stats(&mut self, ui: &mut Ui) {
let workaround = self as &CharacterSheet;
let mut damage = workaround.damage;
let mut armor = workaround.armor;
2022-11-25 21:12:16 +01:00
ui.heading("Stat. secondaires");
ui.horizontal(|ui| {
ui.label("Dégâts");
ui.add(DragValue::new(&mut damage));
});
2022-11-25 21:12:16 +01:00
ui.horizontal(|ui| {
ui.label("Armure");
ui.add(DragValue::new(&mut armor));
});
ui.label("Critique");
2022-11-18 10:53:36 +01:00
}
}
2022-11-25 21:12:16 +01:00
#[derive(Debug, Serialize, Deserialize)]
2022-10-30 10:16:10 +01:00
pub struct Characteristic {
2022-11-18 10:53:36 +01:00
characteristic_type: CharacteristicType,
pub base: u32,
pub carac: u32,
pub materiel: u32,
pub additional: u32,
2022-10-30 10:16:10 +01:00
}
impl Default for CharacterSheet {
2022-11-18 10:53:36 +01:00
fn default() -> Self {
Self {
character_class: Classe::Warrior,
character: "Billy".to_string(),
address: Characteristic {
characteristic_type: CharacteristicType::Address,
base: 0,
carac: 0,
materiel: 0,
additional: 1,
},
stamina: Characteristic {
characteristic_type: CharacteristicType::Stamina,
base: 2,
carac: 0,
materiel: 0,
additional: 0,
},
luck: Characteristic {
characteristic_type: CharacteristicType::Luck,
base: 3,
carac: 0,
materiel: 0,
additional: 0,
},
skill: Characteristic {
characteristic_type: CharacteristicType::Skill,
base: 2,
carac: 0,
materiel: 0,
additional: 0,
},
health: 0,
armor: 0,
damage: 0,
glory: 0,
money: 0,
}
}
2022-10-30 10:16:10 +01:00
}