Use the same mechanism for loading ingame and shellmap ui.

This commit is contained in:
Paul Chote
2011-05-08 21:23:01 +12:00
parent 07d5f91325
commit d95138b600
6 changed files with 41 additions and 11 deletions

View File

@@ -113,6 +113,16 @@ namespace OpenRA
});
}
public static Widget LoadWidget(World world, string widget, Dictionary<string, object> args)
{
return Widget.LoadWidget(widget, new Dictionary<string,object>(args)
{
{ "world", world },
{ "orderManager", orderManager },
{ "worldRenderer", worldRenderer },
});
}
static ActionQueue afterTickActions = new ActionQueue();
public static void RunAfterTick(Action a) { afterTickActions.Add(a); }

View File

@@ -91,11 +91,8 @@ namespace OpenRA.Mods.Cnc.Widgets
var onQuit = (Action)(() =>
{
Game.DisconnectOnly();
// This is stupid. It should be handled by the shellmap
Game.LoadShellMap();
Widget.RootWidget.RemoveChildren();
Widget.LoadWidget("MENU_BACKGROUND", new Dictionary<string, object>());
Game.LoadShellMap();
});
var doNothing = (Action)(() => {});

View File

@@ -10,9 +10,11 @@
using OpenRA.Traits;
using OpenRA.Widgets;
using System.Collections.Generic;
namespace OpenRA.Mods.RA
{
// Legacy crap
public class OpenWidgetAtGameStartInfo : ITraitInfo
{
public readonly string Widget = "INGAME_ROOT";
@@ -40,4 +42,25 @@ namespace OpenRA.Mods.RA
Game.OpenWindow(world, Info.ObserverWidget);
}
}
// New version
public class LoadWidgetAtGameStartInfo : ITraitInfo
{
public readonly string Widget = null;
public object Create(ActorInitializer init) { return new LoadWidgetAtGameStart(this); }
}
public class LoadWidgetAtGameStart: IWorldLoaded
{
readonly LoadWidgetAtGameStartInfo Info;
public LoadWidgetAtGameStart(LoadWidgetAtGameStartInfo Info)
{
this.Info = Info;
}
public void WorldLoaded(World world)
{
Game.LoadWidget(world, Info.Widget, new Dictionary<string, object>());
}
}
}

View File

@@ -71,12 +71,12 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
if (FileSystem.Exists(Info.TestFile))
{
Game.LoadShellMap();
if (Info.InstallMode != "cnc")
{
Widget.RootWidget.RemoveChildren();
if (Info.InstallMode == "cnc")
Widget.LoadWidget("MENU_BACKGROUND", new Dictionary<string, object>());
else
Widget.OpenWindow("MAINMENU_BG");
}
}
else
{
MainMenuButtonsDelegate.DisplayModSelector();

View File

@@ -1014,7 +1014,8 @@ Rules:
-CrateSpawner:
CncShellmapScript:
DesaturatedPaletteEffect:
-OpenWidgetAtGameStart:
LoadWidgetAtGameStart:
Widget:MENU_BACKGROUND
LST:
Mobile:
Speed: 3

View File

@@ -44,9 +44,8 @@ Player:
SurrenderOnDisconnect:
World:
OpenWidgetAtGameStart:
LoadWidgetAtGameStart:
Widget: INGAME_ROOT
ObserverWidget: OBSERVER_ROOT
ScreenShaker:
NukePaletteEffect:
CncWaterPaletteRotation: