1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-21 15:27:24 +08:00

Merge pull request #24121 from peppy/fix-judged-fallback

Fix fallback for `Judged` to be more correct
This commit is contained in:
Bartłomiej Dach 2023-07-05 22:15:04 +02:00 committed by GitHub
commit f3576b88a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 3 deletions

View File

@ -3,6 +3,7 @@
#nullable disable
using System;
using NUnit.Framework;
using osu.Framework.Graphics;
using osu.Framework.Testing;
@ -80,7 +81,9 @@ namespace osu.Game.Tests.Gameplay
{
TestLifetimeEntry entry = null;
AddStep("Create entry", () => entry = new TestLifetimeEntry(new HitObject()) { LifetimeStart = 1 });
assertJudged(() => entry, false);
AddStep("ApplyDefaults", () => entry.HitObject.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()));
assertJudged(() => entry, false);
AddAssert("Lifetime is updated", () => entry.LifetimeStart == -TestLifetimeEntry.INITIAL_LIFETIME_OFFSET);
TestDrawableHitObject dho = null;
@ -91,6 +94,7 @@ namespace osu.Game.Tests.Gameplay
});
AddStep("ApplyDefaults", () => entry.HitObject.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()));
AddAssert("Lifetime is correct", () => dho.LifetimeStart == TestDrawableHitObject.LIFETIME_ON_APPLY && entry.LifetimeStart == TestDrawableHitObject.LIFETIME_ON_APPLY);
assertJudged(() => entry, false);
}
[Test]
@ -138,6 +142,29 @@ namespace osu.Game.Tests.Gameplay
AddAssert("DHO state is correct", () => dho.State.Value == ArmedState.Miss);
}
[Test]
public void TestJudgedStateThroughLifetime()
{
TestDrawableHitObject dho = null;
HitObjectLifetimeEntry lifetimeEntry = null;
AddStep("Create lifetime entry", () => lifetimeEntry = new HitObjectLifetimeEntry(new HitObject { StartTime = Time.Current }));
assertJudged(() => lifetimeEntry, false);
AddStep("Create DHO and apply entry", () =>
{
Child = dho = new TestDrawableHitObject();
dho.Apply(lifetimeEntry);
});
assertJudged(() => lifetimeEntry, false);
AddStep("Apply result", () => dho.MissForcefully());
assertJudged(() => lifetimeEntry, true);
}
[Test]
public void TestResultSetBeforeLoadComplete()
{
@ -154,15 +181,20 @@ namespace osu.Game.Tests.Gameplay
}
};
});
assertJudged(() => lifetimeEntry, true);
AddStep("Create DHO and apply entry", () =>
{
dho = new TestDrawableHitObject();
dho.Apply(lifetimeEntry);
Child = dho;
});
assertJudged(() => lifetimeEntry, true);
AddAssert("DHO state is correct", () => dho.State.Value, () => Is.EqualTo(ArmedState.Hit));
}
private void assertJudged(Func<HitObjectLifetimeEntry> entry, bool val) =>
AddAssert(val ? "Is judged" : "Not judged", () => entry().Judged, () => Is.EqualTo(val));
private partial class TestDrawableHitObject : DrawableHitObject
{
public const double INITIAL_LIFETIME_OFFSET = 100;

View File

@ -112,12 +112,12 @@ namespace osu.Game.Rulesets.Objects.Drawables
/// Whether this <see cref="DrawableHitObject"/> has been judged.
/// Note: This does NOT include nested hitobjects.
/// </summary>
public bool Judged => Entry?.Judged ?? true;
public bool Judged => Entry?.Judged ?? false;
/// <summary>
/// Whether this <see cref="DrawableHitObject"/> and all of its nested <see cref="DrawableHitObject"/>s have been judged.
/// </summary>
public bool AllJudged => Entry?.AllJudged ?? true;
public bool AllJudged => Entry?.AllJudged ?? false;
/// <summary>
/// The relative X position of this hit object for sample playback balance adjustment.

View File

@ -36,7 +36,7 @@ namespace osu.Game.Rulesets.Objects
/// Whether <see cref="HitObject"/> has been judged.
/// Note: This does NOT include nested hitobjects.
/// </summary>
public bool Judged => Result?.HasResult ?? true;
public bool Judged => Result?.HasResult ?? false;
/// <summary>
/// Whether <see cref="HitObject"/> and all of its nested objects have been judged.