checkbox is failing somehow?

This commit is contained in:
alzeih
2010-04-24 18:55:47 +12:00
parent 17ae43c036
commit dfbf8eb813
4 changed files with 119 additions and 80 deletions

View File

@@ -155,65 +155,7 @@ namespace OpenRA
AddButton(r, _ => { }); AddButton(r, _ => { });
} }
bool PaletteAvailable(int index) { return Game.LobbyInfo.Clients.All(c => c.PaletteIndex != index); }
bool SpawnPointAvailable(int index) { return (index == 0) || Game.LobbyInfo.Clients.All(c => c.SpawnPoint != index); }
void CyclePalette(bool left)
{
var d = left ? +1 : Player.PlayerColors(Game.world).Count() - 1;
var newIndex = ((int)Game.LocalClient.PaletteIndex + d) % Player.PlayerColors(Game.world).Count();
while (!PaletteAvailable(newIndex) && newIndex != (int)Game.LocalClient.PaletteIndex)
newIndex = (newIndex + d) % Player.PlayerColors(Game.world).Count();
Game.IssueOrder(
Order.Chat("/pal " + newIndex));
}
void CycleRace(bool left)
{
var countries = new[] { "Random" }.Concat(Game.world.GetCountries().Select(c => c.Name));
var nextCountry = countries
.SkipWhile(c => c != Game.LocalClient.Country)
.Skip(1)
.FirstOrDefault();
if (nextCountry == null)
nextCountry = countries.First();
Game.IssueOrder(Order.Chat("/race " + nextCountry));
}
void CycleReady(bool left)
{
Game.IssueOrder(Order.Chat("/ready"));
}
void CycleSpawnPoint(bool left)
{
var d = left ? +1 : Game.world.Map.SpawnPoints.Count();
var newIndex = (Game.LocalClient.SpawnPoint + d) % (Game.world.Map.SpawnPoints.Count()+1);
while (!SpawnPointAvailable(newIndex) && newIndex != (int)Game.LocalClient.SpawnPoint)
newIndex = (newIndex + d) % (Game.world.Map.SpawnPoints.Count()+1);
Game.IssueOrder(
Order.Chat("/spawn " + newIndex));
}
void CycleTeam(bool left)
{
var d = left ? +1 : Game.world.Map.PlayerCount;
var newIndex = (Game.LocalClient.Team + d) % (Game.world.Map.PlayerCount+1);
Game.IssueOrder(
Order.Chat("/team " + newIndex));
}
public void DrawWidgets(World world) { rootWidget.Draw(world); shpRenderer.Flush(); rgbaRenderer.Flush(); } public void DrawWidgets(World world) { rootWidget.Draw(world); shpRenderer.Flush(); rgbaRenderer.Flush(); }

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Widgets
var pos = DrawPosition(); var pos = DrawPosition();
var rect = new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height); var rect = new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height);
WidgetUtils.DrawPanel("dialog3", new Rectangle(rect.Location, WidgetUtils.DrawPanel("dialog3", new Rectangle(rect.Location,
new Size(Bounds.Height, Bounds.Height))); //HACK! new Size(Bounds.Height, Bounds.Height)));
Game.chrome.renderer.BoldFont.DrawText(Text, Game.chrome.renderer.BoldFont.DrawText(Text,
new float2(rect.Left + rect.Height * 2, rect.Top), Color.White); new float2(rect.Left + rect.Height * 2, rect.Top), Color.White);

View File

@@ -1,7 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Drawing; using System.Drawing;
using OpenRA.FileFormats;
namespace OpenRA.Widgets.Delegates namespace OpenRA.Widgets.Delegates
{ {
@@ -22,24 +24,22 @@ namespace OpenRA.Widgets.Delegates
mapButton.OnMouseUp = mi => { mapButton.OnMouseUp = mi => {
r.OpenWindow("MAP_CHOOSER"); r.OpenWindow("MAP_CHOOSER");
return true; return true;
}; };
mapButton.IsVisible = () => {return (mapButton.Visible && Game.IsHost);}; mapButton.IsVisible = () => {return (mapButton.Visible && Game.IsHost);};
Game.LobbyInfoChanged += () => { UpdatePlayerList(); }; Game.LobbyInfoChanged += () => UpdatePlayerList();
UpdatePlayerList(); UpdatePlayerList();
} }
void UpdatePlayerList() void UpdatePlayerList()
{ {
Log.Write("UpdatePlayerList");
Players.Children.Clear(); Players.Children.Clear();
int i = 0;
int offset = 0;
foreach(var client in Game.LobbyInfo.Clients) foreach(var client in Game.LobbyInfo.Clients)
{ {
//HACK : "the c# spec is, IMHO, broken here"
var c = client; var c = client;
Log.Write("Client {0}",c.Name); Log.Write("Client {0}",c.Name);
@@ -48,15 +48,106 @@ namespace OpenRA.Widgets.Delegates
template.Id = "PLAYER_{0}".F(c.Index); template.Id = "PLAYER_{0}".F(c.Index);
template.Parent = Players; template.Parent = Players;
template.GetWidget<ButtonWidget>("NAME").GetText = () => {return c.Name; };
template.Bounds = new Rectangle(0, i, template.Bounds.Width, template.Bounds.Height); template.GetWidget<ButtonWidget>("NAME").GetText = () => c.Name;
template.IsVisible = () => {return true;};
//TODO: Real Color Button
var color = template.GetWidget<ButtonWidget>("COLOR");
color.OnMouseUp = mi => CyclePalette(mi);
color.GetText = () => c.PaletteIndex.ToString();
var faction = template.GetWidget<ButtonWidget>("FACTION");
faction.OnMouseUp = mi => CycleRace(mi);
faction.GetText = () => c.Country;
var spawn = template.GetWidget<ButtonWidget>("SPAWN");
spawn.OnMouseUp = mi => CycleSpawnPoint(mi);
spawn.GetText = () => { return (c.SpawnPoint == 0) ? "-" : c.SpawnPoint.ToString(); };
var team = template.GetWidget<ButtonWidget>("TEAM");
team.OnMouseUp = mi => CycleTeam(mi);
team.GetText = () => { return (c.Team == 0) ? "-" : c.Team.ToString(); };
//It fails here
var status = template.GetWidget<CheckboxWidget>("STATUS");
status.Checked = () => { return (c.State == Session.ClientState.Ready) ? true : false; };
status.OnMouseDown = mi => CycleReady(mi);
template.Bounds = new Rectangle(0, offset, template.Bounds.Width, template.Bounds.Height);
template.IsVisible = () => true;
Players.AddChild(template); Players.AddChild(template);
i += 30;
offset += template.Bounds.Height;
} }
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); bool PaletteAvailable(int index) { return Game.LobbyInfo.Clients.All(c => c.PaletteIndex != index); }
bool SpawnPointAvailable(int index) { return (index == 0) || Game.LobbyInfo.Clients.All(c => c.SpawnPoint != index); }
bool CyclePalette(MouseInput mi)
{
var d = (mi.Button == MouseButton.Left) ? +1 : Player.PlayerColors(Game.world).Count() - 1;
var newIndex = ((int)Game.LocalClient.PaletteIndex + d) % Player.PlayerColors(Game.world).Count();
while (!PaletteAvailable(newIndex) && newIndex != (int)Game.LocalClient.PaletteIndex)
newIndex = (newIndex + d) % Player.PlayerColors(Game.world).Count();
Game.IssueOrder(
Order.Chat("/pal " + newIndex));
return true;
}
bool CycleRace(MouseInput mi)
{
var countries = new[] { "Random" }.Concat(Game.world.GetCountries().Select(c => c.Name));
if (mi.Button == MouseButton.Right)
countries = countries.Reverse();
var nextCountry = countries
.SkipWhile(c => c != Game.LocalClient.Country)
.Skip(1)
.FirstOrDefault();
if (nextCountry == null)
nextCountry = countries.First();
Game.IssueOrder(Order.Chat("/race " + nextCountry));
return true;
}
bool CycleReady(MouseInput mi)
{
Game.IssueOrder(Order.Chat("/ready"));
return true;
}
bool CycleSpawnPoint(MouseInput mi)
{
var d = (mi.Button == MouseButton.Left) ? +1 : Game.world.Map.SpawnPoints.Count();
var newIndex = (Game.LocalClient.SpawnPoint + d) % (Game.world.Map.SpawnPoints.Count()+1);
while (!SpawnPointAvailable(newIndex) && newIndex != (int)Game.LocalClient.SpawnPoint)
newIndex = (newIndex + d) % (Game.world.Map.SpawnPoints.Count()+1);
Game.IssueOrder(
Order.Chat("/spawn " + newIndex));
return true;
}
bool CycleTeam(MouseInput mi)
{
var d = (mi.Button == MouseButton.Left) ? +1 : Game.world.Map.PlayerCount;
var newIndex = (Game.LocalClient.Team + d) % (Game.world.Map.PlayerCount+1);
Game.IssueOrder(
Order.Chat("/team " + newIndex));
return true;
} }
} }
} }

