mirror of
https://github.com/ppy/osu.git
synced 2025-01-14 00:42:55 +08:00
Display results after fail
This commit is contained in:
parent
15e7cce264
commit
7815b3c72b
@ -28,6 +28,8 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
|
|
||||||
public bool RestartOnFail => false;
|
public bool RestartOnFail => false;
|
||||||
|
|
||||||
|
public bool DisplayResultsOnFail => false;
|
||||||
|
|
||||||
private OsuInputManager inputManager;
|
private OsuInputManager inputManager;
|
||||||
|
|
||||||
private IFrameStableClock gameplayClock;
|
private IFrameStableClock gameplayClock;
|
||||||
|
@ -36,7 +36,7 @@ using osuTK;
|
|||||||
namespace osu.Game.Rulesets.Osu.Mods
|
namespace osu.Game.Rulesets.Osu.Mods
|
||||||
{
|
{
|
||||||
public class OsuModTarget : ModWithVisibilityAdjustment, IApplicableToDrawableRuleset<OsuHitObject>,
|
public class OsuModTarget : ModWithVisibilityAdjustment, IApplicableToDrawableRuleset<OsuHitObject>,
|
||||||
IApplicableToHealthProcessor, IApplicableToDifficulty
|
IApplicableToHealthProcessor, IApplicableToDifficulty, IApplicableFailOverride
|
||||||
{
|
{
|
||||||
public override string Name => "Target";
|
public override string Name => "Target";
|
||||||
public override string Acronym => "TP";
|
public override string Acronym => "TP";
|
||||||
@ -52,6 +52,12 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
Value = null
|
Value = null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public bool PerformFail() => true;
|
||||||
|
|
||||||
|
public bool RestartOnFail => false;
|
||||||
|
|
||||||
|
public bool DisplayResultsOnFail => true;
|
||||||
|
|
||||||
public void ApplyToHealthProcessor(HealthProcessor healthProcessor)
|
public void ApplyToHealthProcessor(HealthProcessor healthProcessor)
|
||||||
{
|
{
|
||||||
// Sudden death
|
// Sudden death
|
||||||
|
@ -18,5 +18,10 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
/// Whether we want to restart on fail. Only used if <see cref="PerformFail"/> returns true.
|
/// Whether we want to restart on fail. Only used if <see cref="PerformFail"/> returns true.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool RestartOnFail { get; }
|
bool RestartOnFail { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether to proceed to results screen on fail. Only used if <see cref="PerformFail"/> returns true and <see cref="RestartOnFail"/> is false.
|
||||||
|
/// </summary>
|
||||||
|
bool DisplayResultsOnFail { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,8 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
|
|
||||||
public bool RestartOnFail => false;
|
public bool RestartOnFail => false;
|
||||||
|
|
||||||
|
public bool DisplayResultsOnFail => false;
|
||||||
|
|
||||||
public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModFailCondition), typeof(ModNoFail) };
|
public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModFailCondition), typeof(ModNoFail) };
|
||||||
|
|
||||||
public override bool HasImplementation => GetType().GenericTypeArguments.Length == 0;
|
public override bool HasImplementation => GetType().GenericTypeArguments.Length == 0;
|
||||||
|
@ -17,6 +17,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
public bool PerformFail() => false;
|
public bool PerformFail() => false;
|
||||||
|
|
||||||
public bool RestartOnFail => false;
|
public bool RestartOnFail => false;
|
||||||
|
public bool DisplayResultsOnFail => false;
|
||||||
|
|
||||||
public void ReadFromConfig(OsuConfigManager config)
|
public void ReadFromConfig(OsuConfigManager config)
|
||||||
{
|
{
|
||||||
|
@ -41,6 +41,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool RestartOnFail => false;
|
public bool RestartOnFail => false;
|
||||||
|
public bool DisplayResultsOnFail => false;
|
||||||
|
|
||||||
public void ApplyToHealthProcessor(HealthProcessor healthProcessor)
|
public void ApplyToHealthProcessor(HealthProcessor healthProcessor)
|
||||||
{
|
{
|
||||||
|
@ -14,6 +14,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
public virtual bool PerformFail() => true;
|
public virtual bool PerformFail() => true;
|
||||||
|
|
||||||
public virtual bool RestartOnFail => true;
|
public virtual bool RestartOnFail => true;
|
||||||
|
public virtual bool DisplayResultsOnFail => false;
|
||||||
|
|
||||||
public void ApplyToHealthProcessor(HealthProcessor healthProcessor)
|
public void ApplyToHealthProcessor(HealthProcessor healthProcessor)
|
||||||
{
|
{
|
||||||
|
@ -604,7 +604,7 @@ namespace osu.Game.Screens.Play
|
|||||||
if (!this.IsCurrentScreen())
|
if (!this.IsCurrentScreen())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!ScoreProcessor.HasCompleted.Value)
|
if (!ScoreProcessor.HasCompleted.Value && !HealthProcessor.HasFailed)
|
||||||
{
|
{
|
||||||
completionProgressDelegate?.Cancel();
|
completionProgressDelegate?.Cancel();
|
||||||
completionProgressDelegate = null;
|
completionProgressDelegate = null;
|
||||||
@ -617,7 +617,7 @@ namespace osu.Game.Screens.Play
|
|||||||
throw new InvalidOperationException($"{nameof(updateCompletionState)} was fired more than once");
|
throw new InvalidOperationException($"{nameof(updateCompletionState)} was fired more than once");
|
||||||
|
|
||||||
// Only show the completion screen if the player hasn't failed
|
// Only show the completion screen if the player hasn't failed
|
||||||
if (HealthProcessor.HasFailed)
|
if (HealthProcessor.HasFailed && !Mods.Value.OfType<IApplicableFailOverride>().Any(m => m.DisplayResultsOnFail))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ValidForResume = false;
|
ValidForResume = false;
|
||||||
@ -712,6 +712,12 @@ namespace osu.Game.Screens.Play
|
|||||||
// Called back when the transform finishes
|
// Called back when the transform finishes
|
||||||
private void onFailComplete()
|
private void onFailComplete()
|
||||||
{
|
{
|
||||||
|
if (Mods.Value.OfType<IApplicableFailOverride>().Any(m => m.DisplayResultsOnFail))
|
||||||
|
{
|
||||||
|
updateCompletionState(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
GameplayClockContainer.Stop();
|
GameplayClockContainer.Stop();
|
||||||
|
|
||||||
FailOverlay.Retries = RestartCount;
|
FailOverlay.Retries = RestartCount;
|
||||||
|
Loading…
Reference in New Issue
Block a user