mirror of
https://github.com/osukey/osukey.git
synced 2025-07-01 16:29:58 +09:00
Ensure a non-null hitobject entry has a non-null Result
This commit is contained in:
@ -171,7 +171,10 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
protected DrawableHitObject([CanBeNull] HitObject initialHitObject = null)
|
protected DrawableHitObject([CanBeNull] HitObject initialHitObject = null)
|
||||||
{
|
{
|
||||||
if (initialHitObject != null)
|
if (initialHitObject != null)
|
||||||
|
{
|
||||||
lifetimeEntry = new UnmanagedHitObjectEntry(initialHitObject);
|
lifetimeEntry = new UnmanagedHitObjectEntry(initialHitObject);
|
||||||
|
ensureEntryHasResult();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -239,13 +242,7 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
LifetimeStart = lifetimeEntry.LifetimeStart;
|
LifetimeStart = lifetimeEntry.LifetimeStart;
|
||||||
LifetimeEnd = lifetimeEntry.LifetimeEnd;
|
LifetimeEnd = lifetimeEntry.LifetimeEnd;
|
||||||
|
|
||||||
// Ensure this DHO has a result.
|
ensureEntryHasResult();
|
||||||
lifetimeEntry.Result ??= CreateResult(HitObject.CreateJudgement())
|
|
||||||
?? throw new InvalidOperationException($"{GetType().ReadableName()} must provide a {nameof(JudgementResult)} through {nameof(CreateResult)}.");
|
|
||||||
|
|
||||||
// Copy back the result to the entry for potential future retrieval.
|
|
||||||
if (lifetimeEntry != null)
|
|
||||||
lifetimeEntry.Result = Result;
|
|
||||||
|
|
||||||
foreach (var h in HitObject.NestedHitObjects)
|
foreach (var h in HitObject.NestedHitObjects)
|
||||||
{
|
{
|
||||||
@ -799,6 +796,13 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
/// <param name="judgement">The <see cref="Judgement"/> that provides the scoring information.</param>
|
/// <param name="judgement">The <see cref="Judgement"/> that provides the scoring information.</param>
|
||||||
protected virtual JudgementResult CreateResult(Judgement judgement) => new JudgementResult(HitObject, judgement);
|
protected virtual JudgementResult CreateResult(Judgement judgement) => new JudgementResult(HitObject, judgement);
|
||||||
|
|
||||||
|
private void ensureEntryHasResult()
|
||||||
|
{
|
||||||
|
Debug.Assert(lifetimeEntry != null);
|
||||||
|
lifetimeEntry.Result ??= CreateResult(HitObject.CreateJudgement())
|
||||||
|
?? throw new InvalidOperationException($"{GetType().ReadableName()} must provide a {nameof(JudgementResult)} through {nameof(CreateResult)}.");
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool isDisposing)
|
protected override void Dispose(bool isDisposing)
|
||||||
{
|
{
|
||||||
base.Dispose(isDisposing);
|
base.Dispose(isDisposing);
|
||||||
|
Reference in New Issue
Block a user