Singleplayer campaign support: player/world init

This commit is contained in:
Paul Chote
2010-08-16 15:19:53 +12:00
parent d6f0a03270
commit 56b0da0b13
13 changed files with 155 additions and 49 deletions

View File

@@ -93,43 +93,18 @@ namespace OpenRA
WorldActor = CreateActor( "World", new TypeDictionary() );
// Add Map Players
int mapPlayerIndex = -1;
Dictionary<string, Player> MapPlayers = new Dictionary<string, Player>();
// Add players
foreach (var cmp in WorldActor.TraitsImplementing<ICreatePlayers>())
cmp.CreatePlayers(this);
foreach (var kv in Map.Players)
{
var player = new Player(this, kv.Value, mapPlayerIndex--);
AddPlayer(player);
MapPlayers.Add(kv.Key,player);
if (kv.Value.OwnsWorld)
WorldActor.Owner = player;
}
foreach(var p in MapPlayers)
{
foreach(var q in Map.Players[p.Key].Allies)
p.Value.Stances[MapPlayers[q]] = Stance.Ally;
foreach(var q in Map.Players[p.Key].Enemies)
p.Value.Stances[MapPlayers[q]] = Stance.Enemy;
}
// Add real players
SetLocalPlayer(Game.orderManager.Connection.LocalClientId);
foreach (var c in Game.LobbyInfo.Clients)
AddPlayer(new Player(this, c));
// Set defaults for any unset stances
foreach (var p in players.Values)
foreach (var q in players.Values)
{
if (!p.Stances.ContainsKey(q))
p.Stances[q] = Game.ChooseInitialStance(p, q);
}
p.Stances[q] = Stance.Neutral;
Timer.Time( "worldActor, players: {0}" );
Timer.Time( "worldActor: {0}" );
foreach (var wlh in WorldActor.TraitsImplementing<ILoadWorldHook>())
wlh.WorldLoaded(this);