elseware/src/ship/item_stats.rs

112 lines
2.5 KiB
Rust
Raw Normal View History

2020-03-14 20:49:29 -07:00
use std::collections::HashMap;
use serde::{Serialize, Deserialize};
use std::fs::File;
use std::io::Read;
use crate::entity::item::armor::ArmorType;
2020-03-14 21:38:03 -07:00
use crate::entity::item::shield::ShieldType;
use crate::entity::item::unit::UnitType;
2020-03-14 20:49:29 -07:00
fn load_data_file<T: serde::de::DeserializeOwned>(path: &str) -> T {
let mut f = File::open(path).unwrap();
let mut s = String::new();
f.read_to_string(&mut s);
toml::from_str::<T>(s.as_str()).unwrap()
}
struct WeaponStats {
}
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
struct ArmorStats {
stars: u32,
dfp: i32,
evp: i32,
dfp_modifier: u32,
evp_modifier: u32,
team_points: u32,
level_req: u32,
efr: i32,
eic: i32,
eth: i32,
elt: i32,
edk: i32,
}
2020-03-14 21:38:03 -07:00
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
2020-03-14 20:49:29 -07:00
struct ShieldStats {
2020-03-14 21:38:03 -07:00
stars: u32,
dfp: i32,
evp: i32,
dfp_modifier: u32,
evp_modifier: u32,
team_points: u32,
level_req: u32,
efr: i32,
eic: i32,
eth: i32,
elt: i32,
edk: i32,
2020-03-14 20:49:29 -07:00
}
2020-03-14 21:38:03 -07:00
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
2020-03-14 20:49:29 -07:00
struct UnitStats {
2020-03-14 21:38:03 -07:00
stars: u32,
stat: u32,
amount: u32,
team_points: u32,
modifier: u32,
2020-03-14 20:49:29 -07:00
}
fn armor_stats() -> HashMap<ArmorType, ArmorStats> {
let armor_stats: HashMap<String, ArmorStats> = load_data_file("data/item_stats/armor_stats.toml");
armor_stats.iter()
.map(|(name, stats)| {
(name.parse().unwrap(), *stats)
}).collect()
}
2020-03-14 21:38:03 -07:00
fn shield_stats() -> HashMap<ShieldType, ShieldStats> {
let shield_stats: HashMap<String, ShieldStats> = load_data_file("data/item_stats/shield_stats.toml");
shield_stats.iter()
.map(|(name, stats)| {
(name.parse().unwrap(), *stats)
}).collect()
}
fn unit_stats() -> HashMap<UnitType, UnitStats> {
let unit_stats: HashMap<String, UnitStats> = load_data_file("data/item_stats/unit_stats.toml");
unit_stats.iter()
.map(|(name, stats)| {
(name.parse().unwrap(), *stats)
}).collect()
}
2020-03-14 20:49:29 -07:00
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_armor_stats() {
let astat = armor_stats();
assert!(astat.get(&ArmorType::CrimsonCoat).unwrap().stars == 11);
}
2020-03-14 21:38:03 -07:00
#[test]
fn test_shield_stats() {
let sstat = shield_stats();
assert!(sstat.get(&ShieldType::RedRing).unwrap().stars == 11);
}
#[test]
fn test_unit_stats() {
let ustat = unit_stats();
assert!(ustat.get(&UnitType::ElfArm).unwrap().stars == 5);
}
2020-03-14 20:49:29 -07:00
}