use crate::{
Beatmap, Difficulty, any::difficulty::skills::StrainSkill, model::mode::ConvertError,
osu::convert::prepare_map,
};
use super::difficulty::{DifficultyValues, skills::OsuSkills};
#[derive(Clone, Debug, PartialEq)]
pub struct OsuStrains {
pub aim: Vec<f64>,
pub aim_no_sliders: Vec<f64>,
pub speed: Vec<f64>,
pub flashlight: Vec<f64>,
}
impl OsuStrains {
pub const SECTION_LEN: f64 = 400.0;
}
pub fn strains(difficulty: &Difficulty, map: &Beatmap) -> Result<OsuStrains, ConvertError> {
let map = prepare_map(difficulty, map)?;
let DifficultyValues {
osu_objects: _,
skills:
OsuSkills {
aim,
aim_no_sliders,
speed,
flashlight,
},
attrs: _,
} = DifficultyValues::calculate(difficulty, &map);
Ok(OsuStrains {
aim: aim.into_current_strain_peaks(),
aim_no_sliders: aim_no_sliders.into_current_strain_peaks(),
speed: speed.into_current_strain_peaks(),
flashlight: flashlight.into_current_strain_peaks(),
})
}