diff --git a/OpenRA.Mods.Cnc/CncLoadScreen.cs b/OpenRA.Mods.Cnc/CncLoadScreen.cs index 0cfef18d05..b171805e8b 100644 --- a/OpenRA.Mods.Cnc/CncLoadScreen.cs +++ b/OpenRA.Mods.Cnc/CncLoadScreen.cs @@ -18,20 +18,14 @@ using OpenRA.Widgets; namespace OpenRA.Mods.Cnc { public class CncLoadScreen : ILoadScreen - { - static string[] Comments = new[] { "Filling Crates...", "Charging Capacitors...", "Reticulating Splines...", - "Planting Trees...", "Building Bridges...", "Aging Empires...", - "Compiling EVA...", "Constructing Pylons...", "Activating Skynet...", - "Splitting Atoms..." - }; - + { Dictionary Info; Stopwatch lastLoadScreen = new Stopwatch(); - Rectangle StripeRect, BgRect; - Sprite Stripe, Logo, Bg; - float2 LogoPos; - + Sprite[] ss; + Rectangle Bounds; Renderer r; + NullInputHandler nih = new NullInputHandler(); + public void Init(Dictionary info) { Info = info; @@ -40,15 +34,20 @@ namespace OpenRA.Mods.Cnc r = Game.Renderer; if (r == null) return; - var s = new Sheet("mods/cnc/uibits/loadscreen.png"); - Logo = new Sprite(s, new Rectangle(0,0,256,256), TextureChannel.Alpha); - Bg = new Sprite(s, new Rectangle(0,256,512,256), TextureChannel.Alpha); - BgRect = new Rectangle(0, 0, Renderer.Resolution.Width, Renderer.Resolution.Height); - 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); + var s = new Sheet("mods/cnc/uibits/chrome.png"); + Bounds = new Rectangle(0,0,Renderer.Resolution.Width, Renderer.Resolution.Height); + ss = new Sprite[] + { + new Sprite(s, new Rectangle(161,128,62,33), TextureChannel.Alpha), + new Sprite(s, new Rectangle(161,223,62,33), TextureChannel.Alpha), + new Sprite(s, new Rectangle(128,161,33,62), TextureChannel.Alpha), + new Sprite(s, new Rectangle(223,161,33,62), TextureChannel.Alpha), + new Sprite(s, new Rectangle(128,128,33,33), TextureChannel.Alpha), + new Sprite(s, new Rectangle(223,128,33,33), TextureChannel.Alpha), + new Sprite(s, new Rectangle(128,223,33,33), TextureChannel.Alpha), + new Sprite(s, new Rectangle(223,223,33,33), TextureChannel.Alpha) + }; } - public void Display() { @@ -58,17 +57,53 @@ namespace OpenRA.Mods.Cnc // Update text at most every 0.5 seconds if (lastLoadScreen.ElapsedTime() < 0.5) return; - + var font = r.Fonts["BigBold"]; + var text = "Connecting to EVA..."; lastLoadScreen.Reset(); - var text = Comments.Random(Game.CosmeticRandom); - var textSize = r.Fonts["Bold"].Measure(text); + var textSize = font.Measure(text); r.BeginFrame(float2.Zero); - WidgetUtils.FillRectWithSprite(BgRect, Bg); - 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.Black); - r.EndFrame( new NullInputHandler() ); + DrawBorder(); + font.DrawText(text, new float2((Renderer.Resolution.Width - textSize.X) / 2, (Renderer.Resolution.Height - textSize.Y) / 2), Color.White); + r.EndFrame( nih ); + } + + + void DrawBorder() + { + // Left border + WidgetUtils.FillRectWithSprite(new Rectangle(Bounds.Left, + Bounds.Top + (int)ss[0].size.Y, + (int)ss[2].size.X, + Bounds.Bottom - (int)ss[1].size.Y - Bounds.Top - (int)ss[0].size.Y), + ss[2]); + + // Right border + WidgetUtils.FillRectWithSprite(new Rectangle(Bounds.Right - (int)ss[3].size.X, + Bounds.Top + (int)ss[0].size.Y, + (int)ss[2].size.X, + Bounds.Bottom - (int)ss[1].size.Y - Bounds.Top - (int)ss[0].size.Y), + ss[3]); + + // Top border + WidgetUtils.FillRectWithSprite(new Rectangle(Bounds.Left + (int)ss[2].size.X, + Bounds.Top, + Bounds.Right - (int)ss[3].size.X - Bounds.Left - (int)ss[2].size.X, + (int)ss[0].size.Y), + ss[0]); + + // Bottom border + WidgetUtils.FillRectWithSprite(new Rectangle(Bounds.Left + (int)ss[2].size.X, + Bounds.Bottom - (int)ss[1].size.Y, + Bounds.Right - (int)ss[3].size.X - Bounds.Left - (int)ss[2].size.X, + (int)ss[0].size.Y), + ss[1]); + + + WidgetUtils.DrawRGBA(ss[4], new float2(Bounds.Left, Bounds.Top)); + WidgetUtils.DrawRGBA(ss[5], new float2(Bounds.Right - ss[5].size.X, Bounds.Top)); + WidgetUtils.DrawRGBA(ss[6], new float2(Bounds.Left, Bounds.Bottom - ss[6].size.Y)); + WidgetUtils.DrawRGBA(ss[7], new float2(Bounds.Right - ss[7].size.X, Bounds.Bottom - ss[7].size.Y)); } public void StartGame() diff --git a/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs b/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs index 8ac1f78d30..c8a93c2d4b 100755 --- a/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs +++ b/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs @@ -45,6 +45,8 @@ namespace OpenRA.Mods.RA Sound.SoundVolumeModifier = 0f; LoopMusic(); + + SetViewport(); } void LoopMusic() @@ -57,14 +59,18 @@ namespace OpenRA.Mods.RA Sound.PlayMusicThen(Rules.Music[Info.Music], () => LoopMusic()); } + void SetViewport() + { + var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed; + var loc = ViewportOrigin + new float2(-15,4) * float2.FromAngle( (float)t ); + Game.viewport.Center(loc); + } + int ticks = 0; float speed = 4f; public void Tick(Actor self) { - var loc = new float2( - (float)(-System.Math.Sin((ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed) * 15f + ViewportOrigin.X), - (float)(0.4f*System.Math.Cos((ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed) * 10f + ViewportOrigin.Y)); - Game.MoveViewport(loc); + SetViewport(); if (ticks == 0) { diff --git a/mods/cnc/uibits/loadscreen.png b/mods/cnc/uibits/loadscreen.png deleted file mode 100644 index 85e73515c3..0000000000 Binary files a/mods/cnc/uibits/loadscreen.png and /dev/null differ