mania: scale score for pp calculation on partial plays
This commit is contained in:
+8
-1
@@ -76,10 +76,17 @@ impl<'m> ManiaPP<'m> {
|
|||||||
let nf = self.mods.nf();
|
let nf = self.mods.nf();
|
||||||
let ht = self.mods.ht();
|
let ht = self.mods.ht();
|
||||||
|
|
||||||
let scaled_score = self.score.map_or(1_000_000.0, |score| {
|
let mut scaled_score = self.score.map_or(1_000_000.0, |score| {
|
||||||
score / 0.5_f32.powi(ez as i32 + nf as i32 + ht as i32)
|
score / 0.5_f32.powi(ez as i32 + nf as i32 + ht as i32)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if let Some(passed_objects) = self.passed_objects {
|
||||||
|
let percent_passed =
|
||||||
|
passed_objects as f32 / (self.map.n_circles + self.map.n_sliders) as f32;
|
||||||
|
|
||||||
|
scaled_score /= percent_passed;
|
||||||
|
}
|
||||||
|
|
||||||
let mut multiplier = 0.8;
|
let mut multiplier = 0.8;
|
||||||
|
|
||||||
if nf {
|
if nf {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ impl BeatmapAttributes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Adjusts attributes w.r.t. mods.
|
/// Adjusts attributes w.r.t. mods.
|
||||||
/// AR is further adjusted by the its hitwindow.
|
/// AR is further adjusted by its hitwindow.
|
||||||
/// OD is __not__ adjusted by its hitwindow.
|
/// OD is __not__ adjusted by its hitwindow.
|
||||||
pub fn mods(self, mods: impl Mods) -> Self {
|
pub fn mods(self, mods: impl Mods) -> Self {
|
||||||
if !mods.change_map() {
|
if !mods.change_map() {
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ impl HitObject {
|
|||||||
pub fn end_time(&self) -> f32 {
|
pub fn end_time(&self) -> f32 {
|
||||||
match &self.kind {
|
match &self.kind {
|
||||||
HitObjectKind::Circle { .. } => self.start_time,
|
HitObjectKind::Circle { .. } => self.start_time,
|
||||||
HitObjectKind::Slider { .. } => self.start_time, // wrong but should be unreachable
|
// incorrect, only called in mania which has no sliders though
|
||||||
|
HitObjectKind::Slider { .. } => self.start_time,
|
||||||
HitObjectKind::Spinner { end_time } => *end_time,
|
HitObjectKind::Spinner { end_time } => *end_time,
|
||||||
HitObjectKind::Hold { end_time, .. } => *end_time,
|
HitObjectKind::Hold { end_time, .. } => *end_time,
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::ops;
|
use std::ops;
|
||||||
|
|
||||||
/// Simple (x, y) coordinate
|
/// Simple (x, y) coordinate / vector
|
||||||
#[derive(Clone, Copy, Default, PartialEq)]
|
#[derive(Clone, Copy, Default, PartialEq)]
|
||||||
pub struct Pos2 {
|
pub struct Pos2 {
|
||||||
pub x: f32,
|
pub x: f32,
|
||||||
|
|||||||
Reference in New Issue
Block a user