2020-03-16 18:47:30 -07:00
|
|
|
use std::collections::{HashMap, BTreeMap};
|
|
|
|
use std::io::Read;
|
|
|
|
use serde::{Serialize, Deserialize};
|
|
|
|
use rand::{Rng, SeedableRng};
|
|
|
|
use rand::distributions::{WeightedIndex, Distribution};
|
|
|
|
|
2020-03-18 18:21:34 -07:00
|
|
|
use crate::entity::item::ItemDetail;
|
|
|
|
use crate::entity::item::tech::{Technique, TechniqueDisk};
|
2020-03-16 18:47:30 -07:00
|
|
|
use crate::ship::room::{Difficulty, Episode};
|
|
|
|
use crate::ship::map::MapVariantType;
|
|
|
|
use crate::entity::character::SectionID;
|
|
|
|
use crate::ship::drops::load_data_file;
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-03-18 18:21:34 -07:00
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
struct TechniqueRateStat {
|
|
|
|
rate: u32,
|
|
|
|
min: i32,
|
|
|
|
max: i32,
|
|
|
|
}
|
2020-03-16 18:47:30 -07:00
|
|
|
|
|
|
|
|
2020-03-18 18:21:34 -07:00
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
struct TechniqueRate {
|
|
|
|
#[serde(rename = "Foie")]
|
|
|
|
foie: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Gifoie")]
|
|
|
|
gifoie: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Rafoie")]
|
|
|
|
rafoie: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Zonde")]
|
|
|
|
zonde: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Gizonde")]
|
|
|
|
gizonde: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Razonde")]
|
|
|
|
razonde: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Barta")]
|
|
|
|
barta: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Gibarta")]
|
|
|
|
gibarta: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Rabarta")]
|
|
|
|
rabarta: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Grants")]
|
|
|
|
grants: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Deband")]
|
|
|
|
deband: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Jellen")]
|
|
|
|
jellen: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Zalure")]
|
|
|
|
zalure: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Shifta")]
|
|
|
|
shifta: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Ryuker")]
|
|
|
|
ryuker: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Resta")]
|
|
|
|
resta: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Anti")]
|
|
|
|
anti: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Reverser")]
|
|
|
|
reverser: TechniqueRateStat,
|
|
|
|
#[serde(rename = "Megid")]
|
|
|
|
megid: TechniqueRateStat,
|
|
|
|
}
|
2020-03-16 18:47:30 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
2020-03-18 18:21:34 -07:00
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
|
|
struct TechniqueRates {
|
|
|
|
area1: TechniqueRate,
|
|
|
|
area2: TechniqueRate,
|
|
|
|
area3: TechniqueRate,
|
|
|
|
area4: TechniqueRate,
|
|
|
|
area5: TechniqueRate,
|
|
|
|
area6: TechniqueRate,
|
|
|
|
area7: TechniqueRate,
|
|
|
|
area8: TechniqueRate,
|
|
|
|
area9: TechniqueRate,
|
|
|
|
area10: TechniqueRate,
|
|
|
|
}
|
2020-03-16 18:47:30 -07:00
|
|
|
|
|
|
|
|
|
|
|
pub struct TechniqueTable {
|
2020-03-18 18:21:34 -07:00
|
|
|
rates: TechniqueRates
|
2020-03-16 18:47:30 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
impl TechniqueTable {
|
|
|
|
pub fn new(episode: Episode, difficulty: Difficulty, section_id: SectionID) -> TechniqueTable {
|
|
|
|
TechniqueTable {
|
2020-03-18 18:21:34 -07:00
|
|
|
rates: load_data_file(episode, difficulty, section_id, "tech_rate.toml")
|
2020-03-16 18:47:30 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get_drop<R: Rng>(&self, map_area: &MapVariantType, rng: &mut R) -> Option<ItemDetail> {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
}
|