2021-01-30 21:29:59 +00:00
|
|
|
use crate::defines::LevelInt;
|
|
|
|
use crate::static_data::growth_rates::growth_rate::GrowthRate;
|
2022-06-06 11:54:59 +00:00
|
|
|
use hashbrown::HashMap;
|
2021-01-30 21:29:59 +00:00
|
|
|
use std::fmt;
|
|
|
|
use std::fmt::{Debug, Formatter};
|
|
|
|
|
|
|
|
pub struct GrowthRateLibrary {
|
|
|
|
growth_rates: HashMap<String, Box<dyn GrowthRate>>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl GrowthRateLibrary {
|
|
|
|
pub fn new(capacity: usize) -> GrowthRateLibrary {
|
|
|
|
GrowthRateLibrary {
|
|
|
|
growth_rates: HashMap::with_capacity(capacity),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn calculate_level(&self, growth_rate: &str, experience: u32) -> LevelInt {
|
|
|
|
self.growth_rates[growth_rate].calculate_level(experience)
|
|
|
|
}
|
|
|
|
pub fn calculate_experience(&self, growth_rate: &str, level: LevelInt) -> u32 {
|
|
|
|
self.growth_rates[growth_rate].calculate_experience(level)
|
|
|
|
}
|
|
|
|
pub fn add_growth_rate(&mut self, key: &str, value: Box<dyn GrowthRate>) {
|
|
|
|
self.growth_rates.insert(key.to_string(), value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Debug for GrowthRateLibrary {
|
|
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
|
|
f.debug_struct("GrowthRateLibrary").finish()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
2021-01-31 16:31:22 +00:00
|
|
|
pub mod tests {
|
2021-01-30 21:29:59 +00:00
|
|
|
use crate::static_data::growth_rates::lookup_growth_rate::LookupGrowthRate;
|
|
|
|
use crate::static_data::libraries::growth_rate_library::GrowthRateLibrary;
|
|
|
|
|
2021-01-31 16:31:22 +00:00
|
|
|
pub fn build() -> GrowthRateLibrary {
|
2021-01-30 21:29:59 +00:00
|
|
|
let mut lib = GrowthRateLibrary::new(1);
|
|
|
|
|
|
|
|
// Borrow as mut so we can insert
|
|
|
|
let w = &mut lib;
|
2022-06-06 11:54:59 +00:00
|
|
|
w.add_growth_rate(
|
|
|
|
"test_growthrate",
|
|
|
|
Box::new(LookupGrowthRate::new(vec![0, 5, 10, 100])),
|
|
|
|
);
|
2021-01-30 21:29:59 +00:00
|
|
|
// Drops borrow as mut
|
|
|
|
|
2021-01-31 16:31:22 +00:00
|
|
|
lib
|
2021-01-30 21:29:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-01-31 16:31:22 +00:00
|
|
|
fn add_growth_rate_to_library_and_calculate_level() {
|
|
|
|
let lib = build();
|
2022-06-06 11:54:59 +00:00
|
|
|
assert_eq!(lib.calculate_level("test_growthrate", 3), 1);
|
|
|
|
assert_eq!(lib.calculate_level("test_growthrate", 50), 3);
|
2021-01-31 16:31:22 +00:00
|
|
|
}
|
2021-01-30 21:29:59 +00:00
|
|
|
|
2021-01-31 16:31:22 +00:00
|
|
|
#[test]
|
|
|
|
fn add_growth_rate_to_library_and_calculate_experience() {
|
|
|
|
let lib = build();
|
2022-06-06 11:54:59 +00:00
|
|
|
assert_eq!(lib.calculate_experience("test_growthrate", 1), 0);
|
|
|
|
assert_eq!(lib.calculate_experience("test_growthrate", 3), 10);
|
2021-01-30 21:29:59 +00:00
|
|
|
}
|
|
|
|
}
|