Rename fields on Repairable traits

To bring them in line with RearmActors,
Repairable.RepairBuildings and
RepairableNear.Buildings have been renamed
to RepairActors.
Additionally, their RA-specific internal
defaults were removed and the FieldLoader
now requires them to be set explicitly.
This commit is contained in:
reaperrr
2018-08-19 21:34:00 +02:00
committed by Oliver Brakmann
parent 6dd84b2882
commit 5ec47b47af
12 changed files with 83 additions and 19 deletions

View File

@@ -117,7 +117,7 @@ namespace OpenRA.Mods.Common.Activities
if (alwaysLand) if (alwaysLand)
return true; return true;
if (repairableInfo != null && repairableInfo.RepairBuildings.Contains(dest.Info.Name) && self.GetDamageState() != DamageState.Undamaged) if (repairableInfo != null && repairableInfo.RepairActors.Contains(dest.Info.Name) && self.GetDamageState() != DamageState.Undamaged)
return true; return true;
return rearmable != null && rearmable.Info.RearmActors.Contains(dest.Info.Name) return rearmable != null && rearmable.Info.RearmActors.Contains(dest.Info.Name)

View File

@@ -110,7 +110,7 @@ namespace OpenRA.Mods.Common.Activities
if (alwaysLand) if (alwaysLand)
return true; return true;
if (repairableInfo != null && repairableInfo.RepairBuildings.Contains(dest.Info.Name) && self.GetDamageState() != DamageState.Undamaged) if (repairableInfo != null && repairableInfo.RepairActors.Contains(dest.Info.Name) && self.GetDamageState() != DamageState.Undamaged)
return true; return true;
return rearmable != null && rearmable.Info.RearmActors.Contains(dest.Info.Name) return rearmable != null && rearmable.Info.RearmActors.Contains(dest.Info.Name)

View File

@@ -953,6 +953,7 @@
<Compile Include="UpdateRules\Rules\20181215\RemovedAutoCarryallCircleTurnSpeed.cs" /> <Compile Include="UpdateRules\Rules\20181215\RemovedAutoCarryallCircleTurnSpeed.cs" />
<Compile Include="UpdateRules\Rules\20181215\ReplacedWithChargeAnimation.cs" /> <Compile Include="UpdateRules\Rules\20181215\ReplacedWithChargeAnimation.cs" />
<Compile Include="UpdateRules\Rules\20181215\RefactorResourceLevelAnimating.cs" /> <Compile Include="UpdateRules\Rules\20181215\RefactorResourceLevelAnimating.cs" />
<Compile Include="UpdateRules\Rules\20190106\StreamlineRepairableTraits.cs" />
<Compile Include="Traits\Player\PlayerResources.cs" /> <Compile Include="Traits\Player\PlayerResources.cs" />
<Compile Include="UtilityCommands\DumpSequenceSheetsCommand.cs" /> <Compile Include="UtilityCommands\DumpSequenceSheetsCommand.cs" />
<Compile Include="Traits\Render\WithBuildingRepairDecoration.cs" /> <Compile Include="Traits\Render\WithBuildingRepairDecoration.cs" />

View File

@@ -472,7 +472,7 @@ namespace OpenRA.Mods.Common.Traits
return false; return false;
return (rearmableInfo != null && rearmableInfo.RearmActors.Contains(a.Info.Name)) return (rearmableInfo != null && rearmableInfo.RearmActors.Contains(a.Info.Name))
|| (repairableInfo != null && repairableInfo.RepairBuildings.Contains(a.Info.Name)); || (repairableInfo != null && repairableInfo.RepairActors.Contains(a.Info.Name));
} }
public int MovementSpeed public int MovementSpeed
@@ -512,7 +512,7 @@ namespace OpenRA.Mods.Common.Traits
yield return new Rearm(self, a, WDist.Zero); yield return new Rearm(self, a, WDist.Zero);
// The ResupplyAircraft activity guarantees that we're on the helipad // The ResupplyAircraft activity guarantees that we're on the helipad
if (repairableInfo != null && repairableInfo.RepairBuildings.Contains(name)) if (repairableInfo != null && repairableInfo.RepairActors.Contains(name))
yield return new Repair(self, a, WDist.Zero); yield return new Repair(self, a, WDist.Zero);
} }

View File

