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
+17 -23
View File
@@ -45,15 +45,13 @@ pub fn stars(
let hit_window = super::difficulty_range_od(map_attributes.od) / map_attributes.clock_rate; let hit_window = super::difficulty_range_od(map_attributes.od) / map_attributes.clock_rate;
let od = (80.0 - hit_window) / 6.0; let od = (80.0 - hit_window) / 6.0;
let mut diff_attributes = DifficultyAttributes { if take < 2 {
return DifficultyAttributes {
ar: map_attributes.ar, ar: map_attributes.ar,
hp: map_attributes.hp, hp: map_attributes.hp,
od, od,
..Default::default() ..Default::default()
}; };
if take < 2 {
return diff_attributes;
} }
let mut raw_ar = map.ar; let mut raw_ar = map.ar;
@@ -79,7 +77,7 @@ pub fn stars(
map, map,
radius, radius,
scaling_factor, scaling_factor,
max_combo: &mut diff_attributes.max_combo, max_combo: 0,
slider_state: SliderState::new(map), slider_state: SliderState::new(map),
ticks: Vec::new(), ticks: Vec::new(),
curve_bufs: CurveBuffers::default(), curve_bufs: CurveBuffers::default(),
@@ -233,15 +231,19 @@ pub fn stars(
0.0 0.0
}; };
diff_attributes.n_circles = map.n_circles as usize; DifficultyAttributes {
diff_attributes.n_spinners = map.n_spinners as usize; ar: map_attributes.ar,
diff_attributes.n_sliders = map.n_sliders as usize; hp: map_attributes.hp,
diff_attributes.stars = star_rating; od,
diff_attributes.speed_strain = speed_rating; aim_strain: aim_rating,
diff_attributes.aim_strain = aim_rating; speed_strain: speed_rating,
diff_attributes.flashlight_rating = flashlight_rating; flashlight_rating,
n_circles: map.n_circles as usize,
diff_attributes 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 /// 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 { pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
let map_attributes = map.attributes().mods(mods); let map_attributes = map.attributes().mods(mods);
let hit_window = super::difficulty_range_od(map_attributes.od) / map_attributes.clock_rate; 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 { if map.hit_objects.len() < 2 {
return Strains::default(); return Strains::default();
@@ -287,7 +281,7 @@ pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
map, map,
radius, radius,
scaling_factor, scaling_factor,
max_combo: &mut diff_attributes.max_combo, max_combo: 0,
slider_state: SliderState::new(map), slider_state: SliderState::new(map),
ticks: Vec::new(), ticks: Vec::new(),
curve_bufs: CurveBuffers::default(), curve_bufs: CurveBuffers::default(),
+4 -4
View File
@@ -33,7 +33,7 @@ pub(crate) struct ObjectParameters<'a> {
pub(crate) map: &'a Beatmap, pub(crate) map: &'a Beatmap,
pub(crate) radius: f32, pub(crate) radius: f32,
pub(crate) scaling_factor: 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) ticks: Vec<f32>,
pub(crate) slider_state: SliderState<'a>, pub(crate) slider_state: SliderState<'a>,
pub(crate) curve_bufs: CurveBuffers, pub(crate) curve_bufs: CurveBuffers,
@@ -52,7 +52,7 @@ impl OsuObject {
curve_bufs, curve_bufs,
} = params; } = params;
**max_combo += 1; // hitcircle, slider head, or spinner *max_combo += 1; // hitcircle, slider head, or spinner
let mut pos = h.pos; let mut pos = h.pos;
if hr { if hr {
@@ -100,10 +100,10 @@ impl OsuObject {
let span_duration = duration / span_count; let span_duration = duration / span_count;
// Called on each slider object except for the head. // 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. // w.r.t. the object position at the given time on the slider curve.
let mut compute_vertex = |mut progress: f32| { let mut compute_vertex = |mut progress: f32| {
**max_combo += 1; *max_combo += 1;
if progress % 2.0 >= 1.0 { if progress % 2.0 >= 1.0 {
progress = 1.0 - progress % 1.0; progress = 1.0 - progress % 1.0;