gather attributes only at the end

This commit is contained in:
MaxOhn
2021-11-10 02:37:11 +01:00
parent 8f94459bcf
commit db474149d8
2 changed files with 25 additions and 31 deletions
+21 -27
View File
@@ -45,15 +45,13 @@ pub fn stars(
let hit_window = super::difficulty_range_od(map_attributes.od) / map_attributes.clock_rate;
let od = (80.0 - hit_window) / 6.0;
let mut diff_attributes = DifficultyAttributes {
ar: map_attributes.ar,
hp: map_attributes.hp,
od,
..Default::default()
};
if take < 2 {
return diff_attributes;
return DifficultyAttributes {
ar: map_attributes.ar,
hp: map_attributes.hp,
od,
..Default::default()
};
}
let mut raw_ar = map.ar;
@@ -79,7 +77,7 @@ pub fn stars(
map,
radius,
scaling_factor,
max_combo: &mut diff_attributes.max_combo,
max_combo: 0,
slider_state: SliderState::new(map),
ticks: Vec::new(),
curve_bufs: CurveBuffers::default(),
@@ -233,15 +231,19 @@ pub fn stars(
0.0
};
diff_attributes.n_circles = map.n_circles as usize;
diff_attributes.n_spinners = map.n_spinners as usize;
diff_attributes.n_sliders = map.n_sliders as usize;
diff_attributes.stars = star_rating;
diff_attributes.speed_strain = speed_rating;
diff_attributes.aim_strain = aim_rating;
diff_attributes.flashlight_rating = flashlight_rating;
diff_attributes
DifficultyAttributes {
ar: map_attributes.ar,
hp: map_attributes.hp,
od,
aim_strain: aim_rating,
speed_strain: speed_rating,
flashlight_rating,
n_circles: map.n_circles as usize,
n_sliders: map.n_sliders as usize,
n_spinners: map.n_spinners as usize,
stars: star_rating,
max_combo: params.max_combo,
}
}
/// Essentially the same as the `stars` function but instead of
@@ -251,14 +253,6 @@ pub fn stars(
pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
let map_attributes = map.attributes().mods(mods);
let hit_window = super::difficulty_range_od(map_attributes.od) / map_attributes.clock_rate;
let od = (80.0 - hit_window) / 6.0;
let mut diff_attributes = DifficultyAttributes {
ar: map_attributes.ar,
hp: map_attributes.hp,
od,
..Default::default()
};
if map.hit_objects.len() < 2 {
return Strains::default();
@@ -287,7 +281,7 @@ pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
map,
radius,
scaling_factor,
max_combo: &mut diff_attributes.max_combo,
max_combo: 0,
slider_state: SliderState::new(map),
ticks: Vec::new(),
curve_bufs: CurveBuffers::default(),
+4 -4
View File
@@ -33,7 +33,7 @@ pub(crate) struct ObjectParameters<'a> {
pub(crate) map: &'a Beatmap,
pub(crate) radius: f32,
pub(crate) scaling_factor: f32,
pub(crate) max_combo: &'a mut usize,
pub(crate) max_combo: usize,
pub(crate) ticks: Vec<f32>,
pub(crate) slider_state: SliderState<'a>,
pub(crate) curve_bufs: CurveBuffers,
@@ -52,7 +52,7 @@ impl OsuObject {
curve_bufs,
} = params;
**max_combo += 1; // hitcircle, slider head, or spinner
*max_combo += 1; // hitcircle, slider head, or spinner
let mut pos = h.pos;
if hr {
@@ -100,10 +100,10 @@ impl OsuObject {
let span_duration = duration / span_count;
// Called on each slider object except for the head.
// Increases combo and adjusts `end_pos` and `travel_dist`
// Increases combo and adjusts `lazy_end_pos` and `travel_dist`
// w.r.t. the object position at the given time on the slider curve.
let mut compute_vertex = |mut progress: f32| {
**max_combo += 1;
*max_combo += 1;
if progress % 2.0 >= 1.0 {
progress = 1.0 - progress % 1.0;