@@ -20,19 +20,20 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
[Desc("This actor can be sent to a structure for repairs.")] [Desc("This actor can be sent to a structure for repairs.")]
class RepairableInfo : ITraitInfo, Requires<IHealthInfo>, Requires<IMoveInfo> public class RepairableInfo : ITraitInfo, Requires<IHealthInfo>, Requires<IMoveInfo>
{ {
public readonly HashSet<string> RepairBuildings = new HashSet<string> { "fix" }; [FieldLoader.Require]
[ActorReference] public readonly HashSet<string> RepairActors = new HashSet<string> { };
[VoiceReference] public readonly string Voice = "Action"; [VoiceReference] public readonly string Voice = "Action";
[Desc("The amount the unit will be repaired at each step. Use -1 for fallback behavior where HpPerStep from RepairUnit trait will be used.")] [Desc("The amount the unit will be repaired at each step. Use -1 for fallback behavior where HpPerStep from RepairsUnits trait will be used.")]
public readonly int HpPerStep = -1; public readonly int HpPerStep = -1;
public virtual object Create(ActorInitializer init) { return new Repairable(init.Self, this); } public virtual object Create(ActorInitializer init) { return new Repairable(init.Self, this); }
} }
class Repairable : IIssueOrder, IResolveOrder, IOrderVoice, INotifyCreated public class Repairable : IIssueOrder, IResolveOrder, IOrderVoice, INotifyCreated
{ {
public readonly RepairableInfo Info; public readonly RepairableInfo Info;
readonly IHealth health; readonly IHealth health;
@@ -69,7 +70,7 @@ namespace OpenRA.Mods.Common.Traits
bool CanRepairAt(Actor target) bool CanRepairAt(Actor target)
{ {
return Info.RepairBuildings.Contains(target.Info.Name); return Info.RepairActors.Contains(target.Info.Name);
} }
bool CanRearmAt(Actor target) bool CanRearmAt(Actor target)
@@ -155,7 +156,7 @@ namespace OpenRA.Mods.Common.Traits
var repairBuilding = self.World.ActorsWithTrait<RepairsUnits>() var repairBuilding = self.World.ActorsWithTrait<RepairsUnits>()
.Where(a => !a.Actor.IsDead && a.Actor.IsInWorld .Where(a => !a.Actor.IsDead && a.Actor.IsInWorld
&& a.Actor.Owner.IsAlliedWith(self.Owner) && && a.Actor.Owner.IsAlliedWith(self.Owner) &&
Info.RepairBuildings.Contains(a.Actor.Info.Name)) Info.RepairActors.Contains(a.Actor.Info.Name))
.OrderBy(p => (self.Location - p.Actor.Location).LengthSquared); .OrderBy(p => (self.Location - p.Actor.Location).LengthSquared);
// Worst case FirstOrDefault() will return a TraitPair<null, null>, which is OK. // Worst case FirstOrDefault() will return a TraitPair<null, null>, which is OK.

View File

@@ -20,7 +20,9 @@ namespace OpenRA.Mods.Common.Traits
{ {
class RepairableNearInfo : ITraitInfo, Requires<IHealthInfo>, Requires<IMoveInfo> class RepairableNearInfo : ITraitInfo, Requires<IHealthInfo>, Requires<IMoveInfo>
{ {
[ActorReference] public readonly HashSet<string> Buildings = new HashSet<string> { "spen", "syrd" }; [FieldLoader.Require]
[ActorReference] public readonly HashSet<string> RepairActors = new HashSet<string> { };
public readonly WDist CloseEnough = WDist.FromCells(4); public readonly WDist CloseEnough = WDist.FromCells(4);
[VoiceReference] public readonly string Voice = "Action"; [VoiceReference] public readonly string Voice = "Action";
@@ -59,7 +61,7 @@ namespace OpenRA.Mods.Common.Traits
bool CanRepairAt(Actor target) bool CanRepairAt(Actor target)
{ {
return info.Buildings.Contains(target.Info.Name); return info.RepairActors.Contains(target.Info.Name);
} }
bool ShouldRepair() bool ShouldRepair()
@@ -96,7 +98,7 @@ namespace OpenRA.Mods.Common.Traits
var repairBuilding = self.World.ActorsWithTrait<RepairsUnits>() var repairBuilding = self.World.ActorsWithTrait<RepairsUnits>()
.Where(a => !a.Actor.IsDead && a.Actor.IsInWorld .Where(a => !a.Actor.IsDead && a.Actor.IsInWorld
&& a.Actor.Owner.IsAlliedWith(self.Owner) && && a.Actor.Owner.IsAlliedWith(self.Owner) &&
info.Buildings.Contains(a.Actor.Info.Name)) info.RepairActors.Contains(a.Actor.Info.Name))
.OrderBy(p => (self.Location - p.Actor.Location).LengthSquared); .OrderBy(p => (self.Location - p.Actor.Location).LengthSquared);
// Worst case FirstOrDefault() will return a TraitPair<null, null>, which is OK. // Worst case FirstOrDefault() will return a TraitPair<null, null>, which is OK.

View File

@@ -0,0 +1,56 @@
#region Copyright & License Information
/*
* Copyright 2007-2019 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;
namespace OpenRA.Mods.Common.UpdateRules.Rules
{
public class StreamlineRepairableTraits : UpdateRule
{
public override string Name { get { return "Streamline RepairableNear and Repairable"; } }
public override string Description
{
get
{
return "Renamed Repairable.RepairBuildings and RepairableNear.Buildings to RepairActors,\n" +
"for consistency with RearmActors (and since repairing at other actors should already be possible).\n" +
"Additionally, removed internal 'fix' and 'spen, syrd' default values.";
}
}
public override IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode)
{
// Repairable isn't conditional or otherwise supports multiple traits, so LastChildMatching should be fine.
var repairableNode = actorNode.LastChildMatching("Repairable");
if (repairableNode != null)
{
var repairBuildings = repairableNode.LastChildMatching("RepairBuildings");
if (repairBuildings != null)
repairBuildings.RenameKey("RepairActors");
else
repairableNode.AddNode(new MiniYamlNode("RepairActors", "fix"));
}
// RepairableNear isn't conditional or otherwise supports multiple traits, so LastChildMatching should be fine.
var repairableNearNode = actorNode.LastChildMatching("RepairableNear");
if (repairableNearNode != null)
{
var repairBuildings = repairableNearNode.LastChildMatching("Buildings");
if (repairBuildings != null)
repairBuildings.RenameKey("RepairActors");
else
repairableNearNode.AddNode(new MiniYamlNode("RepairActors", "spen, syrd"));
}
yield break;
}
}
}

View File

@@ -88,7 +88,6 @@ namespace OpenRA.Mods.Common.UpdateRules
new UpdatePath("release-20181215", "playtest-20190106", new UpdateRule[] new UpdatePath("release-20181215", "playtest-20190106", new UpdateRule[]
{ {
// Bleed only changes here
new AddCarryableHarvester(), new AddCarryableHarvester(),
new RenameEditorTilesetFilter(), new RenameEditorTilesetFilter(),
new DefineNotificationDefaults(), new DefineNotificationDefaults(),
@@ -117,8 +116,10 @@ namespace OpenRA.Mods.Common.UpdateRules
new UpdatePath("playtest-20190106", new UpdateRule[] new UpdatePath("playtest-20190106", new UpdateRule[]
{ {
// Bleed only changes here
new RemoveAttackSuicides(), new RemoveAttackSuicides(),
new MakeMobilePausableConditional(), new MakeMobilePausableConditional(),
new StreamlineRepairableTraits(),
}) })
}; };

View File

@@ -258,6 +258,7 @@
Targetable: Targetable:
TargetTypes: Ground, Vehicle TargetTypes: Ground, Vehicle
Repairable: Repairable:
RepairActors: fix
Passenger: Passenger:
CargoType: Vehicle CargoType: Vehicle
ActorLostNotification: ActorLostNotification:
@@ -309,7 +310,7 @@
Selectable: Selectable:
Bounds: 24,24 Bounds: 24,24
Repairable: Repairable:
RepairBuildings: hpad RepairActors: hpad
Aircraft: Aircraft:
LandWhenIdle: false LandWhenIdle: false
AirborneCondition: airborne AirborneCondition: airborne

View File

@@ -188,7 +188,7 @@
HiddenUnderFog: HiddenUnderFog:
ActorLostNotification: ActorLostNotification:
Repairable: Repairable:
RepairBuildings: repair_pad RepairActors: repair_pad
Guard: Guard:
Voice: Guard Voice: Guard
Guardable: Guardable:

View File

@@ -259,6 +259,7 @@
Condition: damaged Condition: damaged
ValidDamageStates: Light, Medium, Heavy, Critical ValidDamageStates: Light, Medium, Heavy, Critical
Repairable: Repairable:
RepairActors: fix
Chronoshiftable: Chronoshiftable:
Passenger: Passenger:
CargoType: Vehicle CargoType: Vehicle
@@ -513,6 +514,7 @@
Types: Ship Types: Ship
Chronoshiftable: Chronoshiftable:
RepairableNear: RepairableNear:
RepairActors: spen, syrd
GpsDot: GpsDot:
String: Ship String: Ship
WithDamageOverlay: WithDamageOverlay:
@@ -604,7 +606,7 @@
Inherits: ^NeutralPlane Inherits: ^NeutralPlane
Inherits@2: ^GainsExperience Inherits@2: ^GainsExperience
Repairable: Repairable:
RepairBuildings: fix RepairActors: fix
^Helicopter: ^Helicopter:
Inherits: ^Plane Inherits: ^Plane

View File

@@ -749,7 +749,7 @@
Condition: damaged Condition: damaged
ValidDamageStates: Light, Medium, Heavy, Critical ValidDamageStates: Light, Medium, Heavy, Critical
Repairable: Repairable:
RepairBuildings: gadept RepairActors: gadept
Voice: Move Voice: Move
Passenger: Passenger:
CargoType: Vehicle CargoType: Vehicle
@@ -841,7 +841,7 @@
SelectionDecorations: SelectionDecorations:
Palette: pips Palette: pips
Repairable: Repairable:
RepairBuildings: gadept RepairActors: gadept
Voice: Move Voice: Move
Aircraft: Aircraft:
AirborneCondition: airborne AirborneCondition: airborne