From b603dcfc09d695c7ef32b3ccf8e7006acb9465a9 Mon Sep 17 00:00:00 2001 From: tsunyoku Date: Sat, 27 Apr 2024 13:21:50 +0100 Subject: [PATCH] add simplify relax rework --- Cargo.lock | 9 +++++++++ Cargo.toml | 3 +++ src/processor/mod.rs | 25 +++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 7515eb9..88fad6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,6 +68,14 @@ dependencies = [ "tokio", ] +[[package]] +name = "akatsuki-pp" +version = "0.9.6" +source = "git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=ce896ca661de4aa4c0c6739a703c4a162426878b#ce896ca661de4aa4c0c6739a703c4a162426878b" +dependencies = [ + "tokio", +] + [[package]] name = "akatsuki-pp" version = "0.9.6" @@ -1840,6 +1848,7 @@ dependencies = [ "akatsuki-pp 0.9.6 (git+https://github.com/CursorDance/akatsuki-pp-rs?rev=56a71011e13274e63f6548611f3d5c822377c0d3)", "akatsuki-pp 0.9.6 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=5c97207f25cf9fd07252dca1ba68d785e2147ce1)", "akatsuki-pp 0.9.6 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=9607e63c06927fee0cf2f94ce3a2039e3713387c)", + "akatsuki-pp 0.9.6 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=ce896ca661de4aa4c0c6739a703c4a162426878b)", "akatsuki-pp 0.9.6 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=d3ab5af7a63f17a2a40bbce573b06ea451375638)", "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 079eccb..7416d65 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,6 +59,9 @@ cursordance = { package = "akatsuki-pp", git = "https://github.com/CursorDance/a no-accuracy = { package = "akatsuki-pp", git = "https://github.com/osuAkatsuki/akatsuki-pp-rs", rev = "d3ab5af7a63f17a2a40bbce573b06ea451375638", features = [ "async_tokio", ] } +simplify-relax = { package = "akatsuki-pp", git = "https://github.com/osuAkatsuki/akatsuki-pp-rs", rev = "ce896ca661de4aa4c0c6739a703c4a162426878b", features = [ + "async_tokio", +] } [profile.release] lto = "fat" diff --git a/src/processor/mod.rs b/src/processor/mod.rs index 2175307..6c842d2 100644 --- a/src/processor/mod.rs +++ b/src/processor/mod.rs @@ -25,6 +25,7 @@ use conceptual_rework::{ }; use cursordance::Beatmap as CdBeatmap; use no_accuracy::Beatmap as NoAccuracyBeatmap; +use simplify_relax::Beatmap as SimplifyRelaxBeatmap; use skill_rebalance::{ Beatmap as SkillRebalanceBeatmap, BeatmapExt as SkillRebalanceBeatmapExt, GameMode as SkillRebalanceGameMode, @@ -167,6 +168,29 @@ async fn calculate_no_accuracy_pp( Ok(pp) } +async fn calculate_simplfy_relax_pp( + score: &RippleScore, + context: Arc, +) -> anyhow::Result { + let beatmap_bytes = + usecases::beatmaps::fetch_beatmap_osu_file(score.beatmap_id, context).await?; + let beatmap = SimplifyRelaxBeatmap::from_bytes(&beatmap_bytes).await?; + + let result = simplify_relax::osu_2019::OsuPP::new(&beatmap) + .mods(score.mods as u32) + .combo(score.max_combo as usize) + .misses(score.count_misses as usize) + .accuracy(score.accuracy) + .calculate(); + + let mut pp = round(result.pp as f32, 2); + if pp.is_infinite() || pp.is_nan() { + pp = 0.0; + } + + Ok(pp) +} + async fn process_scores( rework: &Rework, scores: Vec, @@ -182,6 +206,7 @@ async fn process_scores( 15 => calculate_woot_precision_pp(score, context.clone()).await?, 16 => calculate_cursordance_pp(score, context.clone()).await?, 17 => calculate_no_accuracy_pp(score, context.clone()).await?, + 18 => calculate_simplfy_relax_pp(score, context.clone()).await?, _ => unreachable!(), };