wicked-waifus-rs/wicked-waifus-game-server/src/logic/utils/growth_utils.rs
2025-06-26 06:28:24 +00:00

55 lines
No EOL
2.6 KiB
Rust

use wicked_waifus_data::{base_property_data, monster_property_growth_data, role_property_growth_data};
use wicked_waifus_data::base_property_data::BasePropertyData;
pub fn get_role_props_by_level(id: i32, level: i32, breach: i32) -> BasePropertyData {
let mut base_props = get_role_props_or_default(id).clone();
let role_props_growth = role_property_growth_data::iter()
.find(|d| d.level == level && d.breach_level == breach)
.unwrap_or_else(|| {
role_property_growth_data::iter().find(|d| d.level == 1 && d.breach_level == 0).unwrap()
});
base_props.lv = level;
compute_scaled_stat(&mut base_props.life_max, role_props_growth.life_max_ratio);
compute_scaled_stat(&mut base_props.life, role_props_growth.life_max_ratio);
compute_scaled_stat(&mut base_props.atk, role_props_growth.atk_ratio);
compute_scaled_stat(&mut base_props.def, role_props_growth.def_ratio);
base_props
}
pub fn get_monster_props_by_level(id: i32, level: i32) -> BasePropertyData {
let mut base_props = base_property_data::iter()
.find(|d| d.id == id)
.unwrap() // TODO: Default??
.clone();
// TODO: Check if curve_id matters
let monster_props_growth = monster_property_growth_data::iter()
.find(|d| d.level == level)
.unwrap(); // TODO: Default??
// Compute scaled properties
base_props.lv = level;
compute_scaled_stat(&mut base_props.life_max, monster_props_growth.life_max_ratio);
compute_scaled_stat(&mut base_props.life, monster_props_growth.life_max_ratio);
compute_scaled_stat(&mut base_props.atk, monster_props_growth.atk_ratio);
compute_scaled_stat(&mut base_props.def, monster_props_growth.def_ratio);
compute_scaled_stat(&mut base_props.hardness_max, monster_props_growth.hardness_max_ratio);
compute_scaled_stat(&mut base_props.hardness, monster_props_growth.hardness_ratio);
compute_scaled_stat(&mut base_props.hardness_recover, monster_props_growth.hardness_recover_ratio);
compute_scaled_stat(&mut base_props.rage_max, monster_props_growth.rage_max_ratio);
compute_scaled_stat(&mut base_props.rage, monster_props_growth.rage_ratio);
compute_scaled_stat(&mut base_props.rage_recover, monster_props_growth.rage_recover_ratio);
base_props
}
#[inline(always)]
fn get_role_props_or_default(id: i32) -> &'static BasePropertyData {
base_property_data::iter()
.find(|d| d.id == id)
.unwrap_or_else(|| {
base_property_data::iter().find(|d| d.id == 1102).unwrap()
})
}
#[inline(always)]
fn compute_scaled_stat(stat: &mut i32, ratio: i32) {
*stat = (*stat as f32 * (ratio as f32 / 10000f32)).trunc() as i32;
}