renamed CatchScoreState fields
This commit is contained in:
@@ -89,10 +89,10 @@ impl From<ScoreState> for CatchScoreState {
|
||||
fn from(state: ScoreState) -> Self {
|
||||
Self {
|
||||
max_combo: state.max_combo,
|
||||
n_fruits: state.n300,
|
||||
n_droplets: state.n100,
|
||||
n_tiny_droplets: state.n50,
|
||||
n_tiny_droplet_misses: state.n_katu,
|
||||
fruits: state.n300,
|
||||
droplets: state.n100,
|
||||
tiny_droplets: state.n50,
|
||||
tiny_droplet_misses: state.n_katu,
|
||||
misses: state.misses,
|
||||
}
|
||||
}
|
||||
@@ -144,10 +144,10 @@ impl From<CatchScoreState> for ScoreState {
|
||||
Self {
|
||||
max_combo: state.max_combo,
|
||||
n_geki: 0,
|
||||
n_katu: state.n_tiny_droplet_misses,
|
||||
n300: state.n_fruits,
|
||||
n100: state.n_droplets,
|
||||
n50: state.n_tiny_droplets,
|
||||
n_katu: state.tiny_droplet_misses,
|
||||
n300: state.fruits,
|
||||
n100: state.droplets,
|
||||
n50: state.tiny_droplets,
|
||||
misses: state.misses,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ use crate::{
|
||||
///
|
||||
/// // The first 10 hitresults are only fruits
|
||||
/// for _ in 0..10 {
|
||||
/// state.n_fruits += 1;
|
||||
/// state.fruits += 1;
|
||||
/// state.max_combo += 1;
|
||||
///
|
||||
/// let attrs = gradual.next(state.clone()).unwrap();
|
||||
@@ -52,15 +52,15 @@ use crate::{
|
||||
/// // Notice how tiny droplets from sliders do not count as hit objects
|
||||
/// // that require processing. Only fruits and droplets do.
|
||||
/// // Also notice how all 10 objects will be processed in one go.
|
||||
/// state.n_fruits += 4;
|
||||
/// state.n_droplets += 6;
|
||||
/// state.n_tiny_droplets += 12;
|
||||
/// state.fruits += 4;
|
||||
/// state.droplets += 6;
|
||||
/// state.tiny_droplets += 12;
|
||||
/// // The `nth` method takes a zero-based value.
|
||||
/// let attrs = gradual.nth(state.clone(), 9).unwrap();
|
||||
/// println!("PP: {}", attrs.pp);
|
||||
///
|
||||
/// // Now comes another fruit. Note that the max combo gets incremented again.
|
||||
/// state.n_fruits += 1;
|
||||
/// state.fruits += 1;
|
||||
/// state.max_combo += 1;
|
||||
/// let attrs = gradual.next(state.clone()).unwrap();
|
||||
/// println!("PP: {}", attrs.pp);
|
||||
@@ -68,10 +68,10 @@ use crate::{
|
||||
/// // Skip to the end
|
||||
/// # /*
|
||||
/// state.max_combo = ...
|
||||
/// state.n_fruits = ...
|
||||
/// state.n_droplets = ...
|
||||
/// state.n_tiny_droplets = ...
|
||||
/// state.n_tiny_droplet_misses = ...
|
||||
/// state.fruits = ...
|
||||
/// state.droplets = ...
|
||||
/// state.tiny_droplets = ...
|
||||
/// state.tiny_droplet_misses = ...
|
||||
/// state.misses = ...
|
||||
/// # */
|
||||
/// let attrs = gradual.last(state.clone()).unwrap();
|
||||
|
||||
@@ -150,10 +150,10 @@ impl<'map> CatchPerformance<'map> {
|
||||
pub const fn state(mut self, state: CatchScoreState) -> Self {
|
||||
let CatchScoreState {
|
||||
max_combo,
|
||||
n_fruits,
|
||||
n_droplets,
|
||||
n_tiny_droplets,
|
||||
n_tiny_droplet_misses,
|
||||
fruits: n_fruits,
|
||||
droplets: n_droplets,
|
||||
tiny_droplets: n_tiny_droplets,
|
||||
tiny_droplet_misses: n_tiny_droplet_misses,
|
||||
misses,
|
||||
} = state;
|
||||
|
||||
@@ -249,8 +249,8 @@ impl<'map> CatchPerformance<'map> {
|
||||
}
|
||||
};
|
||||
|
||||
best_state.n_fruits = n_fruits;
|
||||
best_state.n_droplets = n_droplets;
|
||||
best_state.fruits = n_fruits;
|
||||
best_state.droplets = n_droplets;
|
||||
|
||||
let mut find_best_tiny_droplets = |acc: f64| {
|
||||
let raw_tiny_droplets = acc
|
||||
@@ -275,8 +275,8 @@ impl<'map> CatchPerformance<'map> {
|
||||
|
||||
if curr_dist < best_dist {
|
||||
best_dist = curr_dist;
|
||||
best_state.n_tiny_droplets = n_tiny_droplets;
|
||||
best_state.n_tiny_droplet_misses = n_tiny_droplet_misses;
|
||||
best_state.tiny_droplets = n_tiny_droplets;
|
||||
best_state.tiny_droplet_misses = n_tiny_droplet_misses;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -287,8 +287,8 @@ impl<'map> CatchPerformance<'map> {
|
||||
Some(acc) => {
|
||||
match (n_tiny_droplets + n_tiny_droplet_misses).cmp(&attrs.n_tiny_droplets) {
|
||||
Ordering::Equal => {
|
||||
best_state.n_tiny_droplets = n_tiny_droplets;
|
||||
best_state.n_tiny_droplet_misses = n_tiny_droplet_misses;
|
||||
best_state.tiny_droplets = n_tiny_droplets;
|
||||
best_state.tiny_droplet_misses = n_tiny_droplet_misses;
|
||||
}
|
||||
Ordering::Less | Ordering::Greater => find_best_tiny_droplets(acc),
|
||||
}
|
||||
@@ -298,24 +298,24 @@ impl<'map> CatchPerformance<'map> {
|
||||
.n_tiny_droplets
|
||||
.saturating_sub(n_tiny_droplets + n_tiny_droplet_misses);
|
||||
|
||||
best_state.n_tiny_droplets = n_tiny_droplets + n_remaining;
|
||||
best_state.n_tiny_droplet_misses = n_tiny_droplet_misses;
|
||||
best_state.tiny_droplets = n_tiny_droplets + n_remaining;
|
||||
best_state.tiny_droplet_misses = n_tiny_droplet_misses;
|
||||
}
|
||||
},
|
||||
(Some(n_tiny_droplets), None) => {
|
||||
best_state.n_tiny_droplets = cmp::min(attrs.n_tiny_droplets, n_tiny_droplets);
|
||||
best_state.n_tiny_droplet_misses =
|
||||
best_state.tiny_droplets = cmp::min(attrs.n_tiny_droplets, n_tiny_droplets);
|
||||
best_state.tiny_droplet_misses =
|
||||
attrs.n_tiny_droplets.saturating_sub(n_tiny_droplets);
|
||||
}
|
||||
(None, Some(n_tiny_droplet_misses)) => {
|
||||
best_state.n_tiny_droplets =
|
||||
best_state.tiny_droplets =
|
||||
attrs.n_tiny_droplets.saturating_sub(n_tiny_droplet_misses);
|
||||
best_state.n_tiny_droplet_misses =
|
||||
best_state.tiny_droplet_misses =
|
||||
cmp::min(attrs.n_tiny_droplets, n_tiny_droplet_misses);
|
||||
}
|
||||
(None, None) => match self.acc {
|
||||
Some(acc) => find_best_tiny_droplets(acc),
|
||||
None => best_state.n_tiny_droplets = attrs.n_tiny_droplets,
|
||||
None => best_state.tiny_droplets = attrs.n_tiny_droplets,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -524,7 +524,7 @@ impl CatchPerformanceInner {
|
||||
}
|
||||
|
||||
const fn combo_hits(&self) -> u32 {
|
||||
self.state.n_fruits + self.state.n_droplets + self.state.misses
|
||||
self.state.fruits + self.state.droplets + self.state.misses
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,8 +636,8 @@ mod test {
|
||||
}
|
||||
};
|
||||
|
||||
best_state.n_fruits = new_fruits;
|
||||
best_state.n_droplets = new_droplets;
|
||||
best_state.fruits = new_fruits;
|
||||
best_state.droplets = new_droplets;
|
||||
|
||||
let (min_tiny_droplets, max_tiny_droplets) = match (n_tiny_droplets, n_tiny_droplet_misses)
|
||||
{
|
||||
@@ -676,8 +676,8 @@ mod test {
|
||||
|
||||
if curr_dist < best_dist {
|
||||
best_dist = curr_dist;
|
||||
best_state.n_tiny_droplets = new_tiny_droplets;
|
||||
best_state.n_tiny_droplet_misses = new_tiny_droplet_misses;
|
||||
best_state.tiny_droplets = new_tiny_droplets;
|
||||
best_state.tiny_droplet_misses = new_tiny_droplet_misses;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -746,10 +746,10 @@ mod test {
|
||||
|
||||
let expected = CatchScoreState {
|
||||
max_combo: N_FRUITS + N_DROPLETS - 2,
|
||||
n_fruits: N_FRUITS - 2,
|
||||
n_droplets: N_DROPLETS,
|
||||
n_tiny_droplets: N_TINY_DROPLETS - 20,
|
||||
n_tiny_droplet_misses: 20,
|
||||
fruits: N_FRUITS - 2,
|
||||
droplets: N_DROPLETS,
|
||||
tiny_droplets: N_TINY_DROPLETS - 20,
|
||||
tiny_droplet_misses: 20,
|
||||
misses: 2,
|
||||
};
|
||||
|
||||
|
||||
+10
-14
@@ -7,13 +7,13 @@ pub struct CatchScoreState {
|
||||
/// Note that only fruits and droplets are considered for osu!catch combo.
|
||||
pub max_combo: u32,
|
||||
/// Amount of current fruits (300s).
|
||||
pub n_fruits: u32,
|
||||
pub fruits: u32,
|
||||
/// Amount of current droplets (100s).
|
||||
pub n_droplets: u32,
|
||||
pub droplets: u32,
|
||||
/// Amount of current tiny droplets (50s).
|
||||
pub n_tiny_droplets: u32,
|
||||
pub tiny_droplets: u32,
|
||||
/// Amount of current tiny droplet misses (katus).
|
||||
pub n_tiny_droplet_misses: u32,
|
||||
pub tiny_droplet_misses: u32,
|
||||
/// Amount of current misses (fruits and droplets).
|
||||
pub misses: u32,
|
||||
}
|
||||
@@ -23,21 +23,17 @@ impl CatchScoreState {
|
||||
pub const fn new() -> Self {
|
||||
Self {
|
||||
max_combo: 0,
|
||||
n_fruits: 0,
|
||||
n_droplets: 0,
|
||||
n_tiny_droplets: 0,
|
||||
n_tiny_droplet_misses: 0,
|
||||
fruits: 0,
|
||||
droplets: 0,
|
||||
tiny_droplets: 0,
|
||||
tiny_droplet_misses: 0,
|
||||
misses: 0,
|
||||
}
|
||||
}
|
||||
|
||||
/// Return the total amount of hits by adding everything up.
|
||||
pub const fn total_hits(&self) -> u32 {
|
||||
self.n_fruits
|
||||
+ self.n_droplets
|
||||
+ self.n_tiny_droplets
|
||||
+ self.n_tiny_droplet_misses
|
||||
+ self.misses
|
||||
self.fruits + self.droplets + self.tiny_droplets + self.tiny_droplet_misses + self.misses
|
||||
}
|
||||
|
||||
/// Calculate the accuracy between `0.0` and `1.0` for this state.
|
||||
@@ -48,7 +44,7 @@ impl CatchScoreState {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
let numerator = self.n_fruits + self.n_droplets + self.n_tiny_droplets;
|
||||
let numerator = self.fruits + self.droplets + self.tiny_droplets;
|
||||
let denominator = total_hits;
|
||||
|
||||
f64::from(numerator) / f64::from(denominator)
|
||||
|
||||
Reference in New Issue
Block a user