Refactor PauseOverlay, FailDialog -> FailOverlay

This commit is contained in:
Andrey Zavadskiy
2017-03-28 04:53:57 +03:00
parent 2f9a15092b
commit 5461c6516a
6 changed files with 121 additions and 114 deletions

View File

@ -1,8 +1,10 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using OpenTK.Graphics;
using osu.Framework.Logging;
using osu.Framework.Screens.Testing;
using osu.Game.Graphics;
using osu.Game.Screens.Play;
namespace osu.Desktop.VisualTests.Tests
@ -22,9 +24,12 @@ namespace osu.Desktop.VisualTests.Tests
{
Depth = -1,
OnResume = () => Logger.Log(@"Resume"),
OnRetry = () => Logger.Log(@"Retry"),
OnQuit = () => Logger.Log(@"Quit")
});
pauseOverlay.AddButton(@"Continue", Color4.Green, delegate { Logger.Log(@"Resume"); });
pauseOverlay.AddButton(@"Retry", Color4.Yellow, delegate { Logger.Log(@"Retry"); });
pauseOverlay.AddButton(@"Quit to Main Menu", new Color4(170, 27, 39, 255), delegate { Logger.Log(@"Quit"); });
AddButton("Pause", pauseOverlay.Show);
AddButton("Add Retry", delegate
{

View File

@ -1,42 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Screens;
using osu.Framework.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Screens.Backgrounds;
using OpenTK;
using OpenTK.Graphics;
namespace osu.Game.Screens.Play
{
internal class FailDialog : OsuScreen
{
protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap);
private static readonly Vector2 background_blur = new Vector2(20);
public FailDialog()
{
Add(new OsuSpriteText
{
Text = "You failed!",
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
TextSize = 50
});
}
protected override void OnEntering(Screen last)
{
base.OnEntering(last);
Background.Schedule(() => (Background as BackgroundScreenBeatmap)?.BlurTo(background_blur, 1000));
}
protected override bool OnExiting(Screen next)
{
Background.Schedule(() => Background.FadeColour(Color4.White, 500));
return base.OnExiting(next);
}
}
}

View File

@ -0,0 +1,49 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transforms;
using osu.Framework.Input;
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Screens.Play.Pause;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Input;
namespace osu.Game.Screens.Play
{
public class FailOverlay : PauseOverlay
{
public Action OnQuit;
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
{
if (args.Key == Key.Escape)
{
if (State == Visibility.Hidden) return false;
quit();
return true;
}
return base.OnKeyDown(state, args);
}
private void quit()
{
OnQuit?.Invoke();
Hide();
}
public FailOverlay()
{
title.Text = @"failed";
description.Text = @"you're dead, try again?";
}
}
}

View File

@ -27,8 +27,11 @@ namespace osu.Game.Screens.Play
protected override bool HideOnEscape => false;
public Action OnResume;
public Action OnRetry;
public Action OnQuit;
protected OsuSpriteText title;
protected OsuSpriteText description;
private FillFlowContainer buttons;
public int Retries
{
@ -92,9 +95,33 @@ namespace osu.Game.Screens.Play
return base.OnKeyDown(state, args);
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
private void resume()
{
OnResume?.Invoke();
Hide();
}
public void AddButton(string text, Color4 colour, Action action)
{
buttons.Add(new PauseButton
{
Text = text,
ButtonColour = colour,
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
Height = button_height,
Action = delegate {
action?.Invoke();
Hide();
}
});
}
public PauseOverlay()
{
AlwaysReceiveInput = true;
RelativeSizeAxes = Axes.Both;
Children = new Drawable[]
{
new Box
@ -123,7 +150,7 @@ namespace osu.Game.Screens.Play
Spacing = new Vector2(0, 20),
Children = new Drawable[]
{
new OsuSpriteText
title = new OsuSpriteText
{
Text = @"paused",
Font = @"Exo2.0-Medium",
@ -131,11 +158,11 @@ namespace osu.Game.Screens.Play
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
TextSize = 30,
Colour = colours.Yellow,
Colour = Color4.Yellow,
Shadow = true,
ShadowColour = new Color4(0, 0, 0, 0.25f)
},
new OsuSpriteText
description = new OsuSpriteText
{
Text = @"you're not going to do what i think you're going to do, are ya?",
Origin = Anchor.TopCentre,
@ -145,12 +172,13 @@ namespace osu.Game.Screens.Play
}
}
},
new FillFlowContainer
buttons = new FillFlowContainer
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Direction = FillDirection.Vertical,
Masking = true,
EdgeEffect = new EdgeEffect
{
@ -158,38 +186,6 @@ namespace osu.Game.Screens.Play
Colour = Color4.Black.Opacity(0.6f),
Radius = 50
},
Children = new Drawable[]
{
new ResumeButton
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
Height = button_height,
Action = resume
},
new RetryButton
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
Height = button_height,
Action = delegate
{
OnRetry?.Invoke();
Hide();
}
},
new QuitButton
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
Height = button_height,
Action = delegate
{
OnQuit?.Invoke();
Hide();
}
}
}
},
retryCounterContainer = new FillFlowContainer
{
@ -209,17 +205,5 @@ namespace osu.Game.Screens.Play
Retries = 0;
}
private void resume()
{
OnResume?.Invoke();
Hide();
}
public PauseOverlay()
{
AlwaysReceiveInput = true;
RelativeSizeAxes = Axes.Both;
}
}
}

