Fix map-player ctor.

This commit is contained in:
Paul Chote
2010-05-23 20:48:19 +12:00
parent a6f5b12a55
commit 9837b4ce32
4 changed files with 24 additions and 34 deletions

View File

@@ -46,6 +46,22 @@ namespace OpenRA
public ShroudRenderer Shroud;
public World World { get; private set; }
public Player( World world, PlayerReference pr, int index )
{
World = world;
Shroud = new ShroudRenderer(this, world.Map);
PlayerActor = world.CreateActor("Player", new int2(int.MaxValue, int.MaxValue), this);
Index = index;
Palette = pr.Palette;
Color = world.PlayerColors().Where(c => c.Name == pr.Palette).FirstOrDefault().Color;
PlayerName = InternalName = pr.Name;
isSpecial = pr.isSpecial;
Country = world.GetCountries()
.FirstOrDefault(c => pr.Race == c.Race);
}
public Player( World world, Session.Client client )
{
World = world;
@@ -53,22 +69,11 @@ namespace OpenRA
PlayerActor = world.CreateActor("Player", new int2(int.MaxValue, int.MaxValue), this);
if (client != null)
{
Index = client.Index;
Palette = world.PlayerColors()[client.PaletteIndex % world.PlayerColors().Count()].Name;
Color = world.PlayerColors()[client.PaletteIndex % world.PlayerColors().Count()].Color;
PlayerName = client.Name;
InternalName = "Multi{0}".F(client.Index);
}
else
{
Index = -1;
PlayerName = InternalName = "Neutral";
Palette = "neutral";
Color = Color.Gray; // HACK HACK
}
Country = world.GetCountries()
.FirstOrDefault(c => client != null && client.Country == c.Name)
?? world.GetCountries().Random(world.SharedRandom);

View File

@@ -114,7 +114,7 @@ namespace OpenRA.Widgets.Delegates
}
}
bool PaletteAvailable(int index) { return Game.LobbyInfo.Clients.All(c => c.PaletteIndex != index); }
bool PaletteAvailable(int index) { return Game.LobbyInfo.Clients.All(c => c.PaletteIndex != index) && Game.world.PlayerColors()[index % Game.world.PlayerColors().Count].Playable; }
bool SpawnPointAvailable(int index) { return (index == 0) || Game.LobbyInfo.Clients.All(c => c.SpawnPoint != index); }
bool CyclePalette(MouseInput mi)

View File

@@ -94,20 +94,7 @@ namespace OpenRA
int mapPlayerIndex = -1;
foreach (var kv in Map.Players)
{
var player = new Player(this, null);
// Lets just pretend that i didn't do this.... Will fix later
player.GetType().GetField("Index").SetValue( player, mapPlayerIndex-- );
player.GetType().GetField("Palette").SetValue( player, kv.Value.Palette );// Todo: set Player.Color as well
player.GetType().GetField("PlayerName").SetValue( player, kv.Value.Name );
player.GetType().GetField("InternalName").SetValue( player, kv.Value.Name );
player.GetType().GetField("isSpecial").SetValue( player, kv.Value.isSpecial );
var country = WorldActor.Info.Traits.WithInterface<CountryInfo>().FirstOrDefault(c => kv.Value.Race == c.Race);
if (country == null)
throw new NotImplementedException("Invalid country: {0}".F(kv.Value.Race));
player.GetType().GetField("Country").SetValue( player, country);
var player = new Player(this, kv.Value, mapPlayerIndex--);
AddPlayer(player);
if (kv.Value.OwnsWorld)

View File

@@ -239,9 +239,7 @@ namespace OpenRA
public static List<PlayerColorPaletteInfo> PlayerColors(this World world)
{
return world.WorldActor.Info.Traits.WithInterface<PlayerColorPaletteInfo>()
.Where(p => p.Playable)
.ToList();
return world.WorldActor.Info.Traits.WithInterface<PlayerColorPaletteInfo>().ToList();
}
}
}