2021-01-30 21:29:59 +00:00
|
|
|
use crate::defines::LevelInt;
|
2022-06-19 19:34:08 +00:00
|
|
|
|
|
|
|
pub trait GrowthRate {
|
|
|
|
fn calculate_level(&self, experience: u32) -> LevelInt;
|
|
|
|
fn calculate_experience(&self, level: LevelInt) -> u32;
|
|
|
|
}
|
2021-01-30 21:29:59 +00:00
|
|
|
|
|
|
|
pub struct LookupGrowthRate {
|
|
|
|
experience: Vec<u32>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl LookupGrowthRate {
|
|
|
|
pub fn new(experience: Vec<u32>) -> LookupGrowthRate {
|
|
|
|
LookupGrowthRate { experience }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl GrowthRate for LookupGrowthRate {
|
|
|
|
fn calculate_level(&self, experience: u32) -> LevelInt {
|
|
|
|
for (i, v) in self.experience.iter().enumerate() {
|
|
|
|
if *v > experience {
|
|
|
|
return i as LevelInt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
self.experience.len() as LevelInt
|
|
|
|
}
|
|
|
|
|
|
|
|
fn calculate_experience(&self, level: LevelInt) -> u32 {
|
2022-06-06 11:54:59 +00:00
|
|
|
if level >= self.experience.len() as LevelInt {
|
|
|
|
*self.experience.last().unwrap()
|
|
|
|
} else {
|
|
|
|
self.experience[(level - 1) as usize]
|
|
|
|
}
|
2021-01-30 21:29:59 +00:00
|
|
|
}
|
|
|
|
}
|