Move SupportPowerDecisions to a single parent node.

This is required before we can force all trait
properties to match a TraitInfo-defined field.
This commit is contained in:
Paul Chote
2018-06-14 15:37:15 +00:00
committed by reaperrr
parent f82674cfef
commit cce9b06a40
8 changed files with 559 additions and 490 deletions

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.Common.AI
player = p;
frozenLayer = p.PlayerActor.Trait<FrozenActorLayer>();
supportPowerManager = p.PlayerActor.TraitOrDefault<SupportPowerManager>();
foreach (var decision in ai.Info.PowerDecisions)
foreach (var decision in ai.Info.SupportPowerDecisions)
powerDecisions.Add(decision.OrderName, decision);
}

View File

@@ -195,7 +195,7 @@ namespace OpenRA.Mods.Common.AI
// TODO Update OpenRA.Utility/Command.cs#L300 to first handle lists and also read nested ones
[Desc("Tells the AI how to use its support powers.")]
[FieldLoader.LoadUsing("LoadDecisions")]
public readonly List<SupportPowerDecision> PowerDecisions = new List<SupportPowerDecision>();
public readonly List<SupportPowerDecision> SupportPowerDecisions = new List<SupportPowerDecision>();
[Desc("Actor types that can capture other actors (via `Captures` or `ExternalCaptures`).",
"Leave this empty to disable capturing.")]
@@ -233,8 +233,9 @@ namespace OpenRA.Mods.Common.AI
static object LoadDecisions(MiniYaml yaml)
{
var ret = new List<SupportPowerDecision>();
foreach (var d in yaml.Nodes)
if (d.Key.Split('@')[0] == "SupportPowerDecision")
var decisions = yaml.Nodes.FirstOrDefault(n => n.Key == "SupportPowerDecisions");
if (decisions != null)
foreach (var d in decisions.Value.Nodes)
ret.Add(new SupportPowerDecision(d.Value));
return ret;

View File

@@ -883,6 +883,7 @@
<Compile Include="Traits\Render\WithBuildingRepairDecoration.cs" />
<Compile Include="UpdateRules\Rules\SplitRepairDecoration.cs" />
<Compile Include="ModCredits.cs" />
<Compile Include="UpdateRules\Rules\MoveHackyAISupportPowerDecisions.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="AfterBuild">

View File

@@ -0,0 +1,56 @@
#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 MoveHackyAISupportPowerDecisions : UpdateRule
{
public override string Name { get { return "Move HackyAI SupportPowerDecisions to a trait property"; } }
public override string Description
{
get
{
return "The SupportPowerDefinitions on HackyAI are moved from top-level trait properties\n" +
"to children of a single SupportPowerDecisions property.";
}
}
public override IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode)
{
foreach (var hackyAINode in actorNode.ChildrenMatching("HackyAI"))
{
var children = hackyAINode.ChildrenMatching("SupportPowerDecision");
if (!children.Any())
continue;
var parent = hackyAINode.LastChildMatching("SupportPowerDecisions");
if (parent == null)
{
parent = new MiniYamlNode("SupportPowerDecisions", "");
hackyAINode.AddNode(parent);
}
foreach (var child in children.ToList())
{
var split = child.Key.Split('@');
child.Key = split.Length > 1 ? split[1] : "Default";
parent.AddNode(child);
hackyAINode.RemoveNode(child);
}
}
yield break;
}
}
}

View File

@@ -54,6 +54,7 @@ namespace OpenRA.Mods.Common.UpdateRules
new DefineOwnerLostAction(),
new RenameEmitInfantryOnSell(),
new SplitRepairDecoration(),
new MoveHackyAISupportPowerDecisions(),
})
};

View File

@@ -71,7 +71,8 @@ Player:
UnitLimits:
harv: 8
SquadSize: 15
SupportPowerDecision@Airstrike:
SupportPowerDecisions:
Airstrike:
OrderName: AirstrikePowerInfoOrder
MinimumAttractiveness: 2000
Consideration@1:
@@ -92,7 +93,7 @@ Player:
Attractiveness: 1
TargetMetric: Value
CheckRadius: 2c0
SupportPowerDecision@IonCannonPower:
IonCannonPower:
OrderName: IonCannonPowerInfoOrder
MinimumAttractiveness: 1000
FineScanRadius: 2
@@ -114,7 +115,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 3c0
SupportPowerDecision@NukePower:
NukePower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -201,7 +202,8 @@ Player:
UnitLimits:
harv: 8
SquadSize: 15
SupportPowerDecision@Airstrike:
SupportPowerDecisions:
Airstrike:
OrderName: AirstrikePowerInfoOrder
MinimumAttractiveness: 2000
Consideration@1:
@@ -222,7 +224,7 @@ Player:
Attractiveness: 1
TargetMetric: Value
CheckRadius: 2c0
SupportPowerDecision@IonCannonPower:
IonCannonPower:
OrderName: IonCannonPowerInfoOrder
MinimumAttractiveness: 1000
FineScanRadius: 2
@@ -244,7 +246,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 3c0
SupportPowerDecision@NukePower:
NukePower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -333,7 +335,8 @@ Player:
UnitLimits:
harv: 8
SquadSize: 8
SupportPowerDecision@Airstrike:
SupportPowerDecisions:
Airstrike:
OrderName: AirstrikePowerInfoOrder
MinimumAttractiveness: 2000
Consideration@1:
@@ -354,7 +357,7 @@ Player:
Attractiveness: 1
TargetMetric: Value
CheckRadius: 2c0
SupportPowerDecision@IonCannonPower:
IonCannonPower:
OrderName: IonCannonPowerInfoOrder
MinimumAttractiveness: 1000
FineScanRadius: 2
@@ -376,7 +379,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 3c0
SupportPowerDecision@NukePower:
NukePower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:

