Example #1
0
        public void CreatePlayers(World w)
        {
            var players      = new MapPlayers(w.Map.PlayerDefinitions).Players;
            var worldPlayers = new List <Player>();

            // Create the unplayable map players -- neutral, shellmap, scripted, etc.
            foreach (var kv in players.Where(p => !p.Value.Playable))
            {
                var player = new Player(w, null, kv.Value);
                worldPlayers.Add(player);
                if (kv.Value.OwnsWorld)
                {
                    w.SetWorldOwner(player);
                }
            }

            Player localPlayer = null;

            // Create the regular playable players.
            foreach (var kv in w.LobbyInfo.Slots)
            {
                var client = w.LobbyInfo.ClientInSlot(kv.Key);
                if (client == null)
                {
                    continue;
                }

                var player = new Player(w, client, players[kv.Value.PlayerReference]);
                worldPlayers.Add(player);

                if (client.Index == Game.LocalClientId)
                {
                    localPlayer = player;
                }
            }

            // Create a player that is allied with everyone for shared observer shroud.
            worldPlayers.Add(new Player(w, null, new PlayerReference
            {
                Name         = "Everyone",
                NonCombatant = true,
                Spectating   = true,
                Faction      = "Random",
                Allies       = worldPlayers.Where(p => !p.NonCombatant && p.Playable).Select(p => p.InternalName).ToArray()
            }));

            w.SetPlayers(worldPlayers, localPlayer);

            foreach (var p in w.Players)
            {
                foreach (var q in w.Players)
                {
                    if (!p.Stances.ContainsKey(q))
                    {
                        p.Stances[q] = ChooseInitialStance(p, q);
                    }
                }
            }
        }
        void ICreatePlayers.CreatePlayers(World w, MersenneTwister playerRandom)
        {
            var players         = new MapPlayers(w.Map.PlayerDefinitions).Players;
            var worldPlayers    = new List <Player>();
            var worldOwnerFound = false;

            // Create the unplayable map players -- neutral, shellmap, scripted, etc.
            foreach (var kv in players.Where(p => !p.Value.Playable))
            {
                var player = new Player(w, null, kv.Value, playerRandom);
                worldPlayers.Add(player);

                if (kv.Value.OwnsWorld)
                {
                    worldOwnerFound = true;
                    w.SetWorldOwner(player);
                }
            }

            if (!worldOwnerFound)
            {
                throw new InvalidOperationException("Map {0} does not define a player actor owning the world.".F(w.Map.Title));
            }

            Player localPlayer = null;

            // Create the regular playable players.
            foreach (var kv in w.LobbyInfo.Slots)
            {
                var client = w.LobbyInfo.ClientInSlot(kv.Key);
                if (client == null)
                {
                    continue;
                }

                var player = new Player(w, client, players[kv.Value.PlayerReference], playerRandom);
                worldPlayers.Add(player);

                if (client.Index == Game.LocalClientId)
                {
                    localPlayer = player;
                }
            }

            // Create a player that is allied with everyone for shared observer shroud.
            worldPlayers.Add(new Player(w, null, new PlayerReference
            {
                Name         = "Everyone",
                NonCombatant = true,
                Spectating   = true,
                Faction      = "Random",
                Allies       = worldPlayers.Where(p => !p.NonCombatant && p.Playable).Select(p => p.InternalName).ToArray()
            }, playerRandom));

            w.SetPlayers(worldPlayers, localPlayer);

            foreach (var p in w.Players)
            {
                foreach (var q in w.Players)
                {
                    SetupPlayerMasks(p, q);
                }
            }
        }