Display the selector in all menus. Fix information leakage from previous mod.

This commit is contained in:
Paul Chote
2011-01-21 11:30:50 +13:00
parent 37fc836b46
commit 11aab8705e
5 changed files with 63 additions and 47 deletions

View File

@@ -102,7 +102,6 @@ namespace OpenRA
static object syncroot = new object(); static object syncroot = new object();
static Action tickActions = () => {}; static Action tickActions = () => {};
public static void RunAfterTick(Action a) { lock(syncroot) tickActions += a; } public static void RunAfterTick(Action a) { lock(syncroot) tickActions += a; }
static void Tick( OrderManager orderManager, Viewport viewPort ) static void Tick( OrderManager orderManager, Viewport viewPort )
{ {
@@ -251,10 +250,20 @@ namespace OpenRA
public static void InitializeWithMods(string[] mods) public static void InitializeWithMods(string[] mods)
{ {
// Clear static state if we have switched mods
LobbyInfoChanged = () => {};
AddChatLine = (a,b,c) => {};
worldRenderer = null;
if (server != null)
server.Shutdown();
if (orderManager != null)
orderManager.Dispose();
// Discard any invalid mods // Discard any invalid mods
var mm = mods.Where( m => Mod.AllMods.ContainsKey( m ) ).ToArray(); var mm = mods.Where( m => Mod.AllMods.ContainsKey( m ) ).ToArray();
Console.WriteLine("Loading mods: {0}",string.Join(",",mm)); Console.WriteLine("Loading mods: {0}",string.Join(",",mm));
modData = new ModData( mm ); modData = new ModData( mm );
modData.LoadInitialAssets(); modData.LoadInitialAssets();

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -30,6 +31,9 @@ namespace OpenRA.Mods.RA
public void WorldLoaded(World world) public void WorldLoaded(World world)
{ {
// Remove all open widgets
Widget.RootWidget.Children.Clear();
if (world.LocalPlayer != null) if (world.LocalPlayer != null)
Game.OpenWindow(world, Info.Widget); Game.OpenWindow(world, Info.Widget);
else if (Info.ObserverWidget != null) else if (Info.ObserverWidget != null)

View File

@@ -31,7 +31,8 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
widget.GetWidget("MAINMENU_BUTTON_REPLAY_VIEWER").OnMouseUp = mi => { Widget.OpenWindow("REPLAYBROWSER_BG"); return true; }; widget.GetWidget("MAINMENU_BUTTON_REPLAY_VIEWER").OnMouseUp = mi => { Widget.OpenWindow("REPLAYBROWSER_BG"); return true; };
widget.GetWidget("MAINMENU_BUTTON_QUIT").OnMouseUp = mi => { Game.Exit(); return true; }; widget.GetWidget("MAINMENU_BUTTON_QUIT").OnMouseUp = mi => { Game.Exit(); return true; };
var selector = widget.GetWidget<ButtonWidget>("QUICKMODSWITCHER"); var switcher = Game.modData.WidgetLoader.LoadWidget( new Dictionary<string,object>(), Widget.RootWidget, "QUICKMODSWITCHER" );
var selector = switcher.GetWidget<ButtonWidget>("SWITCHER");
selector.OnMouseDown = _ => ShowModsDropDown(selector); selector.OnMouseDown = _ => ShowModsDropDown(selector);
selector.GetText = ActiveModTitle; selector.GetText = ActiveModTitle;
} }
@@ -57,7 +58,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
} }
dropDownOptions.Add(new Pair<string, Action>( kv.Value.Title, dropDownOptions.Add(new Pair<string, Action>( kv.Value.Title,
() => Game.InitializeWithMods( modList.ToArray() ) )); () => Game.RunAfterTick(() => Game.InitializeWithMods( modList.ToArray() ) )));
} }
DropDownButtonWidget.ShowDropDown( selector, DropDownButtonWidget.ShowDropDown( selector,

View File

@@ -72,28 +72,29 @@ Background@MAINMENU_BG:
Height:25 Height:25
Text:Video Player Text:Video Player
Bold:True Bold:True
Background@QUICKMODSWITCHER_BG: Background@QUICKMODSWITCHER:
Background: dialog4 Id:QUICKMODSWITCHER
X:(WINDOW_RIGHT - PARENT_LEFT - WIDTH - 10) Background: dialog4
Y:10 - PARENT_TOP X:(WINDOW_RIGHT - PARENT_LEFT - WIDTH - 10)
Width:205 Y:10 - PARENT_TOP
Height:35 Width:205
Children: Height:35
Label@TITLE: Children:
X:8 Label@TITLE:
Y:3 X:8
Width:PARENT_RIGHT Y:3
Height:25 Width:PARENT_RIGHT
Text:Mod: Height:25
Align:Left Text:Mod:
Bold:True Align:Left
DropDownButton@QUICKMODSWITCHER: Bold:True
Id:QUICKMODSWITCHER DropDownButton@SWITCHER:
Text:Team Id:SWITCHER
Width:150 Text:Team
Height:25 Width:150
X:50 Height:25
Y:5 X:50
Y:5
Background@PERF_BG: Background@PERF_BG:
Id:PERF_BG Id:PERF_BG
Background:dialog4 Background:dialog4

View File

@@ -73,28 +73,29 @@ Background@MAINMENU_BG:
Height:25 Height:25
Text:Video Player Text:Video Player
Bold:True Bold:True
Background@QUICKMODSWITCHER_BG: Background@QUICKMODSWITCHER:
Background: dialog4 Id:QUICKMODSWITCHER
X:(WINDOW_RIGHT - PARENT_LEFT - WIDTH - 10) Background: dialog4
Y:10 - PARENT_TOP X:(WINDOW_RIGHT - PARENT_LEFT - WIDTH - 10)
Width:205 Y:10 - PARENT_TOP
Height:35 Width:205
Children: Height:35
Label@TITLE: Children:
X:8 Label@TITLE:
Y:3 X:8
Width:PARENT_RIGHT Y:3
Height:25 Width:PARENT_RIGHT
Text:Mod: Height:25
Align:Left Text:Mod:
Bold:True Align:Left
DropDownButton@QUICKMODSWITCHER: Bold:True
Id:QUICKMODSWITCHER DropDownButton@SWITCHER:
Text:Team Id:SWITCHER
Width:150 Text:Team
Height:25 Width:150
X:50 Height:25
Y:5 X:50
Y:5
Background@PERF_BG: Background@PERF_BG:
ClickThrough:true ClickThrough:true
Id:PERF_BG Id:PERF_BG