fix accumulation of gameserver buttons, and potential crashes in joining

This commit is contained in:
Chris Forbes
2010-03-16 19:07:47 +13:00
parent 088b97fd96
commit 03cf04c42e

View File

@@ -47,23 +47,25 @@ namespace OpenRA.Widgets.Delegates
public class ServerBrowserDelegate : IWidgetDelegate public class ServerBrowserDelegate : IWidgetDelegate
{ {
IEnumerable<GameServer> GameList; GameServer[] GameList;
List<Widget> GameButtons = new List<Widget>();
public bool OnClick(Widget w, MouseInput mi) public bool OnClick(Widget w, MouseInput mi)
{ {
// Main Menu root // Main Menu root
if (w.Id == "MAINMENU_BUTTON_JOIN") if (w.Id == "MAINMENU_BUTTON_JOIN")
{ {
WidgetLoader.rootWidget.GetWidget("MAINMENU_BG").Visible = false; WidgetLoader.rootWidget.GetWidget("MAINMENU_BG").Visible = false;
Widget bg = WidgetLoader.rootWidget.GetWidget("JOINSERVER_BG"); Widget bg = WidgetLoader.rootWidget.GetWidget("JOINSERVER_BG");
bg.Visible = true; bg.Visible = true;
int height = 50; int height = 50;
int width = 300; int width = 300;
int i = 0; int i = 0;
GameList = MasterServerQuery.GetGameList(Game.Settings.MasterServer); GameList = MasterServerQuery.GetGameList(Game.Settings.MasterServer).ToArray();
//bg.Children.Clear(); bg.Children.RemoveAll(a => GameButtons.Contains(a));
GameButtons.Clear();
foreach (var game in GameList) foreach (var game in GameList)
{ {
@@ -74,7 +76,8 @@ namespace OpenRA.Widgets.Delegates
b.GetType().GetField("Delegate").SetValue( b, "ServerBrowserDelegate"); b.GetType().GetField("Delegate").SetValue( b, "ServerBrowserDelegate");
b.EventBounds = b.Bounds; b.EventBounds = b.Bounds;
bg.AddChild(b); bg.AddChild(b);
GameButtons.Add(b);
height += 35; height += 35;
} }
@@ -91,8 +94,7 @@ namespace OpenRA.Widgets.Delegates
if (w.Id.Substring(0,10) == "JOIN_GAME_") if (w.Id.Substring(0,10) == "JOIN_GAME_")
{ {
int index = int.Parse(w.Id.Substring(10)); int index = int.Parse(w.Id.Substring(10));
GameList = MasterServerQuery.GetGameList(Game.Settings.MasterServer); var game = GameList[index];
var game = GameList.ElementAt(index);
Game.JoinServer(game.Address.Split(':')[0], int.Parse(game.Address.Split(':')[1])); Game.JoinServer(game.Address.Split(':')[0], int.Parse(game.Address.Split(':')[1]));
return true; return true;
} }