fixed stack offset for lazy_end_pos

This commit is contained in:
MaxOhn
2021-11-08 04:14:48 +01:00
parent 3aa7bbe39f
commit cd4d89f5aa
4 changed files with 48 additions and 16 deletions
@@ -18,6 +18,7 @@ impl<'h> DifficultyObject<'h> {
prev: &OsuObject,
prev_vals: Option<(f32, f32)>, // (jump_dist, strain_time)
prev_prev: Option<OsuObject>,
scale_factor: f32,
scaling_factor: f32,
) -> Self {
let delta = base.time - prev.time;
@@ -27,7 +28,7 @@ impl<'h> DifficultyObject<'h> {
let pos = base.pos; // stacked position
let travel_dist = prev.travel_dist();
let prev_cursor_pos = prev.lazy_end_pos();
let prev_cursor_pos = prev.lazy_end_pos(scale_factor);
// We don't need to calculate either angle or distance
// when one of the last->curr objects is a spinner
@@ -37,7 +38,7 @@ impl<'h> DifficultyObject<'h> {
let jump_dist = ((pos - prev_cursor_pos) * scaling_factor).length();
let angle = prev_prev.map(|prev_prev| {
let prev_prev_cursor_pos = prev_prev.lazy_end_pos();
let prev_prev_cursor_pos = prev_prev.lazy_end_pos(scale_factor);
let v1 = prev_prev_cursor_pos - prev.pos;
let v2 = pos - prev_cursor_pos;
+34 -12
View File
@@ -113,10 +113,7 @@ pub fn stars(
let stack_offset = h.stack_height * scale_factor;
h.time /= map_attributes.clock_rate;
h.pos += Pos2 {
x: stack_offset,
y: stack_offset,
};
h.pos += Pos2::new(stack_offset);
h
});
@@ -140,7 +137,14 @@ pub fn stars(
// Handle second object separately to remove later if-branching
let curr = hit_objects.next().unwrap();
let h = DifficultyObject::new(&curr, &prev, prev_vals, prev_prev, scaling_factor);
let h = DifficultyObject::new(
&curr,
&prev,
prev_vals,
prev_prev,
scale_factor,
scaling_factor,
);
while h.base.time > current_section_end {
for skill in skills.iter_mut() {
@@ -160,7 +164,14 @@ pub fn stars(
// Handle all other objects
for curr in hit_objects {
let h = DifficultyObject::new(&curr, &prev, prev_vals, prev_prev, scaling_factor);
let h = DifficultyObject::new(
&curr,
&prev,
prev_vals,
prev_prev,
scale_factor,
scaling_factor,
);
while h.base.time > current_section_end {
for skill in skills.iter_mut() {
@@ -309,10 +320,7 @@ pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
let stack_offset = h.stack_height * scale_factor;
h.time /= map_attributes.clock_rate;
h.pos += Pos2 {
x: stack_offset,
y: stack_offset,
};
h.pos += Pos2::new(stack_offset);
h
});
@@ -336,7 +344,14 @@ pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
// Handle second object separately to remove later if-branching
let curr = hit_objects.next().unwrap();
let h = DifficultyObject::new(&curr, &prev, prev_vals, prev_prev, scaling_factor);
let h = DifficultyObject::new(
&curr,
&prev,
prev_vals,
prev_prev,
scale_factor,
scaling_factor,
);
while h.base.time > current_section_end {
for skill in skills.iter_mut() {
@@ -356,7 +371,14 @@ pub fn strains(map: &Beatmap, mods: impl Mods) -> Strains {
// Handle all other objects
for curr in hit_objects {
let h = DifficultyObject::new(&curr, &prev, prev_vals, prev_prev, scaling_factor);
let h = DifficultyObject::new(
&curr,
&prev,
prev_vals,
prev_prev,
scale_factor,
scaling_factor,
);
while h.base.time > current_section_end {
for skill in skills.iter_mut() {
+6 -2
View File
@@ -238,10 +238,14 @@ impl OsuObject {
}
#[inline]
pub(crate) fn lazy_end_pos(&self) -> Pos2 {
pub(crate) fn lazy_end_pos(&self, scale_factor: f32) -> Pos2 {
match &self.kind {
OsuObjectKind::Circle | OsuObjectKind::Spinner { .. } => self.pos,
OsuObjectKind::Slider { lazy_end_pos, .. } => *lazy_end_pos,
OsuObjectKind::Slider { lazy_end_pos, .. } => {
let stack_offset = scale_factor * self.stack_height;
*lazy_end_pos + Pos2::new(stack_offset)
}
}
}
+5
View File
@@ -14,6 +14,11 @@ impl Pos2 {
Self::default()
}
#[inline]
pub fn new(value: f32) -> Self {
Self { x: value, y: value }
}
#[inline]
pub fn length_squared(&self) -> f32 {
self.dot(*self)