From b6b4df703a64a0fbfdc01d87c41e95cd0d84f475 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 25 Aug 2010 18:04:01 +1200 Subject: [PATCH] Shift loadscreen into mods --- OpenRA.FileFormats/Manifest.cs | 3 +- OpenRA.Game/Graphics/SequenceProvider.cs | 4 +- OpenRA.Game/Graphics/Viewport.cs | 33 ------------- OpenRA.Game/ModData.cs | 11 +++-- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 3 +- OpenRA.Mods.RA/RALoadScreen.cs | 62 ++++++++++++++++++++++++ mods/ra/mod.yaml | 1 + 7 files changed, 77 insertions(+), 40 deletions(-) create mode 100644 OpenRA.Mods.RA/RALoadScreen.cs diff --git a/OpenRA.FileFormats/Manifest.cs b/OpenRA.FileFormats/Manifest.cs index 8594286cf7..0b91bcc0ba 100644 --- a/OpenRA.FileFormats/Manifest.cs +++ b/OpenRA.FileFormats/Manifest.cs @@ -22,7 +22,7 @@ namespace OpenRA.FileFormats Sequences, Chrome, Assemblies, ChromeLayout, Weapons, Voices, Music, Movies, TileSets; - public readonly string ShellmapUid; + public readonly string ShellmapUid, LoadScreen; public Manifest(string[] mods) { @@ -44,6 +44,7 @@ namespace OpenRA.FileFormats TileSets = YamlList(yaml, "TileSets"); ShellmapUid = yaml["ShellmapUid"].Value; + LoadScreen = yaml["LoadScreen"].Value; } static string[] YamlList(Dictionary ys, string key) diff --git a/OpenRA.Game/Graphics/SequenceProvider.cs b/OpenRA.Game/Graphics/SequenceProvider.cs index 196ccc2ee2..4bbc562206 100644 --- a/OpenRA.Game/Graphics/SequenceProvider.cs +++ b/OpenRA.Game/Graphics/SequenceProvider.cs @@ -45,7 +45,7 @@ namespace OpenRA.Graphics static void LoadSequencesForCursor(XmlElement eCursor) { - Viewport.DrawLoadScreen(); + Game.modData.LoadScreen.Display(); string cursorSrc = eCursor.GetAttribute("src"); string palette = eCursor.GetAttribute("palette"); @@ -56,7 +56,7 @@ namespace OpenRA.Graphics static void LoadSequencesForUnit(XmlElement eUnit) { - Viewport.DrawLoadScreen(); + Game.modData.LoadScreen.Display(); string unitName = eUnit.GetAttribute("name"); try { var sequences = eUnit.SelectNodes("./sequence").OfType() diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index 3a56467d54..08bf870ace 100644 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -70,39 +70,6 @@ namespace OpenRA.Graphics Timer.Time( "endFrame: {0}" ); } - static string[] loadComments = new[] { "Filling Crates...", "Charging Capacitors...", "Reticulating Splines...", - "Planting Trees...", "Building Bridges...", "Aging Empires...", - "Compiling EVA...", "Constructing Pylons...", "Activating Skynet...", - "Splitting Atoms..." - }; - static Stopwatch lastLoadScreen = new Stopwatch(); - public static void DrawLoadScreen() - { - // Update text at most every 0.5 seconds - if (lastLoadScreen.ElapsedTime() < 0.5) - return; - - lastLoadScreen.Reset(); - - var r = Game.Renderer; - var font = r.BoldFont; - r.BeginFrame(float2.Zero); - - // Hardcode layout for now - WidgetUtils.FillRectWithSprite(new Rectangle(0, Renderer.Resolution.Height/2 - 64, Renderer.Resolution.Width, 128), ChromeProvider.GetImage("loadscreen", "stripe")); - - var logo = ChromeProvider.GetImage("loadscreen","logo"); - var logoPos = new float2((Renderer.Resolution.Width - logo.size.X)/2,(Renderer.Resolution.Height - logo.size.Y)/2); - r.RgbaSpriteRenderer.DrawSprite(logo, logoPos); - - var text = loadComments.Random(Game.CosmeticRandom); - var textSize = font.Measure(text); - - font.DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White); - r.RgbaSpriteRenderer.Flush(); - r.EndFrame(); - } - public void RefreshPalette() { Game.world.WorldRenderer.palette.Update( diff --git a/OpenRA.Game/ModData.cs b/OpenRA.Game/ModData.cs index c006515c1f..ae3fab2980 100755 --- a/OpenRA.Game/ModData.cs +++ b/OpenRA.Game/ModData.cs @@ -24,6 +24,7 @@ namespace OpenRA public readonly SheetBuilder SheetBuilder; public readonly CursorSheetBuilder CursorSheetBuilder; public readonly Dictionary AvailableMaps; + public ILoadScreen LoadScreen = null; public ModData( params string[] mods ) { @@ -31,9 +32,11 @@ namespace OpenRA FileSystem.LoadFromManifest( Manifest ); ChromeProvider.Initialize( Manifest.Chrome ); - Viewport.DrawLoadScreen(); - ObjectCreator = new ObjectCreator( Manifest ); + + LoadScreen = ObjectCreator.CreateObject(Manifest.LoadScreen); + LoadScreen.Display(); + SheetBuilder = new SheetBuilder( TextureChannel.Red ); CursorSheetBuilder = new CursorSheetBuilder( this ); AvailableMaps = FindMaps( mods ); @@ -52,7 +55,7 @@ namespace OpenRA string cachedTheatre = null; public Map PrepareMap(string uid) { - Viewport.DrawLoadScreen(); + LoadScreen.Display(); if (!AvailableMaps.ContainsKey(uid)) throw new InvalidDataException("Invalid map uid: {0}".F(uid)); @@ -75,4 +78,6 @@ namespace OpenRA return map; } } + + public interface ILoadScreen { void Display(); } } diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index ebadf88c06..22b5905e46 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -1,4 +1,4 @@ - + Debug @@ -239,6 +239,7 @@ + diff --git a/OpenRA.Mods.RA/RALoadScreen.cs b/OpenRA.Mods.RA/RALoadScreen.cs new file mode 100644 index 0000000000..150039b6e2 --- /dev/null +++ b/OpenRA.Mods.RA/RALoadScreen.cs @@ -0,0 +1,62 @@ +#region Copyright & License Information +/* + * Copyright 2007-2010 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 LICENSE. + */ +#endregion + +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using OpenRA.Support; +using OpenRA.Graphics; +using OpenRA.Widgets; + +namespace OpenRA.Mods.RA +{ + public class RALoadScreen : ILoadScreen + { + public RALoadScreen () + { + + } + + static string[] loadComments = new[] { "Filling Crates...", "Charging Capacitors...", "Reticulating Splines...", + "Planting Trees...", "Building Bridges...", "Aging Empires...", + "Compiling EVA...", "Constructing Pylons...", "Activating Skynet...", + "Splitting Atoms..." + }; + + static Stopwatch lastLoadScreen = new Stopwatch(); + public void Display() + { + // Update text at most every 0.5 seconds + if (lastLoadScreen.ElapsedTime() < 0.5) + return; + + lastLoadScreen.Reset(); + + var r = Game.Renderer; + var font = r.BoldFont; + r.BeginFrame(float2.Zero); + + WidgetUtils.FillRectWithSprite(new Rectangle(0, Renderer.Resolution.Height/2 - 64, Renderer.Resolution.Width, 128), ChromeProvider.GetImage("loadscreen", "stripe")); + + var logo = ChromeProvider.GetImage("loadscreen","logo"); + var logoPos = new float2((Renderer.Resolution.Width - logo.size.X)/2,(Renderer.Resolution.Height - logo.size.Y)/2); + r.RgbaSpriteRenderer.DrawSprite(logo, logoPos); + + var text = loadComments.Random(Game.CosmeticRandom); + var textSize = font.Measure(text); + + font.DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White); + + r.RgbaSpriteRenderer.Flush(); + r.EndFrame(); + } + } +} + diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 5d5b72aa6a..82f9c42625 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -67,4 +67,5 @@ Movies: mods/ra/movies1.yaml mods/ra/movies2.yaml +LoadScreen: RALoadScreen ShellmapUid:5065fbcb8e5b1b6cea2a003c64f9b48fcaa33e06