From 4c16e51f92047f0b0374fb34d0fbfc78edd2c47a Mon Sep 17 00:00:00 2001 From: reaperrr Date: Fri, 30 Mar 2018 16:32:49 +0200 Subject: [PATCH] Add EditorPlayer to all mods To prevent the editor from loading unnecessary or even incompatible player traits. --- OpenRA.Game/Player.cs | 3 +- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + .../UpdateRules/Rules/AddEditorPlayer.cs | 40 +++++++++++++++++++ OpenRA.Mods.Common/UpdateRules/UpdatePath.cs | 3 +- mods/cnc/rules/player.yaml | 9 ++++- mods/d2k/rules/player.yaml | 9 ++++- mods/ra/rules/player.yaml | 9 ++++- mods/ts/rules/player.yaml | 9 ++++- 8 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 OpenRA.Mods.Common/UpdateRules/Rules/AddEditorPlayer.cs diff --git a/OpenRA.Game/Player.cs b/OpenRA.Game/Player.cs index 827cb42bfd..16ce3e0bf2 100644 --- a/OpenRA.Game/Player.cs +++ b/OpenRA.Game/Player.cs @@ -137,7 +137,8 @@ namespace OpenRA DisplayFaction = ChooseDisplayFaction(world, pr.Faction); } - PlayerActor = world.CreateActor("Player", new TypeDictionary { new OwnerInit(this) }); + var playerActorType = world.Type == WorldType.Editor ? "EditorPlayer" : "Player"; + PlayerActor = world.CreateActor(playerActorType, new TypeDictionary { new OwnerInit(this) }); Shroud = PlayerActor.Trait(); // Enable the bot logic on the host diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 9fb1026965..9243e8d516 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -859,6 +859,7 @@ + diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/AddEditorPlayer.cs b/OpenRA.Mods.Common/UpdateRules/Rules/AddEditorPlayer.cs new file mode 100644 index 0000000000..77b329a565 --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/AddEditorPlayer.cs @@ -0,0 +1,40 @@ +#region Copyright & License Information +/* + * Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; + +namespace OpenRA.Mods.Common.UpdateRules.Rules +{ + public class AddEditorPlayer : UpdateRule + { + public override string Name { get { return "Add EditorPlayer"; } } + public override string Description + { + get + { + return "Map editor now requires an EditorPlayer to avoid loading all kinds of unnecessary player traits."; + } + } + + bool messageDisplayed; + + public override IEnumerable AfterUpdate(ModData modData) + { + if (!messageDisplayed) + { + messageDisplayed = true; + yield return "The map editor now requires an EditorPlayer actor.\n" + + "Please add an EditorPlayer with the traits AlwaysVisible and Shroud to player.yaml\n(or a different rules yaml file of your choice)."; + } + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index 4deed58287..fdb866e174 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -45,7 +45,8 @@ namespace OpenRA.Mods.Common.UpdateRules new DefineSoundDefaults(), new RenameWormSpawner(), new RemoveWithReloadingSpriteTurret(), - new IgnoreAbstractActors() + new IgnoreAbstractActors(), + new AddEditorPlayer() }) }; diff --git a/mods/cnc/rules/player.yaml b/mods/cnc/rules/player.yaml index 534f3e8d18..20a95dba81 100644 --- a/mods/cnc/rules/player.yaml +++ b/mods/cnc/rules/player.yaml @@ -1,5 +1,12 @@ -Player: +^BasePlayer: AlwaysVisible: + Shroud: + +EditorPlayer: + Inherits: ^BasePlayer + +Player: + Inherits: ^BasePlayer PlaceBuilding: TechTree: SupportPowerManager: diff --git a/mods/d2k/rules/player.yaml b/mods/d2k/rules/player.yaml index a20390a054..f14be6fc7b 100644 --- a/mods/d2k/rules/player.yaml +++ b/mods/d2k/rules/player.yaml @@ -1,5 +1,12 @@ -Player: +^BasePlayer: AlwaysVisible: + Shroud: + +EditorPlayer: + Inherits: ^BasePlayer + +Player: + Inherits: ^BasePlayer TechTree: ClassicProductionQueue@Building: Type: Building diff --git a/mods/ra/rules/player.yaml b/mods/ra/rules/player.yaml index 799e1ce3c5..dcdaff35fc 100644 --- a/mods/ra/rules/player.yaml +++ b/mods/ra/rules/player.yaml @@ -1,5 +1,12 @@ -Player: +^BasePlayer: AlwaysVisible: + Shroud: + +EditorPlayer: + Inherits: ^BasePlayer + +Player: + Inherits: ^BasePlayer TechTree: ClassicProductionQueue@Building: Type: Building diff --git a/mods/ts/rules/player.yaml b/mods/ts/rules/player.yaml index cf1502800d..9421453d78 100644 --- a/mods/ts/rules/player.yaml +++ b/mods/ts/rules/player.yaml @@ -1,5 +1,12 @@ -Player: +^BasePlayer: AlwaysVisible: + Shroud: + +EditorPlayer: + Inherits: ^BasePlayer + +Player: + Inherits: ^BasePlayer TechTree: GrantConditionOnPrerequisiteManager: ClassicProductionQueue@Building: