2026-03-20 03:12:58 -05:00
|
|
|
pub trait Stat {
|
|
|
|
|
fn score(&self) -> u8;
|
|
|
|
|
|
|
|
|
|
fn modifier(&self) -> i8 {
|
|
|
|
|
return (self.score() as i8 / 2) - 5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn skill(&self, proficiency: u8, proficient : bool, expert : bool) -> i8 {
|
|
|
|
|
let modifier : i8 = self.modifier();
|
|
|
|
|
let proficiency_boost : u8 = proficiency * proficient as u8;
|
|
|
|
|
let expertise_boost : u8 = proficiency * expert as u8;
|
|
|
|
|
return modifier + (proficiency_boost as i8) + (expertise_boost as i8);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub trait StatSet {
|
|
|
|
|
fn strength(&self) -> impl Stat;
|
|
|
|
|
fn dexterity(&self) -> impl Stat;
|
|
|
|
|
fn constitution(&self) -> impl Stat;
|
|
|
|
|
fn intelligence(&self) -> impl Stat;
|
|
|
|
|
fn wisdom(&self) -> impl Stat;
|
|
|
|
|
fn charisma(&self) -> impl Stat;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Stat for u8 {
|
|
|
|
|
fn score(&self) -> u8 {
|
|
|
|
|
return *self;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct Player {
|
|
|
|
|
strength_score: u8,
|
|
|
|
|
dexterity_score: u8,
|
|
|
|
|
constitution_score: u8,
|
|
|
|
|
intelligence_score: u8,
|
|
|
|
|
wisdom_score: u8,
|
|
|
|
|
charisma_score: u8
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl StatSet for Player {
|
|
|
|
|
fn strength(&self) -> impl Stat {
|
|
|
|
|
return self.strength_score;
|
|
|
|
|
}
|
|
|
|
|
fn dexterity(&self) -> impl Stat {
|
|
|
|
|
return self.dexterity_score;
|
|
|
|
|
}
|
|
|
|
|
fn constitution(&self) -> impl Stat {
|
|
|
|
|
return self.constitution_score;
|
|
|
|
|
}
|
|
|
|
|
fn intelligence(&self) -> impl Stat {
|
|
|
|
|
return self.intelligence_score;
|
|
|
|
|
}
|
|
|
|
|
fn wisdom(&self) -> impl Stat {
|
|
|
|
|
return self.wisdom_score;
|
|
|
|
|
}
|
|
|
|
|
fn charisma(&self) -> impl Stat {
|
|
|
|
|
return self.charisma_score;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-03-20 02:33:29 -05:00
|
|
|
fn main() {
|
2026-03-20 03:12:58 -05:00
|
|
|
let demo : Player = Player {
|
|
|
|
|
strength_score: 12,
|
|
|
|
|
dexterity_score: 20,
|
|
|
|
|
constitution_score: 15,
|
|
|
|
|
intelligence_score: 10,
|
|
|
|
|
wisdom_score: 5,
|
|
|
|
|
charisma_score: 1
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
println!("STR Modifier: {}", demo.strength().modifier());
|
|
|
|
|
println!("DEX Modifier: {}", demo.dexterity().modifier());
|
|
|
|
|
println!("CON Modifier: {}", demo.constitution().modifier());
|
|
|
|
|
println!("INT Modifier: {}", demo.intelligence().modifier());
|
|
|
|
|
println!("WIS Modifier: {}", demo.wisdom().modifier());
|
|
|
|
|
println!("CHA Modifier: {}", demo.charisma().modifier());
|
2026-03-20 02:33:29 -05:00
|
|
|
}
|