22// See the LICENCE file in the repository root for full licence text.
33
44using NUnit . Framework ;
5+ using osu . Game . Beatmaps ;
56using osu . Game . Rulesets . Osu . Mods ;
67using osu . Game . Rulesets . Scoring ;
78using osu . Game . Scoring ;
@@ -13,7 +14,7 @@ public class ScoreMultiplierCalculatorTest
1314 [ Test ]
1415 public void TestFlatMultiplier ( )
1516 {
16- var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( ) ) ;
17+ var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) ) ) ;
1718
1819 double multiplier = calculator . CalculateFor ( [ new OsuModEasy ( ) ] ) ;
1920
@@ -23,36 +24,55 @@ public void TestFlatMultiplier()
2324 [ Test ]
2425 public void TestSettingDependentMultiplier ( )
2526 {
26- var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( ) ) ;
27+ var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) ) ) ;
2728
2829 double multiplier = calculator . CalculateFor ( [ new OsuModDaycore { SpeedChange = { Value = 0.6 } } ] ) ;
2930
3031 Assert . That ( multiplier , Is . EqualTo ( 0.4 ) ) ;
3132 }
3233
3334 [ Test ]
34- public void TestContextDependentMultiplier ( )
35+ public void TestScoreDependentMultiplier ( )
3536 {
3637 TestScoreMultiplierCalculator calculator ;
3738
3839 double multiplier ;
3940
4041 Assert . Multiple ( ( ) =>
4142 {
42- calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( ) ) ;
43+ calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) ) ) ;
4344 multiplier = calculator . CalculateFor ( [ new OsuModHardRock ( ) ] ) ;
4445 Assert . That ( multiplier , Is . EqualTo ( 1.4 ) ) ;
4546
46- calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new ScoreInfo { ClientVersion = "2024.123.0" } ) ) ;
47+ calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) , new ScoreInfo { ClientVersion = "2024.123.0" } ) ) ;
4748 multiplier = calculator . CalculateFor ( [ new OsuModHardRock ( ) ] ) ;
4849 Assert . That ( multiplier , Is . EqualTo ( 1.2 ) ) ;
4950 } ) ;
5051 }
5152
53+ [ Test ]
54+ public void TestDifficultyDependentMultiplier ( )
55+ {
56+ TestScoreMultiplierCalculator calculator ;
57+
58+ double multiplier ;
59+
60+ Assert . Multiple ( ( ) =>
61+ {
62+ calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) ) ) ;
63+ multiplier = calculator . CalculateFor ( [ new OsuModEasy ( ) ] ) ;
64+ Assert . That ( multiplier , Is . EqualTo ( 0.15 ) ) ;
65+
66+ calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty { ApproachRate = 0 } ) ) ;
67+ multiplier = calculator . CalculateFor ( [ new OsuModEasy ( ) ] ) ;
68+ Assert . That ( multiplier , Is . EqualTo ( 0.1 ) ) ;
69+ } ) ;
70+ }
71+
5272 [ Test ]
5373 public void TestCombinationMultiplier ( )
5474 {
55- var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( ) ) ;
75+ var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) ) ) ;
5676
5777 double multiplier = calculator . CalculateFor ( [ new OsuModEasy ( ) , new OsuModDaycore ( ) ] ) ;
5878
@@ -62,7 +82,7 @@ public void TestCombinationMultiplier()
6282 [ Test ]
6383 public void TestCombinationAndFlatMultipliers ( )
6484 {
65- var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( ) ) ;
85+ var calculator = new TestScoreMultiplierCalculator ( new ScoreMultiplierContext ( new BeatmapDifficulty ( ) ) ) ;
6686
6787 double multiplier = calculator . CalculateFor ( [ new OsuModDaycore ( ) , new OsuModHardRock ( ) , new OsuModEasy ( ) ] ) ;
6888
@@ -74,7 +94,7 @@ private class TestScoreMultiplierCalculator : ScoreMultiplierCalculator
7494 public TestScoreMultiplierCalculator ( ScoreMultiplierContext context )
7595 : base ( context )
7696 {
77- Single < OsuModEasy > ( hasMultiplier : 0.15 ) ;
97+ Single < OsuModEasy > ( hasMultiplier : context . BeatmapDifficultyWithoutMods . ApproachRate == 0 ? 0.1 : 0.15 ) ;
7898 Single < OsuModDaycore > ( hasMultiplier : daycore => ( 1 + daycore . SpeedChange . Value ) / 4 ) ;
7999 Single < OsuModHardRock > ( hasMultiplier : _ => context . Score ? . ClientVersion == "2024.123.0" ? 1.2 : 1.4 ) ;
80100 Combination < OsuModEasy , OsuModDaycore > ( hasMultiplier : ( _ , _ ) => 0.003 ) ;
0 commit comments