1 #region Copyright & License Information 2 /* 3 * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) 4 * This file is part of OpenRA, which is free software. It is made 5 * available to you under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, either version 3 of 7 * the License, or (at your option) any later version. For more 8 * information, see COPYING. 9 */ 10 #endregion 11 12 using System.Collections.Generic; 13 using System.Linq; 14 using OpenRA.Traits; 15 16 namespace OpenRA 17 { 18 public class MapPlayers 19 { 20 public readonly Dictionary<string, PlayerReference> Players; 21 MapPlayers()22 public MapPlayers() 23 : this(new List<MiniYamlNode>()) { } 24 MapPlayers(IEnumerable<MiniYamlNode> playerDefinitions)25 public MapPlayers(IEnumerable<MiniYamlNode> playerDefinitions) 26 { 27 Players = playerDefinitions.Select(pr => new PlayerReference(new MiniYaml(pr.Key, pr.Value.Nodes))) 28 .ToDictionary(player => player.Name); 29 } 30 MapPlayers(Ruleset rules, int playerCount)31 public MapPlayers(Ruleset rules, int playerCount) 32 { 33 var firstFaction = rules.Actors["world"].TraitInfos<FactionInfo>() 34 .First(f => f.Selectable).InternalName; 35 36 Players = new Dictionary<string, PlayerReference> 37 { 38 { 39 "Neutral", new PlayerReference 40 { 41 Name = "Neutral", 42 Faction = firstFaction, 43 OwnsWorld = true, 44 NonCombatant = true 45 } 46 }, 47 { 48 "Creeps", new PlayerReference 49 { 50 Name = "Creeps", 51 Faction = firstFaction, 52 NonCombatant = true, 53 Enemies = Exts.MakeArray(playerCount, i => "Multi{0}".F(i)) 54 } 55 } 56 }; 57 58 for (var index = 0; index < playerCount; index++) 59 { 60 var p = new PlayerReference 61 { 62 Name = "Multi{0}".F(index), 63 Faction = "Random", 64 Playable = true, 65 Enemies = new[] { "Creeps" } 66 }; 67 Players.Add(p.Name, p); 68 } 69 } 70 ToMiniYaml()71 public List<MiniYamlNode> ToMiniYaml() 72 { 73 return Players.Select(p => new MiniYamlNode("PlayerReference@{0}".F(p.Key), 74 FieldSaver.SaveDifferences(p.Value, new PlayerReference()))).ToList(); 75 } 76 } 77 } 78