View File

@@ -292,53 +292,59 @@ Container:
Id:PLAYERS Id:PLAYERS
X:30 X:30
Y:75 Y:75
Width:455
Height:200
Children: Children:
Container@TEMPLATE Container@TEMPLATE
Id:TEMPLATE Id:TEMPLATE
X:0 X:0
Y:0 Y:0
Width:455
Height:30
Visible:false Visible:false
Children: Children:
Button@NAME Button@NAME:
Id:NAME Id:NAME
Text:Name Text:Name
Width:95 Width:95
Height:25 Height:25
X:0 X:0
Y:0 Y:0
Button@COLOR Button@COLOR:
Id:NAME Id:COLOR
Text:Color Text:Color
Width:65 Width:65
Height:25 Height:25
X:100 X:100
Y:0 Y:0
Button@FACTION Button@FACTION:
Id:FACTION Id:FACTION
Text:Faction Text:Faction
Width:90 Width:90
Height:25 Height:25
X:180 X:180
Y:0 Y:0
Button@SPAWN Button@SPAWN:
Id:SPAWN Id:SPAWN
Text:Spawn Text:Spawn
Width:70 Width:70
Height:25 Height:25
X:275 X:275
Y:0 Y:0
Button@TEAM Button@TEAM:
Id:TEAM Id:TEAM
Text:Team Text:Team
Width:70 Width:70
Height:25 Height:25
X:355 X:355
Y:0 Y:0
Button@STATUS Checkbox@STATUS:
Id:STATUS Id:STATUS
Text:Foo
X:430 X:430
Y:0 Y:0
Width:300
Height:20
Text:Show Spatial Index Debug
Button@CHANGEMAP_BUTTON: Button@CHANGEMAP_BUTTON:
Id:CHANGEMAP_BUTTON Id:CHANGEMAP_BUTTON
Visible:true Visible:true