diff --git a/OpenRA.Game/Map/MapPreview.cs b/OpenRA.Game/Map/MapPreview.cs index d1c04b0a54..2f88782796 100644 --- a/OpenRA.Game/Map/MapPreview.cs +++ b/OpenRA.Game/Map/MapPreview.cs @@ -86,11 +86,13 @@ namespace OpenRA public MapVisibility Visibility; Lazy rules; - public Ruleset Rules => rules?.Value; public bool InvalidCustomRules { get; private set; } public bool DefinesUnsafeCustomRules { get; private set; } public bool RulesLoaded { get; private set; } + public ActorInfo WorldActorInfo => rules?.Value.Actors[SystemActors.World]; + public ActorInfo PlayerActorInfo => rules?.Value.Actors[SystemActors.Player]; + public void SetRulesetGenerator(ModData modData, Func<(Ruleset Ruleset, bool DefinesUnsafeCustomRules)> generator) { InvalidCustomRules = false; @@ -154,16 +156,18 @@ namespace OpenRA public MapClassification Class => innerData.Class; public MapVisibility Visibility => innerData.Visibility; - public Ruleset Rules => innerData.Rules; public bool InvalidCustomRules => innerData.InvalidCustomRules; public bool RulesLoaded => innerData.RulesLoaded; + public ActorInfo WorldActorInfo => innerData.WorldActorInfo; + public ActorInfo PlayerActorInfo => innerData.PlayerActorInfo; + public bool DefinesUnsafeCustomRules { get { // Force lazy rules to be evaluated - var force = innerData.Rules; + var force = innerData.WorldActorInfo; return innerData.DefinesUnsafeCustomRules; } } @@ -338,7 +342,7 @@ namespace OpenRA public void PreloadRules() { - var unused = Rules; + var unused = WorldActorInfo; } public void UpdateRemoteSearch(MapStatus status, MiniYaml yaml, Action parseMetadata = null) diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 317038d48f..f251db246e 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -1209,7 +1209,7 @@ namespace OpenRA.Server // The null padding is needed to keep the player indexes in sync with world.Players on the clients // This will need to change if future code wants to use worldPlayers for other purposes var playerRandom = new MersenneTwister(LobbyInfo.GlobalSettings.RandomSeed); - foreach (var cmpi in Map.Rules.Actors[SystemActors.World].TraitInfos()) + foreach (var cmpi in Map.WorldActorInfo.TraitInfos()) cmpi.CreateServerPlayers(Map, LobbyInfo, worldPlayers, playerRandom); if (recorder != null) diff --git a/OpenRA.Game/Traits/Player/Shroud.cs b/OpenRA.Game/Traits/Player/Shroud.cs index 720d0fdc97..42ee303704 100644 --- a/OpenRA.Game/Traits/Player/Shroud.cs +++ b/OpenRA.Game/Traits/Player/Shroud.cs @@ -54,7 +54,7 @@ namespace OpenRA.Traits [Desc("Display order for the explore map checkbox in the lobby.")] public readonly int ExploredMapCheckboxDisplayOrder = 0; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption("explored", ExploredMapCheckboxLabel, ExploredMapCheckboxDescription, ExploredMapCheckboxVisible, ExploredMapCheckboxDisplayOrder, ExploredMapCheckboxEnabled, ExploredMapCheckboxLocked); diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 9c4b2cba25..f57a115d25 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -530,7 +530,7 @@ namespace OpenRA.Traits [RequireExplicitImplementation] public interface ILobbyOptions : ITraitInfoInterface { - IEnumerable LobbyOptions(Ruleset rules); + IEnumerable LobbyOptions(MapPreview map); } public class LobbyOption diff --git a/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs index dd6f5d4c71..b04b792bfb 100644 --- a/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs @@ -357,7 +357,7 @@ namespace OpenRA.Mods.Common.Server } var botType = parts[2]; - var botInfo = server.Map.Rules.Actors[SystemActors.Player].TraitInfos() + var botInfo = server.Map.PlayerActorInfo.TraitInfos() .FirstOrDefault(b => b.Type == botType); if (botInfo == null) @@ -386,7 +386,7 @@ namespace OpenRA.Mods.Common.Server // Pick a random color for the bot var validator = server.ModData.Manifest.Get(); - var terrainColors = server.Map.Rules.TerrainInfo.RestrictedPlayerColors; + var terrainColors = server.ModData.DefaultTerrainInfo[server.Map.TileSet].RestrictedPlayerColors; var playerColors = server.LobbyInfo.Clients.Select(c => c.Color) .Concat(server.Map.Players.Players.Values.Select(p => p.Color)); bot.Color = bot.PreferredColor = validator.RandomPresetColor(server.Random, terrainColors, playerColors); @@ -437,10 +437,10 @@ namespace OpenRA.Mods.Common.Server .Where(ss => ss != null) .ToDictionary(ss => ss.PlayerReference, ss => ss); - LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map.Rules); + LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map); // Reset client states - var selectableFactions = server.Map.Rules.Actors[SystemActors.World].TraitInfos() + var selectableFactions = server.Map.WorldActorInfo.TraitInfos() .Where(f => f.Selectable) .Select(f => f.InternalName) .ToList(); @@ -457,7 +457,7 @@ namespace OpenRA.Mods.Common.Server // - Players who now lack a slot are made observers // - Bots who now lack a slot are dropped // - Bots who are not defined in the map rules are dropped - var botTypes = server.Map.Rules.Actors[SystemActors.Player].TraitInfos().Select(t => t.Type); + var botTypes = server.Map.PlayerActorInfo.TraitInfos().Select(t => t.Type); var slots = server.LobbyInfo.Slots.Keys.ToArray(); var i = 0; foreach (var os in oldSlots) @@ -534,9 +534,9 @@ namespace OpenRA.Mods.Common.Server return true; } - var allOptions = server.Map.Rules.Actors[SystemActors.Player].TraitInfos() - .Concat(server.Map.Rules.Actors[SystemActors.World].TraitInfos()) - .SelectMany(t => t.LobbyOptions(server.Map.Rules)); + var allOptions = server.Map.PlayerActorInfo.TraitInfos() + .Concat(server.Map.WorldActorInfo.TraitInfos()) + .SelectMany(t => t.LobbyOptions(server.Map)); // Overwrite keys with duplicate ids var options = new Dictionary(); @@ -775,7 +775,7 @@ namespace OpenRA.Mods.Common.Server if (server.LobbyInfo.Slots[targetClient.Slot].LockFaction) return true; - var factions = server.Map.Rules.Actors[SystemActors.World].TraitInfos() + var factions = server.Map.WorldActorInfo.TraitInfos() .Where(f => f.Selectable).Select(f => f.InternalName); if (!factions.Contains(parts[1])) @@ -1018,7 +1018,7 @@ namespace OpenRA.Mods.Common.Server .Where(s => s != null) .ToDictionary(s => s.PlayerReference, s => s); - LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map.Rules); + LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map); } } @@ -1041,13 +1041,13 @@ namespace OpenRA.Mods.Common.Server }; } - public static void LoadMapSettings(S server, Session.Global gs, Ruleset rules) + public static void LoadMapSettings(S server, Session.Global gs, MapPreview map) { lock (server.LobbyInfo) { - var options = rules.Actors[SystemActors.Player].TraitInfos() - .Concat(rules.Actors[SystemActors.World].TraitInfos()) - .SelectMany(t => t.LobbyOptions(rules)); + var options = map.PlayerActorInfo.TraitInfos() + .Concat(map.WorldActorInfo.TraitInfos()) + .SelectMany(t => t.LobbyOptions(map)); foreach (var o in options) { @@ -1090,7 +1090,7 @@ namespace OpenRA.Mods.Common.Server server.SendOrderTo(connectionToEcho, "Message", message); }; - var terrainColors = server.Map.Rules.TerrainInfo.RestrictedPlayerColors; + var terrainColors = server.ModData.DefaultTerrainInfo[server.Map.TileSet].RestrictedPlayerColors; var playerColors = server.LobbyInfo.Clients.Where(c => c.Index != playerIndex).Select(c => c.Color) .Concat(server.Map.Players.Players.Values.Select(p => p.Color)).ToList(); @@ -1100,7 +1100,7 @@ namespace OpenRA.Mods.Common.Server static string MissionBriefingOrDefault(S server) { - var missionData = server.Map.Rules.Actors[SystemActors.World].TraitInfoOrDefault(); + var missionData = server.Map.WorldActorInfo.TraitInfoOrDefault(); if (missionData != null && !string.IsNullOrEmpty(missionData.Briefing)) return missionData.Briefing.Replace("\\n", "\n"); diff --git a/OpenRA.Mods.Common/ServerTraits/LobbySettingsNotification.cs b/OpenRA.Mods.Common/ServerTraits/LobbySettingsNotification.cs index 744009d037..0262e1433e 100644 --- a/OpenRA.Mods.Common/ServerTraits/LobbySettingsNotification.cs +++ b/OpenRA.Mods.Common/ServerTraits/LobbySettingsNotification.cs @@ -23,11 +23,11 @@ namespace OpenRA.Mods.Common.Server lock (server.LobbyInfo) { var defaults = new Session.Global(); - LobbyCommands.LoadMapSettings(server, defaults, server.Map.Rules); + LobbyCommands.LoadMapSettings(server, defaults, server.Map); - var options = server.Map.Rules.Actors[SystemActors.Player].TraitInfos() - .Concat(server.Map.Rules.Actors[SystemActors.World].TraitInfos()) - .SelectMany(t => t.LobbyOptions(server.Map.Rules)) + var options = server.Map.PlayerActorInfo.TraitInfos() + .Concat(server.Map.WorldActorInfo.TraitInfos()) + .SelectMany(t => t.LobbyOptions(server.Map)) .ToDictionary(o => o.Id, o => o); foreach (var kv in server.LobbyInfo.GlobalSettings.LobbyOptions) diff --git a/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs b/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs index 18eb25a7a9..4d42ec1097 100644 --- a/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs @@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Enable the path debug overlay by default.")] public readonly bool PathDebug; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption("cheats", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked); } diff --git a/OpenRA.Mods.Common/Traits/Player/PlayerResources.cs b/OpenRA.Mods.Common/Traits/Player/PlayerResources.cs index 593841119a..aee94fec89 100644 --- a/OpenRA.Mods.Common/Traits/Player/PlayerResources.cs +++ b/OpenRA.Mods.Common/Traits/Player/PlayerResources.cs @@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Monetery value of each resource type.", "Dictionary of [resource type]: [value per unit].")] public readonly Dictionary ResourceValues = new Dictionary(); - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { var startingCash = SelectableCash.ToDictionary(c => c.ToString(), c => "$" + c.ToString()); diff --git a/OpenRA.Mods.Common/Traits/Player/TimeLimitManager.cs b/OpenRA.Mods.Common/Traits/Player/TimeLimitManager.cs index d0ea76e51f..6d06f5c86f 100644 --- a/OpenRA.Mods.Common/Traits/Player/TimeLimitManager.cs +++ b/OpenRA.Mods.Common/Traits/Player/TimeLimitManager.cs @@ -74,7 +74,7 @@ namespace OpenRA.Mods.Common.Traits throw new YamlException("TimeLimitDefault must be a value from TimeLimitOptions"); } - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { var timelimits = TimeLimitOptions.ToDictionary(c => c.ToString(), c => { diff --git a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs index 591babcd3b..d4a971e0fa 100644 --- a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs +++ b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs @@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Spawn and remove the plane this far outside the map.")] public readonly WDist Cordon = new WDist(5120); - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption("crates", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked); } diff --git a/OpenRA.Mods.Common/Traits/World/CreateMapPlayers.cs b/OpenRA.Mods.Common/Traits/World/CreateMapPlayers.cs index b337940aa6..460f9dab2c 100644 --- a/OpenRA.Mods.Common/Traits/World/CreateMapPlayers.cs +++ b/OpenRA.Mods.Common/Traits/World/CreateMapPlayers.cs @@ -28,9 +28,8 @@ namespace OpenRA.Mods.Common.Traits /// void ICreatePlayersInfo.CreateServerPlayers(MapPreview map, Session lobbyInfo, List players, MersenneTwister playerRandom) { - var worldInfo = map.Rules.Actors[SystemActors.World]; - var factions = worldInfo.TraitInfos().ToArray(); - var assignSpawnLocations = worldInfo.TraitInfoOrDefault(); + var factions = map.WorldActorInfo.TraitInfos().ToArray(); + var assignSpawnLocations = map.WorldActorInfo.TraitInfoOrDefault(); var spawnState = assignSpawnLocations?.InitializeState(map, lobbyInfo); // Create the unplayable map players -- neutral, shellmap, scripted, etc. @@ -42,7 +41,7 @@ namespace OpenRA.Mods.Common.Traits } // Create the regular playable players. - var bots = map.Rules.Actors[SystemActors.Player].TraitInfos().ToArray(); + var bots = map.PlayerActorInfo.TraitInfos().ToArray(); foreach (var kv in lobbyInfo.Slots) { diff --git a/OpenRA.Mods.Common/Traits/World/LobbyPrerequisiteCheckbox.cs b/OpenRA.Mods.Common/Traits/World/LobbyPrerequisiteCheckbox.cs index 27ff90a02d..e8412ef42d 100644 --- a/OpenRA.Mods.Common/Traits/World/LobbyPrerequisiteCheckbox.cs +++ b/OpenRA.Mods.Common/Traits/World/LobbyPrerequisiteCheckbox.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.Common.Traits IEnumerable ITechTreePrerequisiteInfo.Prerequisites(ActorInfo info) { return Prerequisites; } - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption(ID, Label, Description, Visible, DisplayOrder, Enabled, Locked); diff --git a/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs b/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs index a21b98c29f..1f00eff00b 100644 --- a/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs +++ b/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs @@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the build radius checkbox in the lobby.")] public readonly int BuildRadiusCheckboxDisplayOrder = 0; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption("allybuild", AllyBuildRadiusCheckboxLabel, AllyBuildRadiusCheckboxDescription, AllyBuildRadiusCheckboxVisible, AllyBuildRadiusCheckboxDisplayOrder, AllyBuildRadiusCheckboxEnabled, AllyBuildRadiusCheckboxLocked); diff --git a/OpenRA.Mods.Common/Traits/World/MapCreeps.cs b/OpenRA.Mods.Common/Traits/World/MapCreeps.cs index 8d7d599e20..94b7602e1b 100644 --- a/OpenRA.Mods.Common/Traits/World/MapCreeps.cs +++ b/OpenRA.Mods.Common/Traits/World/MapCreeps.cs @@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the creeps checkbox in the lobby.")] public readonly int CheckboxDisplayOrder = 0; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption("creeps", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked); } diff --git a/OpenRA.Mods.Common/Traits/World/MapOptions.cs b/OpenRA.Mods.Common/Traits/World/MapOptions.cs index eca364b07c..2faf78af9a 100644 --- a/OpenRA.Mods.Common/Traits/World/MapOptions.cs +++ b/OpenRA.Mods.Common/Traits/World/MapOptions.cs @@ -73,12 +73,12 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the game speed option in the lobby.")] public readonly int GameSpeedDropdownDisplayOrder = 0; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption("shortgame", ShortGameCheckboxLabel, ShortGameCheckboxDescription, ShortGameCheckboxVisible, ShortGameCheckboxDisplayOrder, ShortGameCheckboxEnabled, ShortGameCheckboxLocked); - var techLevels = rules.Actors[SystemActors.Player].TraitInfos() + var techLevels = map.PlayerActorInfo.TraitInfos() .ToDictionary(t => t.Id, t => t.Name); if (techLevels.Any()) diff --git a/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs b/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs index d5c66f3477..ec63254207 100644 --- a/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs +++ b/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits public override object Create(ActorInitializer init) { return new MapStartingLocations(this); } - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyBooleanOption( "separateteamspawns", diff --git a/OpenRA.Mods.Common/Traits/World/ScriptLobbyDropdown.cs b/OpenRA.Mods.Common/Traits/World/ScriptLobbyDropdown.cs index 44fd6813e8..a4f38ebbb9 100644 --- a/OpenRA.Mods.Common/Traits/World/ScriptLobbyDropdown.cs +++ b/OpenRA.Mods.Common/Traits/World/ScriptLobbyDropdown.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the option in the lobby.")] public readonly int DisplayOrder = 0; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { yield return new LobbyOption(ID, Label, Description, Visible, DisplayOrder, Values, Default, Locked); diff --git a/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs b/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs index d01cead15b..e4beec766a 100644 --- a/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs +++ b/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs @@ -39,12 +39,12 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the starting units option in the lobby.")] public readonly int DropdownDisplayOrder = 0; - IEnumerable ILobbyOptions.LobbyOptions(Ruleset rules) + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { var startingUnits = new Dictionary(); // Duplicate classes are defined for different race variants - foreach (var t in rules.Actors[SystemActors.World].TraitInfos()) + foreach (var t in map.WorldActorInfo.TraitInfos()) startingUnits[t.Class] = t.ClassName; if (startingUnits.Any()) diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index 5282fa43b4..19744c407c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -207,7 +207,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic slotsButton.OnMouseDown = _ => { - var botTypes = map.Rules.Actors[SystemActors.Player].TraitInfos().Select(t => t.Type); + var botTypes = map.PlayerActorInfo.TraitInfos().Select(t => t.Type); var options = new Dictionary>(); var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin); @@ -539,7 +539,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (addBotOnMapLoad) { var slot = orderManager.LobbyInfo.FirstEmptyBotSlot(); - var bot = currentMap.Rules.Actors[SystemActors.Player].TraitInfos().Select(t => t.Type).FirstOrDefault(); + var bot = currentMap.PlayerActorInfo.TraitInfos().Select(t => t.Type).FirstOrDefault(); var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin); if (slot != null && bot != null) orderManager.IssueOrder(Order.Command("slot_bot {0} {1} {2}".F(slot, botController.Index, bot))); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs index 96c4a28fec..8b484f83eb 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs @@ -73,14 +73,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic void RebuildOptions() { - if (mapPreview == null || mapPreview.Rules == null || mapPreview.InvalidCustomRules) + if (mapPreview == null || mapPreview.WorldActorInfo == null || mapPreview.InvalidCustomRules) return; optionsContainer.RemoveChildren(); optionsContainer.Bounds.Height = 0; - var allOptions = mapPreview.Rules.Actors[SystemActors.Player].TraitInfos() - .Concat(mapPreview.Rules.Actors[SystemActors.World].TraitInfos()) - .SelectMany(t => t.LobbyOptions(mapPreview.Rules)) + var allOptions = mapPreview.PlayerActorInfo.TraitInfos() + .Concat(mapPreview.WorldActorInfo.TraitInfos()) + .SelectMany(t => t.LobbyOptions(mapPreview)) .Where(o => o.IsVisible) .OrderBy(o => o.DisplayOrder) .ToArray(); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs index 719c17a091..5ad7220c92 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs @@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var bots = new List(); if (slot.AllowBots) { - foreach (var b in map.Rules.Actors[SystemActors.Player].TraitInfos()) + foreach (var b in map.PlayerActorInfo.TraitInfos()) { var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin); bots.Add(new SlotDropDownOption(b.Name, diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index 2b4d99ac7c..d027cf2f8f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -219,7 +219,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic new Thread(() => { - var mapDifficulty = preview.Rules.Actors[SystemActors.World].TraitInfos() + var mapDifficulty = preview.WorldActorInfo.TraitInfos() .FirstOrDefault(sld => sld.ID == "difficulty"); if (mapDifficulty != null) @@ -229,7 +229,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic difficultyDisabled = mapDifficulty.Locked; } - var missionData = preview.Rules.Actors[SystemActors.World].TraitInfoOrDefault(); + var missionData = preview.WorldActorInfo.TraitInfoOrDefault(); if (missionData != null) { briefingVideo = missionData.BriefingVideo; @@ -383,7 +383,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic orders.Add(Order.Command("option gamespeed {0}".F(gameSpeed))); orders.Add(Order.Command("state {0}".F(Session.ClientState.Ready))); - var missionData = selectedMap.Rules.Actors[SystemActors.World].TraitInfoOrDefault(); + var missionData = selectedMap.WorldActorInfo.TraitInfoOrDefault(); if (missionData != null && missionData.StartVideo != null && modData.DefaultFileSystem.Exists(missionData.StartVideo)) { var fsPlayer = fullscreenVideoPlayer.Get("PLAYER");