1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-21 23:23:52 +08:00

Add statefulness to MenuCursor.

This commit is contained in:
Dean Herbert 2017-03-16 23:58:36 +09:00
parent 7110ab8e17
commit f9f31ca092
No known key found for this signature in database
GPG Key ID: 46D71BF4958ABB49
7 changed files with 40 additions and 10 deletions

View File

@ -55,6 +55,20 @@ namespace osu.Game.Graphics.Cursor
return base.OnDragStart(state); return base.OnDragStart(state);
} }
protected override void PopIn()
{
ActiveCursor.FadeTo(1, 250, EasingTypes.OutQuint);
ActiveCursor.ScaleTo(1, 1000, EasingTypes.OutElastic);
}
protected override void PopOut()
{
ActiveCursor.FadeTo(0, 1400, EasingTypes.OutQuint);
ActiveCursor.ScaleTo(1.1f, 100, EasingTypes.Out);
ActiveCursor.Delay(100);
ActiveCursor.ScaleTo(0, 500, EasingTypes.In);
}
public class Cursor : Container public class Cursor : Container
{ {
private Container cursorContainer; private Container cursorContainer;

View File

@ -220,7 +220,7 @@ namespace osu.Game
} }
}; };
Cursor.Alpha = 0; Cursor.State = Visibility.Hidden;
} }
private bool globalHotkeyPressed(InputState state, KeyDownEventArgs args) private bool globalHotkeyPressed(InputState state, KeyDownEventArgs args)
@ -264,10 +264,20 @@ namespace osu.Game
private Container overlayContent; private Container overlayContent;
private OsuScreen currentScreen;
private void screenChanged(Screen newScreen) private void screenChanged(Screen newScreen)
{ {
currentScreen = newScreen as OsuScreen;
if (currentScreen == null)
{
Exit();
return;
}
//central game mode change logic. //central game mode change logic.
if ((newScreen as OsuScreen)?.ShowOverlays != true) if (currentScreen.ShowOverlays != true)
{ {
Toolbar.State = Visibility.Hidden; Toolbar.State = Visibility.Hidden;
musicController.State = Visibility.Hidden; musicController.State = Visibility.Hidden;
@ -278,13 +288,7 @@ namespace osu.Game
Toolbar.State = Visibility.Visible; Toolbar.State = Visibility.Visible;
} }
if (newScreen is MainMenu)
Cursor.FadeIn(100);
ScreenChanged?.Invoke(newScreen); ScreenChanged?.Invoke(newScreen);
if (newScreen == null)
Exit();
} }
protected override bool OnExiting() protected override bool OnExiting()
@ -308,6 +312,8 @@ namespace osu.Game
if (intro?.ChildScreen != null) if (intro?.ChildScreen != null)
intro.ChildScreen.Padding = new MarginPadding { Top = Toolbar.Position.Y + Toolbar.DrawHeight }; intro.ChildScreen.Padding = new MarginPadding { Top = Toolbar.Position.Y + Toolbar.DrawHeight };
Cursor.State = currentScreen == null || currentScreen.HasLocalCursorDisplayed ? Visibility.Hidden : Visibility.Visible;
} }
private void screenAdded(Screen newScreen) private void screenAdded(Screen newScreen)

View File

@ -38,7 +38,7 @@ namespace osu.Game
private RatioAdjust ratioContainer; private RatioAdjust ratioContainer;
protected CursorContainer Cursor; protected MenuCursor Cursor;
public readonly Bindable<WorkingBeatmap> Beatmap = new Bindable<WorkingBeatmap>(); public readonly Bindable<WorkingBeatmap> Beatmap = new Bindable<WorkingBeatmap>();

View File

@ -21,6 +21,8 @@ namespace osu.Game.Screens.Menu
internal override bool ShowOverlays => false; internal override bool ShowOverlays => false;
internal override bool HasLocalCursorDisplayed => false;
public Disclaimer() public Disclaimer()
{ {
ValidForResume = false; ValidForResume = false;

View File

@ -28,6 +28,8 @@ namespace osu.Game.Screens.Menu
private SampleChannel seeya; private SampleChannel seeya;
private Track bgm; private Track bgm;
internal override bool HasLocalCursorDisplayed => true;
internal override bool ShowOverlays => false; internal override bool ShowOverlays => false;
protected override BackgroundScreen CreateBackground() => new BackgroundScreenEmpty(); protected override BackgroundScreen CreateBackground() => new BackgroundScreenEmpty();

View File

@ -24,6 +24,8 @@ namespace osu.Game.Screens
protected new OsuGameBase Game => base.Game as OsuGameBase; protected new OsuGameBase Game => base.Game as OsuGameBase;
internal virtual bool HasLocalCursorDisplayed => false;
private readonly Bindable<WorkingBeatmap> beatmap = new Bindable<WorkingBeatmap>(); private readonly Bindable<WorkingBeatmap> beatmap = new Bindable<WorkingBeatmap>();
public WorkingBeatmap Beatmap public WorkingBeatmap Beatmap

View File

@ -32,6 +32,10 @@ namespace osu.Game.Screens.Play
internal override bool ShowOverlays => false; internal override bool ShowOverlays => false;
internal override bool HasLocalCursorDisplayed => !hasReplayLoaded && !IsPaused;
private bool hasReplayLoaded => hitRenderer.InputManager.ReplayInputHandler != null;
public BeatmapInfo BeatmapInfo; public BeatmapInfo BeatmapInfo;
public bool IsPaused { get; private set; } public bool IsPaused { get; private set; }
@ -304,7 +308,7 @@ namespace osu.Game.Screens.Play
{ {
if (pauseOverlay == null) return false; if (pauseOverlay == null) return false;
if (hitRenderer.InputManager.ReplayInputHandler != null) if (hasReplayLoaded)
return false; return false;
if (pauseOverlay.State != Visibility.Visible && !canPause) return true; if (pauseOverlay.State != Visibility.Visible && !canPause) return true;