View File

@@ -81,7 +81,8 @@ Player:
carryall: 4
SquadSize: 8
MaxBaseRadius: 40
SupportPowerDecision@Airstrike:
SupportPowerDecisions:
Airstrike:
OrderName: AirstrikePowerInfoOrder
MinimumAttractiveness: 2000
Consideration@1:
@@ -102,7 +103,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 4c0
SupportPowerDecision@NukePower:
NukePower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -117,7 +118,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 7c0
SupportPowerDecision@Fremen:
Fremen:
OrderName: ProduceActorPower.Fremen
Consideration@1:
Against: Ally
@@ -205,7 +206,8 @@ Player:
carryall: 4
SquadSize: 6
MaxBaseRadius: 40
SupportPowerDecision@Airstrike:
SupportPowerDecisions:
Airstrike:
OrderName: AirstrikePowerInfoOrder
MinimumAttractiveness: 2000
Consideration@1:
@@ -226,7 +228,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 4c0
SupportPowerDecision@NukePower:
NukePower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -241,7 +243,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 7c0
SupportPowerDecision@Fremen:
Fremen:
OrderName: ProduceActorPower.Fremen
Consideration@1:
Against: Ally
@@ -328,7 +330,8 @@ Player:
carryall: 4
SquadSize: 10
MaxBaseRadius: 40
SupportPowerDecision@Airstrike:
SupportPowerDecisions:
Airstrike:
OrderName: AirstrikePowerInfoOrder
MinimumAttractiveness: 2000
Consideration@1:
@@ -349,7 +352,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 4c0
SupportPowerDecision@NukePower:
NukePower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -364,7 +367,7 @@ Player:
Attractiveness: -10
TargetMetric: Value
CheckRadius: 7c0
SupportPowerDecision@Fremen:
Fremen:
OrderName: ProduceActorPower.Fremen
Consideration@1:
Against: Ally

View File

@@ -68,7 +68,8 @@ Player:
dog: 4
harv: 8
SquadSize: 20
SupportPowerDecision@spyplane:
SupportPowerDecisions:
spyplane:
OrderName: SovietSpyPlane
MinimumAttractiveness: 1
Consideration@1:
@@ -77,7 +78,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@paratroopers:
paratroopers:
OrderName: SovietParatroopers
MinimumAttractiveness: 5
Consideration@1:
@@ -92,7 +93,7 @@ Player:
Attractiveness: -5
TargetMetric: None
CheckRadius: 8c0
SupportPowerDecision@parabombs:
parabombs:
OrderName: UkraineParabombs
MinimumAttractiveness: 1
Consideration@1:
@@ -101,7 +102,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@nukepower:
nukepower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -203,7 +204,8 @@ Player:
dog: 4
harv: 8
SquadSize: 40
SupportPowerDecision@spyplane:
SupportPowerDecisions:
spyplane:
OrderName: SovietSpyPlane
MinimumAttractiveness: 1
Consideration@1:
@@ -212,7 +214,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@paratroopers:
paratroopers:
OrderName: SovietParatroopers
MinimumAttractiveness: 5
Consideration@1:
@@ -227,7 +229,7 @@ Player:
Attractiveness: -5
TargetMetric: None
CheckRadius: 8c0
SupportPowerDecision@parabombs:
parabombs:
OrderName: UkraineParabombs
MinimumAttractiveness: 1
Consideration@1:
@@ -236,7 +238,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@nukepower:
nukepower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -338,7 +340,8 @@ Player:
dog: 4
harv: 8
SquadSize: 10
SupportPowerDecision@spyplane:
SupportPowerDecisions:
spyplane:
OrderName: SovietSpyPlane
MinimumAttractiveness: 1
Consideration@1:
@@ -347,7 +350,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@paratroopers:
paratroopers:
OrderName: SovietParatroopers
MinimumAttractiveness: 5
Consideration@1:
@@ -362,7 +365,7 @@ Player:
Attractiveness: -5
TargetMetric: None
CheckRadius: 8c0
SupportPowerDecision@parabombs:
parabombs:
OrderName: UkraineParabombs
MinimumAttractiveness: 1
Consideration@1:
@@ -371,7 +374,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@nukepower:
nukepower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1:
@@ -451,7 +454,8 @@ Player:
UnitLimits:
harv: 8
SquadSize: 1
SupportPowerDecision@spyplane:
SupportPowerDecisions:
spyplane:
OrderName: SovietSpyPlane
MinimumAttractiveness: 1
Consideration@1:
@@ -460,7 +464,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@paratroopers:
paratroopers:
OrderName: SovietParatroopers
MinimumAttractiveness: 5
Consideration@1:
@@ -475,7 +479,7 @@ Player:
Attractiveness: -5
TargetMetric: None
CheckRadius: 8c0
SupportPowerDecision@parabombs:
parabombs:
OrderName: UkraineParabombs
MinimumAttractiveness: 1
Consideration@1:
@@ -484,7 +488,7 @@ Player:
Attractiveness: 1
TargetMetric: None
CheckRadius: 5c0
SupportPowerDecision@nukepower:
nukepower:
OrderName: NukePowerInfoOrder
MinimumAttractiveness: 3000
Consideration@1: