Files
OpenRA/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs
2010-04-24 19:48:15 +12:00

63 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
namespace OpenRA.Widgets.Delegates
{
public class LobbyDelegate : IWidgetDelegate
{
Widget PlayerTemplate;
Widget Players;
public LobbyDelegate ()
{
var r = Chrome.rootWidget;
var lobby = r.GetWidget("SERVER_LOBBY");
Players = Chrome.rootWidget.GetWidget("SERVER_LOBBY").GetWidget("PLAYERS");
PlayerTemplate = Players.GetWidget("TEMPLATE");
var mapButton = lobby.GetWidget("CHANGEMAP_BUTTON");
mapButton.OnMouseUp = mi => {
r.OpenWindow("MAP_CHOOSER");
return true;
};
mapButton.IsVisible = () => {return (mapButton.Visible && Game.IsHost);};
Game.LobbyInfoChanged += () => { UpdatePlayerList(); };
UpdatePlayerList();
}
void UpdatePlayerList()
{
Log.Write("UpdatePlayerList");
Players.Children.Clear();
int i = 0;
foreach(var client in Game.LobbyInfo.Clients)
{
//HACK : "the c# spec is, IMHO, broken here"
var c = client;
Log.Write("Client {0}",c.Name);
var template = PlayerTemplate.Clone();
var pos = template.DrawPosition();
template.Id = "PLAYER_{0}".F(c.Index);
template.Parent = Players;
template.GetWidget<ButtonWidget>("NAME").GetText = () => {return c.Name; };
template.Bounds = new Rectangle(pos.X, pos.Y + i, template.Bounds.Width, template.Bounds.Height);
template.IsVisible = () => {return true;};
Players.AddChild(template);
i += 30;
}
Log.Write("Players has {0} children",Players.Children.Count);
foreach (var foo in Players.Children)
Log.Write("{0} {1} {2}",foo.Id, foo.GetWidget<ButtonWidget>("NAME").GetText(), foo.Bounds.Y);
}
}
}