mirror of
https://github.com/osukey/osukey.git
synced 2025-07-02 00:40:09 +09:00
Create PerformanceAttributes
This commit is contained in:
@ -0,0 +1,11 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Difficulty
|
||||||
|
{
|
||||||
|
public class CatchPerformanceAttributes : PerformanceAttributes
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Catch.Difficulty
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override double Calculate(Dictionary<string, double> categoryDifficulty = null)
|
public override PerformanceAttributes Calculate()
|
||||||
{
|
{
|
||||||
mods = Score.Mods;
|
mods = Score.Mods;
|
||||||
|
|
||||||
@ -90,13 +90,10 @@ namespace osu.Game.Rulesets.Catch.Difficulty
|
|||||||
if (mods.Any(m => m is ModNoFail))
|
if (mods.Any(m => m is ModNoFail))
|
||||||
value *= 0.90;
|
value *= 0.90;
|
||||||
|
|
||||||
if (categoryDifficulty != null)
|
return new CatchPerformanceAttributes
|
||||||
{
|
{
|
||||||
categoryDifficulty.Add("AR", Attributes.ApproachRate);
|
Total = value
|
||||||
categoryDifficulty.Add("Max Combo", Attributes.MaxCombo);
|
};
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private double accuracy() => totalHits() == 0 ? 0 : Math.Clamp((double)totalSuccessfulHits() / totalHits(), 0, 1);
|
private double accuracy() => totalHits() == 0 ? 0 : Math.Clamp((double)totalSuccessfulHits() / totalHits(), 0, 1);
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Mania.Difficulty
|
||||||
|
{
|
||||||
|
public class ManiaPerformanceAttributes : PerformanceAttributes
|
||||||
|
{
|
||||||
|
[JsonProperty("difficulty")]
|
||||||
|
public double Difficulty { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("accuracy")]
|
||||||
|
public double Accuracy { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("scaled_score")]
|
||||||
|
public double ScaledScore { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.Mania.Difficulty
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override double Calculate(Dictionary<string, double> categoryDifficulty = null)
|
public override PerformanceAttributes Calculate()
|
||||||
{
|
{
|
||||||
mods = Score.Mods;
|
mods = Score.Mods;
|
||||||
scaledScore = Score.TotalScore;
|
scaledScore = Score.TotalScore;
|
||||||
@ -69,16 +69,13 @@ namespace osu.Game.Rulesets.Mania.Difficulty
|
|||||||
Math.Pow(accValue, 1.1), 1.0 / 1.1
|
Math.Pow(accValue, 1.1), 1.0 / 1.1
|
||||||
) * multiplier;
|
) * multiplier;
|
||||||
|
|
||||||
if (categoryDifficulty != null)
|
return new ManiaPerformanceAttributes
|
||||||
{
|
{
|
||||||
categoryDifficulty.Add("Difficulty", difficultyValue);
|
Difficulty = difficultyValue,
|
||||||
categoryDifficulty.Add("Accuracy", accValue);
|
Accuracy = accValue,
|
||||||
categoryDifficulty.Add("Scaled Score", scaledScore);
|
ScaledScore = scaledScore,
|
||||||
categoryDifficulty.Add("Great Hit Window", Attributes.GreatHitWindow);
|
Total = totalValue
|
||||||
categoryDifficulty.Add("Max Combo", Attributes.MaxCombo);
|
};
|
||||||
}
|
|
||||||
|
|
||||||
return totalValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private double computeDifficultyValue()
|
private double computeDifficultyValue()
|
||||||
|
26
osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceAttributes.cs
Normal file
26
osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceAttributes.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Difficulty
|
||||||
|
{
|
||||||
|
public class OsuPerformanceAttributes : PerformanceAttributes
|
||||||
|
{
|
||||||
|
[JsonProperty("aim")]
|
||||||
|
public double Aim { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("speed")]
|
||||||
|
public double Speed { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("accuracy")]
|
||||||
|
public double Accuracy { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("flashlight")]
|
||||||
|
public double Flashlight { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("effective_miss_count")]
|
||||||
|
public double EffectiveMissCount { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override double Calculate(Dictionary<string, double> categoryDifficulty = null)
|
public override PerformanceAttributes Calculate()
|
||||||
{
|
{
|
||||||
mods = Score.Mods;
|
mods = Score.Mods;
|
||||||
accuracy = Score.Accuracy;
|
accuracy = Score.Accuracy;
|
||||||
@ -72,19 +72,15 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
Math.Pow(flashlightValue, 1.1), 1.0 / 1.1
|
Math.Pow(flashlightValue, 1.1), 1.0 / 1.1
|
||||||
) * multiplier;
|
) * multiplier;
|
||||||
|
|
||||||
if (categoryDifficulty != null)
|
return new OsuPerformanceAttributes
|
||||||
{
|
{
|
||||||
categoryDifficulty.Add("Aim", aimValue);
|
Aim = aimValue,
|
||||||
categoryDifficulty.Add("Speed", speedValue);
|
Speed = speedValue,
|
||||||
categoryDifficulty.Add("Accuracy", accuracyValue);
|
Accuracy = accuracyValue,
|
||||||
categoryDifficulty.Add("Flashlight", flashlightValue);
|
Flashlight = flashlightValue,
|
||||||
categoryDifficulty.Add("OD", Attributes.OverallDifficulty);
|
EffectiveMissCount = effectiveMissCount,
|
||||||
categoryDifficulty.Add("AR", Attributes.ApproachRate);
|
Total = totalValue
|
||||||
categoryDifficulty.Add("Max Combo", Attributes.MaxCombo);
|
};
|
||||||
categoryDifficulty.Add("Effective Miss Count", effectiveMissCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
return totalValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private double computeAimValue()
|
private double computeAimValue()
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using osu.Game.Rulesets.Difficulty;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Taiko.Difficulty
|
||||||
|
{
|
||||||
|
public class TaikoPerformanceAttributes : PerformanceAttributes
|
||||||
|
{
|
||||||
|
[JsonProperty("difficulty")]
|
||||||
|
public double Difficulty { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("accuracy")]
|
||||||
|
public double Accuracy { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -27,7 +27,7 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override double Calculate(Dictionary<string, double> categoryDifficulty = null)
|
public override PerformanceAttributes Calculate()
|
||||||
{
|
{
|
||||||
mods = Score.Mods;
|
mods = Score.Mods;
|
||||||
countGreat = Score.Statistics.GetValueOrDefault(HitResult.Great);
|
countGreat = Score.Statistics.GetValueOrDefault(HitResult.Great);
|
||||||
@ -52,16 +52,12 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
|
|||||||
Math.Pow(accuracyValue, 1.1), 1.0 / 1.1
|
Math.Pow(accuracyValue, 1.1), 1.0 / 1.1
|
||||||
) * multiplier;
|
) * multiplier;
|
||||||
|
|
||||||
if (categoryDifficulty != null)
|
return new TaikoPerformanceAttributes
|
||||||
{
|
{
|
||||||
categoryDifficulty.Add("Difficulty", difficultyValue);
|
Difficulty = difficultyValue,
|
||||||
categoryDifficulty.Add("Accuracy", accuracyValue);
|
Accuracy = accuracyValue,
|
||||||
categoryDifficulty.Add("AR", Attributes.ApproachRate);
|
Total = totalValue
|
||||||
categoryDifficulty.Add("Great Hit Window", Attributes.GreatHitWindow);
|
};
|
||||||
categoryDifficulty.Add("Max Combo", Attributes.MaxCombo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return totalValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private double computeDifficultyValue()
|
private double computeDifficultyValue()
|
||||||
|
16
osu.Game/Rulesets/Difficulty/PerformanceAttributes.cs
Normal file
16
osu.Game/Rulesets/Difficulty/PerformanceAttributes.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Difficulty
|
||||||
|
{
|
||||||
|
public class PerformanceAttributes
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Calculated score performance points.
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("pp")]
|
||||||
|
public double Total { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -37,6 +37,6 @@ namespace osu.Game.Rulesets.Difficulty
|
|||||||
TimeRate = track.Rate;
|
TimeRate = track.Rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract double Calculate(Dictionary<string, double> categoryDifficulty = null);
|
public abstract PerformanceAttributes Calculate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ namespace osu.Game.Scoring
|
|||||||
|
|
||||||
var calculator = score.Ruleset.CreateInstance().CreatePerformanceCalculator(attributes.Value.Attributes, score);
|
var calculator = score.Ruleset.CreateInstance().CreatePerformanceCalculator(attributes.Value.Attributes, score);
|
||||||
|
|
||||||
return calculator?.Calculate();
|
return calculator?.Calculate().Total;
|
||||||
}
|
}
|
||||||
|
|
||||||
public readonly struct PerformanceCacheLookup
|
public readonly struct PerformanceCacheLookup
|
||||||
|
@ -129,7 +129,7 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
|
|
||||||
var calculator = gameplayState.Ruleset.CreatePerformanceCalculator(attrib, scoreInfo);
|
var calculator = gameplayState.Ruleset.CreatePerformanceCalculator(attrib, scoreInfo);
|
||||||
|
|
||||||
Current.Value = (int)Math.Round(calculator?.Calculate() ?? 0, MidpointRounding.AwayFromZero);
|
Current.Value = (int)Math.Round(calculator?.Calculate().Total ?? 0, MidpointRounding.AwayFromZero);
|
||||||
IsValid = true;
|
IsValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user