Skip to content

Commit

Permalink
Cache created judgement in HitObject
Browse files Browse the repository at this point in the history
  • Loading branch information
EVAST9919 committed Feb 9, 2024
1 parent 0ebea77 commit c500264
Show file tree
Hide file tree
Showing 41 changed files with 54 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ private void catchFruit(Fruit fruit, float x)
{
fruit.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
var drawableFruit = new DrawableFruit(fruit) { X = x };
var judgement = fruit.CreateJudgement();
var judgement = fruit.Judgement;
catcher.OnNewResult(drawableFruit, new CatchJudgementResult(fruit, judgement)
{
Type = judgement.MaxResult
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch.Tests/TestSceneCatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ private void applyResult(DrawableCatchHitObject drawableObject, JudgementResult

private JudgementResult createResult(CatchHitObject hitObject)
{
return new CatchJudgementResult(hitObject, hitObject.CreateJudgement())
return new CatchJudgementResult(hitObject, hitObject.Judgement)
{
Type = catcher.CanCatch(hitObject) ? HitResult.Great : HitResult.Miss
};
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch/Objects/Banana.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class Banana : PalpableCatchHitObject, IHasComboInformation
/// </summary>
public int BananaIndex;

public override Judgement CreateJudgement() => new CatchBananaJudgement();
protected override Judgement CreateJudgement() => new CatchBananaJudgement();

private static readonly IList<HitSampleInfo> default_banana_samples = new List<HitSampleInfo> { new BananaHitSampleInfo() }.AsReadOnly();

Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch/Objects/BananaShower.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class BananaShower : CatchHitObject, IHasDuration
{
public override bool LastInCombo => true;

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

protected override void CreateNestedHitObjects(CancellationToken cancellationToken)
{
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch/Objects/Droplet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ namespace osu.Game.Rulesets.Catch.Objects
{
public class Droplet : PalpableCatchHitObject
{
public override Judgement CreateJudgement() => new CatchDropletJudgement();
protected override Judgement CreateJudgement() => new CatchDropletJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch/Objects/Fruit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Catch.Objects
{
public class Fruit : PalpableCatchHitObject
{
public override Judgement CreateJudgement() => new CatchJudgement();
protected override Judgement CreateJudgement() => new CatchJudgement();

public static FruitVisualRepresentation GetVisualRepresentation(int indexInBeatmap) => (FruitVisualRepresentation)(indexInBeatmap % 4);
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch/Objects/JuiceStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class JuiceStream : CatchHitObject, IHasPathWithRepeats, IHasSliderVeloci
/// </summary>
private const float base_scoring_distance = 100;

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

public int RepeatCount { get; set; }

Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Catch/Objects/TinyDroplet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ namespace osu.Game.Rulesets.Catch.Objects
{
public class TinyDroplet : Droplet
{
public override Judgement CreateJudgement() => new CatchTinyDropletJudgement();
protected override Judgement CreateJudgement() => new CatchTinyDropletJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Mania/Objects/BarLine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ public bool Major
set => major.Value = value;
}

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Mania/Objects/HoldNote.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected override void CreateNestedHitObjects(CancellationToken cancellationTok
});
}

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Mania/Objects/HoldNoteBody.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Mania.Objects
/// </summary>
public class HoldNoteBody : ManiaHitObject
{
public override Judgement CreateJudgement() => new HoldNoteBodyJudgement();
protected override Judgement CreateJudgement() => new HoldNoteBodyJudgement();
protected override HitWindows CreateHitWindows() => HitWindows.Empty;
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Mania/Objects/Note.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ namespace osu.Game.Rulesets.Mania.Objects
/// </summary>
public class Note : ManiaHitObject
{
public override Judgement CreateJudgement() => new ManiaJudgement();
protected override Judgement CreateJudgement() => new ManiaJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Mania/Objects/TailNote.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class TailNote : Note
/// </summary>
public const double RELEASE_WINDOW_LENIENCE = 1.5;

public override Judgement CreateJudgement() => new ManiaJudgement();
protected override Judgement CreateJudgement() => new ManiaJudgement();

public override double MaximumJudgementOffset => base.MaximumJudgementOffset * RELEASE_WINDOW_LENIENCE;
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu.Tests/TestSceneSpinnerRotation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public void TestSpinnerNormalBonusRewinding()

// multipled by 2 to nullify the score multiplier. (autoplay mod selected)
long totalScore = scoreProcessor.TotalScore.Value * 2;
return totalScore == (int)(drawableSpinner.Result.TotalRotation / 360) * scoreProcessor.GetBaseScoreForResult(new SpinnerTick().CreateJudgement().MaxResult);
return totalScore == (int)(drawableSpinner.Result.TotalRotation / 360) * scoreProcessor.GetBaseScoreForResult(new SpinnerTick().Judgement.MaxResult);
});

addSeekStep(0);
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Mods/OsuModStrictTracking.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public StrictTrackingSliderTailCircle(Slider slider)
{
}

public override Judgement CreateJudgement() => new OsuJudgement();
protected override Judgement CreateJudgement() => new OsuJudgement();
}

private partial class StrictTrackingDrawableSliderTail : DrawableSliderTail
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/HitCircle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ namespace osu.Game.Rulesets.Osu.Objects
{
public class HitCircle : OsuHitObject
{
public override Judgement CreateJudgement() => new OsuJudgement();
protected override Judgement CreateJudgement() => new OsuJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/Slider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ protected void UpdateNestedSamples()
TailSamples = this.GetNodeSamples(repeatCount + 1);
}

public override Judgement CreateJudgement() => ClassicSliderBehaviour
protected override Judgement CreateJudgement() => ClassicSliderBehaviour
// Final combo is provided by the slider itself - see logic in `DrawableSlider.CheckForResult()`
? new OsuJudgement()
// Final combo is provided by the tail circle - see `SliderTailCircle`
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/SliderEndCircle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, I

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

public override Judgement CreateJudgement() => new SliderEndJudgement();
protected override Judgement CreateJudgement() => new SliderEndJudgement();

public class SliderEndJudgement : OsuJudgement
{
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/SliderHeadCircle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ public class SliderHeadCircle : HitCircle
/// </summary>
public bool ClassicSliderBehaviour;

public override Judgement CreateJudgement() => ClassicSliderBehaviour ? new SliderTickJudgement() : base.CreateJudgement();
protected override Judgement CreateJudgement() => ClassicSliderBehaviour ? new SliderTickJudgement() : base.CreateJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/SliderTailCircle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public SliderTailCircle(Slider slider)
{
}

public override Judgement CreateJudgement() => ClassicSliderBehaviour ? new LegacyTailJudgement() : new TailJudgement();
protected override Judgement CreateJudgement() => ClassicSliderBehaviour ? new LegacyTailJudgement() : new TailJudgement();

public class LegacyTailJudgement : OsuJudgement
{
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/SliderTick.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, I

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

public override Judgement CreateJudgement() => new SliderTickJudgement();
protected override Judgement CreateJudgement() => new SliderTickJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/Spinner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ protected override void CreateNestedHitObjects(CancellationToken cancellationTok
}
}

public override Judgement CreateJudgement() => new OsuJudgement();
protected override Judgement CreateJudgement() => new OsuJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/SpinnerBonusTick.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Osu.Objects
{
public class SpinnerBonusTick : SpinnerTick
{
public override Judgement CreateJudgement() => new OsuSpinnerBonusTickJudgement();
protected override Judgement CreateJudgement() => new OsuSpinnerBonusTickJudgement();

public class OsuSpinnerBonusTickJudgement : OsuSpinnerTickJudgement
{
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Osu/Objects/SpinnerTick.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class SpinnerTick : OsuHitObject
/// </summary>
public double SpinnerDuration { get; set; }

public override Judgement CreateJudgement() => new OsuSpinnerTickJudgement();
protected override Judgement CreateJudgement() => new OsuSpinnerTickJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

Expand Down
8 changes: 4 additions & 4 deletions osu.Game.Rulesets.Taiko.Tests/TaikoHealthProcessorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,11 @@ public void TestDrumRollOnly()

foreach (var nested in beatmap.HitObjects[0].NestedHitObjects)
{
var nestedJudgement = nested.CreateJudgement();
var nestedJudgement = nested.Judgement;
healthProcessor.ApplyResult(new JudgementResult(nested, nestedJudgement) { Type = nestedJudgement.MaxResult });
}

var judgement = beatmap.HitObjects[0].CreateJudgement();
var judgement = beatmap.HitObjects[0].Judgement;
healthProcessor.ApplyResult(new JudgementResult(beatmap.HitObjects[0], judgement) { Type = judgement.MaxResult });

Assert.Multiple(() =>
Expand Down Expand Up @@ -159,11 +159,11 @@ public void TestSwellOnly()

foreach (var nested in beatmap.HitObjects[0].NestedHitObjects)
{
var nestedJudgement = nested.CreateJudgement();
var nestedJudgement = nested.Judgement;
healthProcessor.ApplyResult(new JudgementResult(nested, nestedJudgement) { Type = nestedJudgement.MaxResult });
}

var judgement = beatmap.HitObjects[0].CreateJudgement();
var judgement = beatmap.HitObjects[0].Judgement;
healthProcessor.ApplyResult(new JudgementResult(beatmap.HitObjects[0], judgement) { Type = judgement.MaxResult });

Assert.Multiple(() =>
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/BarLine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ public bool Major
set => major.Value = value;
}

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();
}
}
4 changes: 2 additions & 2 deletions osu.Game.Rulesets.Taiko/Objects/DrumRoll.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ private void createTicks(CancellationToken cancellationToken)
}
}

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

Expand All @@ -103,7 +103,7 @@ private void createTicks(CancellationToken cancellationToken)
public class StrongNestedHit : StrongNestedHitObject
{
// The strong hit of the drum roll doesn't actually provide any score.
public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

public StrongNestedHit(TaikoHitObject parent)
: base(parent)
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/DrumRollTick.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public DrumRollTick(DrumRoll parent)
Parent = parent;
}

public override Judgement CreateJudgement() => new TaikoDrumRollTickJudgement();
protected override Judgement CreateJudgement() => new TaikoDrumRollTickJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;

Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/IgnoreHit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Taiko.Objects
{
public class IgnoreHit : Hit
{
public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();
}
}
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/StrongNestedHitObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ protected StrongNestedHitObject(TaikoHitObject parent)
Parent = parent;
}

public override Judgement CreateJudgement() => new TaikoStrongJudgement();
protected override Judgement CreateJudgement() => new TaikoStrongJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/Swell.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ protected override void CreateNestedHitObjects(CancellationToken cancellationTok
}
}

public override Judgement CreateJudgement() => new TaikoSwellJudgement();
protected override Judgement CreateJudgement() => new TaikoSwellJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/SwellTick.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Taiko.Objects
{
public class SwellTick : TaikoHitObject
{
public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game.Rulesets.Taiko/Objects/TaikoHitObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public abstract class TaikoHitObject : HitObject
/// </summary>
public const float DEFAULT_SIZE = 0.475f;

public override Judgement CreateJudgement() => new TaikoJudgement();
protected override Judgement CreateJudgement() => new TaikoJudgement();

protected override HitWindows CreateHitWindows() => new TaikoHitWindows();
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game/Beatmaps/IBeatmap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public static int GetMaxCombo(this IBeatmap beatmap)

static void addCombo(HitObject hitObject, ref int combo)
{
if (hitObject.CreateJudgement().MaxResult.AffectsCombo())
if (hitObject.Judgement.MaxResult.AffectsCombo())
combo++;

foreach (var nested in hitObject.NestedHitObjects)
Expand Down
2 changes: 1 addition & 1 deletion osu.Game/Database/StandardisedScoreMigrationTools.cs
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,7 @@ private class FakeHit : HitObject
{
private readonly Judgement judgement;

public override Judgement CreateJudgement() => judgement;
protected override Judgement CreateJudgement() => judgement;

public FakeHit(Judgement judgement)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,9 @@ private int calculateMaxCombo(IBeatmap beatmap)
private IEnumerable<HitResult> getPerfectHitResults(HitObject hitObject)
{
foreach (HitObject nested in hitObject.NestedHitObjects)
yield return nested.CreateJudgement().MaxResult;
yield return nested.Judgement.MaxResult;

yield return hitObject.CreateJudgement().MaxResult;
yield return hitObject.Judgement.MaxResult;
}
}
}
2 changes: 1 addition & 1 deletion osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -770,7 +770,7 @@ protected virtual void CheckForResult(bool userTriggered, double timeOffset)
private void ensureEntryHasResult()
{
Debug.Assert(Entry != null);
Entry.Result ??= CreateResult(HitObject.CreateJudgement())
Entry.Result ??= CreateResult(HitObject.Judgement)
?? throw new InvalidOperationException($"{GetType().ReadableName()} must provide a {nameof(JudgementResult)} through {nameof(CreateResult)}.");
}

Expand Down
10 changes: 9 additions & 1 deletion osu.Game/Rulesets/Objects/HitObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,19 @@ protected virtual void CreateNestedHitObjects(CancellationToken cancellationToke

protected void AddNested(HitObject hitObject) => nestedHitObjects.Add(hitObject);

/// <summary>
/// The <see cref="Judgement"/> that represents the scoring information for this <see cref="HitObject"/>.
/// </summary>
[JsonIgnore]
public Judgement Judgement => judgement ??= CreateJudgement();

private Judgement judgement;

/// <summary>
/// Creates the <see cref="Judgement"/> that represents the scoring information for this <see cref="HitObject"/>.
/// </summary>
[NotNull]
public virtual Judgement CreateJudgement() => new Judgement();
protected virtual Judgement CreateJudgement() => new Judgement();

/// <summary>
/// Creates the <see cref="HitWindows"/> for this <see cref="HitObject"/>.
Expand Down
2 changes: 1 addition & 1 deletion osu.Game/Rulesets/Objects/Legacy/ConvertHitObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ internal abstract class ConvertHitObject : HitObject, IHasCombo

public int ComboOffset { get; set; }

public override Judgement CreateJudgement() => new IgnoreJudgement();
protected override Judgement CreateJudgement() => new IgnoreJudgement();

protected override HitWindows CreateHitWindows() => HitWindows.Empty;
}
Expand Down
2 changes: 1 addition & 1 deletion osu.Game/Rulesets/Scoring/JudgementProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ protected void SimulateAutoplay(IBeatmap beatmap)

foreach (var obj in EnumerateHitObjects(beatmap))
{
var judgement = obj.CreateJudgement();
var judgement = obj.Judgement;

var result = CreateResult(obj, judgement);
if (result == null)
Expand Down
Loading

0 comments on commit c500264

Please sign in to comment.