Fix map-player ctor.
This commit is contained in:
@@ -46,29 +46,34 @@ namespace OpenRA
|
||||
public ShroudRenderer Shroud;
|
||||
public World World { get; private set; }
|
||||
|
||||
public Player( World world, Session.Client client )
|
||||
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);
|
||||
|
||||
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
|
||||
}
|
||||
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;
|
||||
Shroud = new ShroudRenderer(this, world.Map);
|
||||
|
||||
PlayerActor = world.CreateActor("Player", new int2(int.MaxValue, int.MaxValue), this);
|
||||
|
||||
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);
|
||||
Country = world.GetCountries()
|
||||
.FirstOrDefault(c => client != null && client.Country == c.Name)
|
||||
?? world.GetCountries().Random(world.SharedRandom);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user