74 lines
2.6 KiB
Rust
74 lines
2.6 KiB
Rust
|
use proto::*;
|
||
|
|
||
|
use std::collections::HashMap;
|
||
|
|
||
|
#[derive(Debug, Default, Clone)]
|
||
|
pub struct GachaProgress {
|
||
|
/// The pity (counting how many pulls) of this pull (in previous record) or the next pull (in status).
|
||
|
pub pity: u32,
|
||
|
/// The failure times of this category.
|
||
|
pub categories_progress_map: HashMap<String, u32>,
|
||
|
/// The selected priority (category) for a Chooseable category.
|
||
|
pub categories_chosen_guarantee_category_map: HashMap<String, String>,
|
||
|
/// The selectedpriority (a specified item) for a Chooseable category.
|
||
|
pub categories_chosen_guarantee_item_map: HashMap<String, u32>,
|
||
|
/// The failure times for selected priority (a specified item).
|
||
|
pub categories_chosen_guarantee_progress_map: HashMap<String, u32>,
|
||
|
}
|
||
|
|
||
|
impl GachaProgress {
|
||
|
pub fn from_bin(bin: GachaProgressBin) -> Self {
|
||
|
Self {
|
||
|
pity: bin.pity,
|
||
|
categories_progress_map: bin.categories_progress_map,
|
||
|
categories_chosen_guarantee_category_map: bin.categories_chosen_guarantee_category_map,
|
||
|
categories_chosen_guarantee_item_map: bin.categories_chosen_guarantee_item_map,
|
||
|
categories_chosen_guarantee_progress_map: bin.categories_chosen_guarantee_progress_map,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn to_bin(&self) -> GachaProgressBin {
|
||
|
GachaProgressBin {
|
||
|
pity: self.pity,
|
||
|
categories_progress_map: self.categories_progress_map.clone(),
|
||
|
categories_chosen_guarantee_category_map: self
|
||
|
.categories_chosen_guarantee_category_map
|
||
|
.clone(),
|
||
|
categories_chosen_guarantee_item_map: self.categories_chosen_guarantee_item_map.clone(),
|
||
|
categories_chosen_guarantee_progress_map: self
|
||
|
.categories_chosen_guarantee_progress_map
|
||
|
.clone(),
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Default, Clone)]
|
||
|
pub struct GachaStatus {
|
||
|
pub rarity_status_map: HashMap<u32, GachaProgress>,
|
||
|
pub discount_usage_map: HashMap<String, u32>,
|
||
|
}
|
||
|
|
||
|
impl GachaStatus {
|
||
|
pub fn from_bin(bin: GachaStatusBin) -> Self {
|
||
|
Self {
|
||
|
rarity_status_map: bin
|
||
|
.rarity_status_map
|
||
|
.into_iter()
|
||
|
.map(|(k, v)| (k, GachaProgress::from_bin(v)))
|
||
|
.collect(),
|
||
|
discount_usage_map: bin.discount_usage_map,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn to_bin(&self) -> GachaStatusBin {
|
||
|
GachaStatusBin {
|
||
|
rarity_status_map: self
|
||
|
.rarity_status_map
|
||
|
.iter()
|
||
|
.map(|(k, v)| (k.clone(), v.to_bin()))
|
||
|
.collect(),
|
||
|
discount_usage_map: self.discount_usage_map.clone(),
|
||
|
}
|
||
|
}
|
||
|
}
|