View File

@ -24,6 +24,7 @@ using osu.Game.Screens.Ranking;
using System;
using System.Linq;
using osu.Game.Modes.Scoring;
using osu.Game.Graphics;
namespace osu.Game.Screens.Play
{
@ -33,7 +34,7 @@ namespace osu.Game.Screens.Play
internal override bool ShowOverlays => false;
internal override bool HasLocalCursorDisplayed => !hasReplayLoaded && !IsPaused;
internal override bool HasLocalCursorDisplayed => !hasReplayLoaded && !IsPaused && !IsFailed;
private bool hasReplayLoaded => hitRenderer.InputManager.ReplayInputHandler != null;
@ -41,6 +42,8 @@ namespace osu.Game.Screens.Play
public bool IsPaused { get; private set; }
public bool IsFailed { get; private set; }
public int RestartCount;
private const double pause_cooldown = 1000;
@ -60,9 +63,10 @@ namespace osu.Game.Screens.Play
private HudOverlay hudOverlay;
private PauseOverlay pauseOverlay;
private FailOverlay failOverlay;
[BackgroundDependencyLoader]
private void load(AudioManager audio, BeatmapDatabase beatmaps, OsuConfigManager config)
private void load(AudioManager audio, BeatmapDatabase beatmaps, OsuConfigManager config, OsuColour colours)
{
var beatmap = Beatmap.Beatmap;
@ -129,9 +133,19 @@ namespace osu.Game.Screens.Play
Delay(400);
Schedule(Resume);
},
OnRetry = Restart,
OnQuit = Exit
};
pauseOverlay.AddButton(@"Continue", colours.Green, delegate { Delay(400); Schedule(Resume); });
pauseOverlay.AddButton(@"Retry", colours.YellowDark, Restart);
pauseOverlay.AddButton(@"Quit to Main Menu", new Color4(170, 27, 39, 255), Exit);
failOverlay = new FailOverlay
{
Depth = -1,
OnQuit = Exit,
};
failOverlay.AddButton(@"Retry", colours.YellowDark, Restart);
failOverlay.AddButton(@"Quit to Main Menu", new Color4(170, 27, 39, 255), Exit);
if (ReplayInputHandler != null)
@ -161,7 +175,8 @@ namespace osu.Game.Screens.Play
}
},
hudOverlay,
pauseOverlay
pauseOverlay,
failOverlay
};
}
@ -261,15 +276,13 @@ namespace osu.Game.Screens.Play
private void onFail()
{
Content.FadeColour(Color4.Red, 500);
sourceClock.Stop();
Delay(500);
Schedule(delegate
{
ValidForResume = false;
Push(new FailDialog());
});
IsFailed = true;
failOverlay.Retries = RestartCount;
failOverlay.Show();
}
protected override void OnEntering(Screen last)
@ -339,6 +352,6 @@ namespace osu.Game.Screens.Play
public ReplayInputHandler ReplayInputHandler;
protected override bool OnWheel(InputState state) => mouseWheelDisabled.Value && !IsPaused;
protected override bool OnWheel(InputState state) => mouseWheelDisabled.Value && !IsPaused && !IsFailed;
}
}

View File

@ -194,8 +194,10 @@
<Compile Include="Screens\Multiplayer\Lobby.cs" />
<Compile Include="Screens\Multiplayer\Match.cs" />
<Compile Include="Screens\Multiplayer\MatchCreate.cs" />
<Compile Include="Screens\Play\FailDialog.cs" />
<Compile Include="Screens\Play\FailOverlay.cs" />
<Compile Include="Screens\Play\KeyConversionInputManager.cs" />
<Compile Include="Screens\Play\Pause\PauseButton.cs" />
<Compile Include="Screens\Play\PauseOverlay.cs" />
<Compile Include="Screens\Play\PlayerInputManager.cs" />
<Compile Include="Screens\Play\PlayerLoader.cs" />
<Compile Include="Screens\Play\SkipButton.cs" />
@ -331,12 +333,8 @@
<Compile Include="Screens\Select\SearchTextBox.cs" />
<Compile Include="Screens\Select\FooterButton.cs" />
<Compile Include="Screens\Select\Footer.cs" />
<Compile Include="Screens\Play\PauseOverlay.cs" />
<Compile Include="Screens\Play\Pause\PauseProgressBar.cs" />
<Compile Include="Screens\Play\Pause\PauseProgressGraph.cs" />
<Compile Include="Screens\Play\Pause\ResumeButton.cs" />
<Compile Include="Screens\Play\Pause\RetryButton.cs" />
<Compile Include="Screens\Play\Pause\QuitButton.cs" />
<Compile Include="Overlays\Mods\ModSelectOverlay.cs" />
<Compile Include="Modes\Mods\Mod.cs" />
<Compile Include="Overlays\Mods\ModButton.cs" />
@ -396,4 +394,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>