From d6042bd689a91c4b10d4074c0dd1558590f441dd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 6 Oct 2016 21:10:01 +0900 Subject: [PATCH] Add intro and begin to create central logic nest. --- osu.Game/GameModes/Menu/Intro.cs | 34 +++++++++++++++++++++++ osu.Game/GameModes/Menu/MainMenu.cs | 14 +++------- osu.Game/OsuGame.cs | 42 ++++++++++++++++++++++++++--- osu.Game/osu.Game.csproj | 1 + 4 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 osu.Game/GameModes/Menu/Intro.cs diff --git a/osu.Game/GameModes/Menu/Intro.cs b/osu.Game/GameModes/Menu/Intro.cs new file mode 100644 index 0000000000..7d20f65469 --- /dev/null +++ b/osu.Game/GameModes/Menu/Intro.cs @@ -0,0 +1,34 @@ +//Copyright (c) 2007-2016 ppy Pty Ltd . +//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Audio.Sample; +using osu.Framework.Audio.Track; +using osu.Framework.GameModes; + +namespace osu.Game.GameModes.Menu +{ + class Intro : OsuGameMode + { + public override void Load() + { + base.Load(); + + AudioSample welcome = Game.Audio.Sample.Get(@"welcome"); + welcome.Play(); + + AudioTrack bgm = Game.Audio.Track.Get(@"circles"); + bgm.Looping = true; + + Game.Scheduler.AddDelayed(delegate + { + bgm.Start(); + }, 600); + + Game.Scheduler.AddDelayed(delegate + { + Push(new MainMenu()); + }, 2900); + } + } +} diff --git a/osu.Game/GameModes/Menu/MainMenu.cs b/osu.Game/GameModes/Menu/MainMenu.cs index b257e9996c..dcb3498e6a 100644 --- a/osu.Game/GameModes/Menu/MainMenu.cs +++ b/osu.Game/GameModes/Menu/MainMenu.cs @@ -22,10 +22,6 @@ public class MainMenu : OsuGameMode private ButtonSystem buttons; public override string Name => @"Main Menu"; - protected override bool IsTopLevel => true; - - private AudioTrack bgm; - protected override BackgroundMode CreateBackground() => new BackgroundModeDefault(); public override void Load() @@ -34,13 +30,6 @@ public override void Load() OsuGame osu = (OsuGame)Game; - AudioSample welcome = Game.Audio.Sample.Get(@"welcome"); - welcome.Play(); - - bgm = Game.Audio.Track.Get(@"circles"); - bgm.Looping = true; - bgm.Start(); - Children = new Drawable[] { new ParallaxContainer @@ -50,6 +39,7 @@ public override void Load() { buttons = new ButtonSystem() { + Alpha = 0, OnChart = delegate { Push(new ChartListing()); }, OnDirect = delegate { Push(new OnlineListing()); }, OnEdit = delegate { Push(new EditSongSelect()); }, @@ -68,6 +58,8 @@ public override void Load() } } }; + + buttons.FadeIn(500); } protected override void OnSuspending(GameMode next) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 27b474bb82..bc14defda0 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -1,7 +1,9 @@ //Copyright (c) 2007-2016 ppy Pty Ltd . //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Framework.Configuration; +using osu.Framework.GameModes; using osu.Game.Configuration; using osu.Game.GameModes.Menu; using OpenTK; @@ -18,7 +20,8 @@ namespace osu.Game public class OsuGame : OsuGameBase { public Toolbar Toolbar; - public MainMenu MainMenu; + public MainMenu MainMenu => intro?.ChildGameMode as MainMenu; + private Intro intro; public Bindable PlayMode; @@ -34,18 +37,51 @@ public override void Load() base.Load(); Add(new Drawable[] { - MainMenu = new MainMenu(), + intro = new Intro(), Toolbar = new Toolbar { - OnHome = delegate { MainMenu.MakeCurrent(); }, + OnHome = delegate { MainMenu?.MakeCurrent(); }, OnSettings = delegate { Options.PoppedOut = !Options.PoppedOut; }, OnPlayModeChange = delegate (PlayMode m) { PlayMode.Value = m; }, + Alpha = 0.001f //fixes invalidation fuckup }, }); + intro.ModePushed += modeAdded; + PlayMode = Config.GetBindable(OsuConfig.PlayMode); PlayMode.ValueChanged += delegate { Toolbar.SetGameMode(PlayMode.Value); }; PlayMode.TriggerChange(); + + Cursor.Alpha = 0; + } + + public Action ModeChanged; + + private void modeChanged(GameMode newMode) + { + //central game mode change logic. + if (newMode is Player) + Toolbar.FadeOut(100); + else + Toolbar.FadeIn(100); + + Cursor.FadeIn(100); + + ModeChanged?.Invoke(newMode); + } + + private void modeAdded(GameMode newMode) + { + newMode.ModePushed += modeAdded; + newMode.Exited += modeRemoved; + + modeChanged(newMode); + } + + private void modeRemoved(GameMode newMode) + { + modeChanged(newMode); } public override bool Invalidate(Invalidation invalidation = Invalidation.All, Drawable source = null, bool shallPropagate = true) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 5b9dacf34c..a82dc20f60 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -73,6 +73,7 @@ +