poke_data/models/
base_stats.rs

1use crate::types::stat::Stat;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Default, Clone, Serialize, Deserialize)]
5/// Mapping base stat values with their respective EV for a certain Pokémon
6pub struct BaseStats {
7    pub hp: (u8, u8),
8    pub attack: (u8, u8),
9    pub defense: (u8, u8),
10    pub special_attack: (u8, u8),
11    pub special_defense: (u8, u8),
12    pub speed: (u8, u8),
13}
14
15impl BaseStats {
16    pub fn get_value(&self, stat: Stat) -> u8 {
17        match stat {
18            Stat::Hp => self.hp.0,
19            Stat::Attack => self.attack.0,
20            Stat::Defense => self.defense.0,
21            Stat::SpAttack => self.special_attack.0,
22            Stat::SpDefense => self.special_defense.0,
23            Stat::Speed => self.speed.0,
24            _ => 0,
25        }
26    }
27
28    pub fn get_effort(&self, stat: Stat) -> u8 {
29        match stat {
30            Stat::Hp => self.hp.1,
31            Stat::Attack => self.attack.1,
32            Stat::Defense => self.defense.1,
33            Stat::SpAttack => self.special_attack.1,
34            Stat::SpDefense => self.special_defense.1,
35            Stat::Speed => self.speed.1,
36            _ => 0,
37        }
38    }
39
40    pub fn set_stat(&mut self, stat: Stat, base_value: u8, effort: u8) {
41        match stat {
42            Stat::Hp => self.hp = (base_value, effort),
43            Stat::Attack => self.attack = (base_value, effort),
44            Stat::Defense => self.defense = (base_value, effort),
45            Stat::SpAttack => self.special_attack = (base_value, effort),
46            Stat::SpDefense => self.special_defense = (base_value, effort),
47            Stat::Speed => self.speed = (base_value, effort),
48            _ => {}
49        }
50    }
51}