Add better screen hierarchy and placeholder for dev build disclaimer.

This commit is contained in:
Dean Herbert 2017-02-17 20:07:11 +09:00
parent e6ef9f67aa
commit fe3a6248ec
No known key found for this signature in database
GPG Key ID: 46D71BF4958ABB49
7 changed files with 95 additions and 14 deletions

View File

@ -19,19 +19,21 @@ namespace osu.Desktop
{ {
class OsuGameDesktop : OsuGame class OsuGameDesktop : OsuGame
{ {
private VersionManager versionManager;
public override bool IsDeployedBuild => versionManager.IsDeployedBuild;
public OsuGameDesktop(string[] args = null) public OsuGameDesktop(string[] args = null)
: base(args) : base(args)
{ {
versionManager = new VersionManager();
} }
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
VersionManager versionManager; versionManager.Preload(this, Add);
(versionManager = new VersionManager()).Preload(this, Add);
Dependencies.Cache(versionManager);
} }
public override void SetHost(BasicGameHost host) public override void SetHost(BasicGameHost host)

View File

@ -25,7 +25,7 @@ namespace osu.Desktop.Overlays
AssemblyName assembly = Assembly.GetEntryAssembly().GetName(); AssemblyName assembly = Assembly.GetEntryAssembly().GetName();
public bool IsReleaseBuild => assembly.Version.Major > 0; public bool IsDeployedBuild => assembly.Version.Major > 0;
protected override bool HideOnEscape => false; protected override bool HideOnEscape => false;
@ -45,7 +45,7 @@ namespace osu.Desktop.Overlays
Debug.Assert(isDebug = true); Debug.Assert(isDebug = true);
string version; string version;
if (!IsReleaseBuild) if (!IsDeployedBuild)
{ {
version = @"local " + (isDebug ? @"debug" : @"release"); version = @"local " + (isDebug ? @"debug" : @"release");
} }

View File

@ -31,6 +31,8 @@ namespace osu.Game
{ {
public class OsuGame : OsuGameBase public class OsuGame : OsuGameBase
{ {
public virtual bool IsDeployedBuild => false;
public Toolbar Toolbar; public Toolbar Toolbar;
private ChatOverlay chat; private ChatOverlay chat;
@ -39,8 +41,16 @@ namespace osu.Game
private NotificationManager notificationManager; private NotificationManager notificationManager;
private MainMenu mainMenu => screenStack?.ChildGameScreen as MainMenu; private Intro intro
private Intro intro => screenStack as Intro; {
get
{
Screen s = screenStack;
while (s != null && !(s is Intro))
s = s.ChildScreen;
return s as Intro;
}
}
private OsuScreen screenStack; private OsuScreen screenStack;
@ -106,7 +116,7 @@ namespace osu.Game
} }
}); });
(screenStack = new Intro()).Preload(this, d => (screenStack = new Loader()).Preload(this, d =>
{ {
screenStack.ModePushed += screenAdded; screenStack.ModePushed += screenAdded;
screenStack.Exited += screenRemoved; screenStack.Exited += screenRemoved;
@ -148,7 +158,7 @@ namespace osu.Game
(Toolbar = new Toolbar (Toolbar = new Toolbar
{ {
Depth = -3, Depth = -3,
OnHome = delegate { mainMenu?.MakeCurrent(); }, OnHome = delegate { intro?.ChildScreen?.MakeCurrent(); },
OnPlayModeChange = delegate (PlayMode m) { PlayMode.Value = m; }, OnPlayModeChange = delegate (PlayMode m) { PlayMode.Value = m; },
}).Preload(this, t => }).Preload(this, t =>
{ {
@ -226,7 +236,8 @@ namespace osu.Game
Toolbar.State = Visibility.Visible; Toolbar.State = Visibility.Visible;
} }
Cursor.FadeIn(100); if (newScreen is MainMenu)
Cursor.FadeIn(100);
ModeChanged?.Invoke(newScreen); ModeChanged?.Invoke(newScreen);
@ -249,8 +260,8 @@ namespace osu.Game
{ {
base.UpdateAfterChildren(); base.UpdateAfterChildren();
if (screenStack.ChildScreen != null) if (intro?.ChildScreen != null)
screenStack.ChildScreen.Padding = new MarginPadding { Top = Toolbar.Position.Y + Toolbar.DrawHeight }; intro.ChildScreen.Padding = new MarginPadding { Top = Toolbar.Position.Y + Toolbar.DrawHeight };
} }
private void screenAdded(Screen newScreen) private void screenAdded(Screen newScreen)

View File

@ -0,0 +1,28 @@
// 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.Allocation;
using osu.Framework.Screens;
using osu.Game.Screens.Menu;
namespace osu.Game.Screens
{
class Loader : OsuScreen
{
internal override bool ShowOverlays => false;
public Loader()
{
ValidForResume = false;
}
[BackgroundDependencyLoader]
private void load(OsuGame game)
{
if (game.IsDeployedBuild)
new Disclaimer().Preload(game, d => Push((Screen)d));
else
new Intro().Preload(game, d => Push((Screen)d));
}
}
}

View File

@ -0,0 +1,38 @@
// 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 System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using osu.Framework.Allocation;
using osu.Framework.Screens;
namespace osu.Game.Screens.Menu
{
class Disclaimer : OsuScreen
{
private Intro intro;
internal override bool ShowOverlays => false;
[BackgroundDependencyLoader]
private void load(OsuGame game)
{
(intro = new Intro()).Preload(game);
}
protected override void OnEntering(Screen last)
{
base.OnEntering(last);
FadeInFromZero(100);
Delay(5000);
FadeOut(100);
Push(intro);
}
}
}

View File

@ -28,7 +28,7 @@ namespace osu.Game.Screens.Menu
private AudioSample seeya; private AudioSample seeya;
private AudioTrack bgm; private AudioTrack bgm;
internal override bool ShowOverlays => (ParentScreen as OsuScreen)?.ShowOverlays ?? false; internal override bool ShowOverlays => false;
protected override BackgroundScreen CreateBackground() => new BackgroundScreenEmpty(); protected override BackgroundScreen CreateBackground() => new BackgroundScreenEmpty();

View File

@ -131,7 +131,9 @@
<Compile Include="Screens\Charts\ChartInfo.cs" /> <Compile Include="Screens\Charts\ChartInfo.cs" />
<Compile Include="Screens\Edit\Editor.cs" /> <Compile Include="Screens\Edit\Editor.cs" />
<Compile Include="Screens\GameScreenWhiteBox.cs" /> <Compile Include="Screens\GameScreenWhiteBox.cs" />
<Compile Include="Screens\Loader.cs" />
<Compile Include="Screens\Menu\Button.cs" /> <Compile Include="Screens\Menu\Button.cs" />
<Compile Include="Screens\Menu\Disclaimer.cs" />
<Compile Include="Screens\Menu\FlowContainerWithOrigin.cs" /> <Compile Include="Screens\Menu\FlowContainerWithOrigin.cs" />
<Compile Include="Screens\Menu\Intro.cs" /> <Compile Include="Screens\Menu\Intro.cs" />
<Compile Include="Screens\Menu\ButtonSystem.cs" /> <Compile Include="Screens\Menu\ButtonSystem.cs" />