From 563c8ad3025fcb9b62ff89af7032644b07b948aa Mon Sep 17 00:00:00 2001 From: reaperrr Date: Sat, 24 Mar 2018 04:27:35 +0100 Subject: [PATCH] HarvManager update rule --- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + .../Rules/DefineSquadExcludeHarvester.cs | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 OpenRA.Mods.Common/UpdateRules/Rules/DefineSquadExcludeHarvester.cs diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 46a69f055c..9fb1026965 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -855,6 +855,7 @@ + diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/DefineSquadExcludeHarvester.cs b/OpenRA.Mods.Common/UpdateRules/Rules/DefineSquadExcludeHarvester.cs new file mode 100644 index 0000000000..714c45fedb --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/DefineSquadExcludeHarvester.cs @@ -0,0 +1,61 @@ +#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 DefineSquadExcludeHarvester : UpdateRule + { + public override string Name { get { return "Add harvesters to ExcludeFromSquads"; } } + public override string Description + { + get + { + return "HackyAI no longer automatically excludes actors with Harvester trait from attack squads.\n" + + "They need to be explicitly added to ExcludeFromSquads."; + } + } + + readonly List locations = new List(); + + public override IEnumerable BeforeUpdate(ModData modData) + { + // Reset state for each mod/map + locations.Clear(); + yield break; + } + + public override IEnumerable AfterUpdate(ModData modData) + { + if (locations.Any()) + yield return "The automatic exclusion of harvesters from AI squads has been removed.\n" + + "You may wish to add your harvester-type actors to `ExcludeFromSquads` under `UnitCommonNames`\n" + + "at the following locations.\n" + + UpdateUtils.FormatMessageList(locations.Select(l => l.ToString())); + } + + public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) + { + foreach (var hackyAINode in actorNode.ChildrenMatching("HackyAI")) + { + var commonNamesNode = hackyAINode.LastChildMatching("UnitsCommonNames"); + if (commonNamesNode != null) + locations.Add(commonNamesNode.Location); + else + locations.Add(hackyAINode.Location); + } + + yield break; + } + } +}