Awesome loadscreen for ra; crashfixes

This commit is contained in:
Paul Chote
2010-08-25 01:27:52 +12:00
parent 08a60ca336
commit b17e6900ec
7 changed files with 37 additions and 5 deletions

View File

@@ -235,6 +235,9 @@ namespace OpenRA
public static void HandleKeyEvent(KeyInput e) public static void HandleKeyEvent(KeyInput e)
{ {
if (world == null)
return;
int sync = world.SyncHash(); int sync = world.SyncHash();
if (Widget.HandleKeyPress(e)) if (Widget.HandleKeyPress(e))

View File

@@ -45,6 +45,7 @@ namespace OpenRA.Graphics
static void LoadSequencesForCursor(XmlElement eCursor) static void LoadSequencesForCursor(XmlElement eCursor)
{ {
Viewport.DrawLoadScreen();
string cursorSrc = eCursor.GetAttribute("src"); string cursorSrc = eCursor.GetAttribute("src");
string palette = eCursor.GetAttribute("palette"); string palette = eCursor.GetAttribute("palette");
@@ -55,6 +56,7 @@ namespace OpenRA.Graphics
static void LoadSequencesForUnit(XmlElement eUnit) static void LoadSequencesForUnit(XmlElement eUnit)
{ {
Viewport.DrawLoadScreen();
string unitName = eUnit.GetAttribute("name"); string unitName = eUnit.GetAttribute("name");
try { try {
var sequences = eUnit.SelectNodes("./sequence").OfType<XmlElement>() var sequences = eUnit.SelectNodes("./sequence").OfType<XmlElement>()

View File

@@ -70,12 +70,35 @@ namespace OpenRA.Graphics
Timer.Time( "endFrame: {0}" ); Timer.Time( "endFrame: {0}" );
} }
public static void DrawLoadScreen( Renderer r, float loadFraction ) 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); r.BeginFrame(float2.Zero);
// Do stuff // 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.RgbaSpriteRenderer.Flush();
r.EndFrame(); r.EndFrame();
} }

View File

@@ -31,7 +31,7 @@ namespace OpenRA
FileSystem.LoadFromManifest( Manifest ); FileSystem.LoadFromManifest( Manifest );
ChromeProvider.Initialize( Manifest.Chrome ); ChromeProvider.Initialize( Manifest.Chrome );
Viewport.DrawLoadScreen(Game.Renderer, 0f); Viewport.DrawLoadScreen();
ObjectCreator = new ObjectCreator( Manifest ); ObjectCreator = new ObjectCreator( Manifest );
SheetBuilder = new SheetBuilder( TextureChannel.Red ); SheetBuilder = new SheetBuilder( TextureChannel.Red );
@@ -52,7 +52,7 @@ namespace OpenRA
string cachedTheatre = null; string cachedTheatre = null;
public Map PrepareMap(string uid) public Map PrepareMap(string uid)
{ {
Viewport.DrawLoadScreen(Game.Renderer, 0f); Viewport.DrawLoadScreen();
if (!AvailableMaps.ContainsKey(uid)) if (!AvailableMaps.ContainsKey(uid))
throw new InvalidDataException("Invalid map uid: {0}".F(uid)); throw new InvalidDataException("Invalid map uid: {0}".F(uid));

View File

@@ -64,7 +64,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
var postgameText = postgameBG.GetWidget<LabelWidget>("TEXT"); var postgameText = postgameBG.GetWidget<LabelWidget>("TEXT");
postgameBG.IsVisible = () => postgameBG.IsVisible = () =>
{ {
return Game.world.LocalPlayer.WinState != WinState.Undefined; return Game.world.LocalPlayer != null && Game.world.LocalPlayer.WinState != WinState.Undefined;
}; };
postgameText.GetText = () => postgameText.GetText = () =>

View File

@@ -208,4 +208,8 @@
<collection name="checkbox" src="buttons.png"> <collection name="checkbox" src="buttons.png">
<image name="checked" x="0" y="112" width="16" height="16" /> <image name="checked" x="0" y="112" width="16" height="16" />
</collection> </collection>
<collection name="loadscreen" src="dialog.png">
<image name="stripe" x="512" y="371" width="128" height="128" />
<image name="logo" x="544" y="128" width="253" height="240" />
</collection>
</chrome> </chrome>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 116 KiB