diff --git a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj index 8642956d8b..ac5fbd4237 100644 --- a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj +++ b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj @@ -35,6 +35,7 @@ + @@ -51,4 +52,7 @@ OpenRA.FileFormats + + + \ No newline at end of file diff --git a/OpenRA.Mods.TS/TSLoadScreen.cs b/OpenRA.Mods.TS/TSLoadScreen.cs new file mode 100644 index 0000000000..bfb726866d --- /dev/null +++ b/OpenRA.Mods.TS/TSLoadScreen.cs @@ -0,0 +1,92 @@ +#region Copyright & License Information +/* + * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Drawing; +using OpenRA.FileFormats; +using OpenRA.Graphics; +using OpenRA.Network; +using OpenRA.Support; +using OpenRA.Widgets; + +namespace OpenRA.Mods.TS +{ + public class TSLoadScreen : ILoadScreen + { + Dictionary Info; + static string[] Comments = new[] { "Updating EVA installation..." }; + + Stopwatch lastLoadScreen = new Stopwatch(); + Rectangle StripeRect; + Sprite Stripe, Logo; + float2 LogoPos; + + Renderer r; + public void Init(Dictionary info) + { + Info = info; + // Avoid standard loading mechanisms so we + // can display loadscreen as early as possible + r = Game.Renderer; + if (r == null) return; + + var s = new Sheet(Info["LoadScreenImage"]); + Logo = new Sprite(s, new Rectangle(0,0,256,256), TextureChannel.Alpha); + Stripe = new Sprite(s, new Rectangle(256,0,256,256), TextureChannel.Alpha); + StripeRect = new Rectangle(0, Renderer.Resolution.Height/2 - 128, Renderer.Resolution.Width, 256); + LogoPos = new float2(Renderer.Resolution.Width/2 - 128, Renderer.Resolution.Height/2 - 128); + } + + public void Display() + { + if (r == null) + return; + + // Update text at most every 0.5 seconds + if (lastLoadScreen.ElapsedTime() < 0.5) + return; + + if (r.Fonts == null) + return; + + lastLoadScreen.Reset(); + var text = Comments.Random(Game.CosmeticRandom); + var textSize = r.Fonts["Bold"].Measure(text); + + r.BeginFrame(float2.Zero, 1f); + WidgetUtils.FillRectWithSprite(StripeRect, Stripe); + r.RgbaSpriteRenderer.DrawSprite(Logo, LogoPos); + r.Fonts["Bold"].DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White); + r.EndFrame( new NullInputHandler() ); + } + + public void StartGame() + { + TestAndContinue(); + } + + void TestAndContinue() + { + Ui.ResetAll(); + if (!FileSystem.Exists(Info["TestFile"])) + { + var args = new WidgetArgs() + { + { "continueLoading", () => TestAndContinue() }, + { "installData", Info } + }; + Ui.OpenWindow(Info["InstallerMenuWidget"], args); + } + else + Game.LoadShellMap(); + } + } +} + diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 77c15fb7c3..cd6028d999 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -132,7 +132,7 @@ Music: Movies: -LoadScreen: RALoadScreen +LoadScreen: TSLoadScreen LoadScreenImage: mods/ts/uibits/loadscreen.png InstallerMenuWidget: INSTALL_PANEL TestFile: tibsun.mix