Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge AttackPlane and AttackHeli into AttackAircraft #15781

Merged
merged 1 commit into from
Nov 3, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions OpenRA.Mods.Common/Activities/Air/FlyAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class FlyAttack : Activity
{
readonly Target target;
readonly Aircraft aircraft;
readonly AttackPlane attackPlane;
readonly AttackAircraft attackAircraft;
readonly Rearmable rearmable;

int ticksUntilTurn;
Expand All @@ -29,9 +29,9 @@ public FlyAttack(Actor self, Target target)
{
this.target = target;
aircraft = self.Trait<Aircraft>();
attackPlane = self.Trait<AttackPlane>();
attackAircraft = self.Trait<AttackAircraft>();
rearmable = self.TraitOrDefault<Rearmable>();
ticksUntilTurn = attackPlane.AttackPlaneInfo.AttackTurnDelay;
ticksUntilTurn = attackAircraft.AttackAircraftInfo.AttackTurnDelay;
}

public override Activity Tick(Actor self)
Expand All @@ -47,18 +47,18 @@ public override Activity Tick(Actor self)
return NextActivity;

// If all valid weapons have depleted their ammo and Rearmable trait exists, return to RearmActor to reload and then resume the activity
if (rearmable != null && attackPlane.Armaments.All(x => x.IsTraitPaused || !x.Weapon.IsValidAgainst(target, self.World, self)))
if (rearmable != null && attackAircraft.Armaments.All(x => x.IsTraitPaused || !x.Weapon.IsValidAgainst(target, self.World, self)))
return ActivityUtils.SequenceActivities(new ReturnToBase(self, aircraft.Info.AbortOnResupply), this);

attackPlane.DoAttack(self, target);
attackAircraft.DoAttack(self, target);

if (ChildActivity == null)
{
if (IsCanceled)
return NextActivity;

// TODO: This should fire each weapon at its maximum range
if (attackPlane != null && target.IsInRange(self.CenterPosition, attackPlane.Armaments.Where(Exts.IsTraitEnabled).Select(a => a.Weapon.MinRange).Min()))
if (attackAircraft != null && target.IsInRange(self.CenterPosition, attackAircraft.Armaments.Where(Exts.IsTraitEnabled).Select(a => a.Weapon.MinRange).Min()))
ChildActivity = ActivityUtils.SequenceActivities(new FlyTimed(ticksUntilTurn, self), new Fly(self, target), new FlyTimed(ticksUntilTurn, self));
else
ChildActivity = ActivityUtils.SequenceActivities(new Fly(self, target), new FlyTimed(ticksUntilTurn, self));
Expand Down
14 changes: 7 additions & 7 deletions OpenRA.Mods.Common/Activities/Air/HeliAttack.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Activities
public class HeliAttack : Activity
{
readonly Aircraft aircraft;
readonly AttackHeli attackHeli;
readonly AttackAircraft attackAircraft;
readonly bool attackOnlyVisibleTargets;
readonly Rearmable rearmable;

Expand All @@ -45,7 +45,7 @@ public HeliAttack(Actor self, Target target, bool attackOnlyVisibleTargets = tru
{
Target = target;
aircraft = self.Trait<Aircraft>();
attackHeli = self.Trait<AttackHeli>();
attackAircraft = self.Trait<AttackAircraft>();
this.attackOnlyVisibleTargets = attackOnlyVisibleTargets;
rearmable = self.TraitOrDefault<Rearmable>();
}
Expand All @@ -63,7 +63,7 @@ public override Activity Tick(Actor self)
return NextActivity;

var pos = self.CenterPosition;
var targetPos = attackHeli.GetTargetPosition(pos, target);
var targetPos = attackAircraft.GetTargetPosition(pos, target);
if (attackOnlyVisibleTargets && target.Type == TargetType.Actor && canHideUnderFog
&& !target.Actor.CanBeViewedByPlayer(self.Owner))
{
Expand All @@ -75,7 +75,7 @@ public override Activity Tick(Actor self)
}

// If all valid weapons have depleted their ammo and Rearmable trait exists, return to RearmActor to reload and then resume the activity
if (rearmable != null && attackHeli.Armaments.All(x => x.IsTraitPaused || !x.Weapon.IsValidAgainst(target, self.World, self)))
if (rearmable != null && attackAircraft.Armaments.All(x => x.IsTraitPaused || !x.Weapon.IsValidAgainst(target, self.World, self)))
return ActivityUtils.SequenceActivities(new HeliReturnToBase(self, aircraft.Info.AbortOnResupply), this);

var dist = targetPos - pos;
Expand All @@ -88,11 +88,11 @@ public override Activity Tick(Actor self)
return this;

// Fly towards the target
if (!target.IsInRange(pos, attackHeli.GetMaximumRangeVersusTarget(target)))
if (!target.IsInRange(pos, attackAircraft.GetMaximumRangeVersusTarget(target)))
aircraft.SetPosition(self, aircraft.CenterPosition + aircraft.FlyStep(desiredFacing));

// Fly backwards from the target
if (target.IsInRange(pos, attackHeli.GetMinimumRangeVersusTarget(target)))
if (target.IsInRange(pos, attackAircraft.GetMinimumRangeVersusTarget(target)))
{
// Facing 0 doesn't work with the following position change
var facing = 1;
Expand All @@ -103,7 +103,7 @@ public override Activity Tick(Actor self)
aircraft.SetPosition(self, aircraft.CenterPosition + aircraft.FlyStep(-facing));
}

attackHeli.DoAttack(self, target);
attackAircraft.DoAttack(self, target);

return this;
}
Expand Down
4 changes: 2 additions & 2 deletions OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -273,8 +273,7 @@
<Compile Include="Traits\AcceptsDeliveredExperience.cs" />
<Compile Include="Traits\Air\Aircraft.cs" />
<Compile Include="Traits\Air\AttackBomber.cs" />
<Compile Include="Traits\Air\AttackHeli.cs" />
<Compile Include="Traits\Air\AttackPlane.cs" />
<Compile Include="Traits\Air\AttackAircraft.cs" />
<Compile Include="Traits\Air\FlyAwayOnIdle.cs" />
<Compile Include="Traits\Air\FallsToEarth.cs" />
<Compile Include="Traits\Air\ReturnOnIdle.cs" />
Expand Down Expand Up @@ -932,6 +931,7 @@
<Compile Include="UpdateRules\Rules\20180923\RemoveHealthPercentageRing.cs" />
<Compile Include="UpdateRules\Rules\20180923\RemoveRepairBuildingsFromAircraft.cs" />
<Compile Include="UpdateRules\Rules\20180923\AddRearmable.cs" />
<Compile Include="UpdateRules\Rules\20180923\MergeAttackPlaneAndHeli.cs" />
<Compile Include="Traits\Player\PlayerResources.cs" />
<Compile Include="UtilityCommands\DumpSequenceSheetsCommand.cs" />
<Compile Include="Traits\Render\WithBuildingRepairDecoration.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,28 +15,31 @@

namespace OpenRA.Mods.Common.Traits
{
public class AttackPlaneInfo : AttackFrontalInfo, Requires<AircraftInfo>
public class AttackAircraftInfo : AttackFrontalInfo, Requires<AircraftInfo>
{
[Desc("Delay, in game ticks, before turning to attack.")]
[Desc("Delay, in game ticks, before non-hovering aircraft turns to attack.")]
public readonly int AttackTurnDelay = 50;

public override object Create(ActorInitializer init) { return new AttackPlane(init.Self, this); }
public override object Create(ActorInitializer init) { return new AttackAircraft(init.Self, this); }
}

public class AttackPlane : AttackFrontal
public class AttackAircraft : AttackFrontal
{
public readonly AttackPlaneInfo AttackPlaneInfo;
public readonly AttackAircraftInfo AttackAircraftInfo;
readonly AircraftInfo aircraftInfo;

public AttackPlane(Actor self, AttackPlaneInfo info)
public AttackAircraft(Actor self, AttackAircraftInfo info)
: base(self, info)
{
AttackPlaneInfo = info;
AttackAircraftInfo = info;
aircraftInfo = self.Info.TraitInfo<AircraftInfo>();
}

public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove, bool forceAttack)
{
if (aircraftInfo.CanHover)
return new HeliAttack(self, newTarget);

return new FlyAttack(self, newTarget);
}

Expand Down
33 changes: 0 additions & 33 deletions OpenRA.Mods.Common/Traits/Air/AttackHeli.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#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 MergeAttackPlaneAndHeli : UpdateRule
{
public override string Name { get { return "AttackPlane and AttackHeli were merged to AttackAircraft"; } }
public override string Description
{
get
{
return "The AttackPlane and AttackHeli traits were merged intto a single\n" +
"AttackAircraft trait.";
}
}

bool displayedMessage;
public override IEnumerable<string> AfterUpdate(ModData modData)
{
var message = "If an actor had a total of more than one AttackPlane and/or AttackHeli,\n"
+ "you may want to check the update results for possible redundant entries.\n";

if (!displayedMessage)
yield return message;

displayedMessage = true;
}

public override IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode)
{
var attackPlanes = actorNode.ChildrenMatching("AttackPlane");
var attackHelis = actorNode.ChildrenMatching("AttackHeli");
var attackPlanesTotal = attackPlanes.Count();
var attackHelisTotal = attackHelis.Count();

if (attackPlanesTotal == 0 && attackHelisTotal == 0)
yield break;
else if (attackPlanesTotal == 1 && attackHelisTotal == 0)
foreach (var attackPlane in attackPlanes)
attackPlane.RenameKey("AttackAircraft");
else if (attackPlanesTotal == 0 && attackHelisTotal == 1)
foreach (var attackHeli in attackHelis)
attackHeli.RenameKey("AttackAircraft");
else
{
// If we got here, we have at least two AttackPlane/-Heli traits in total
var attackPlanesCount = 0;
foreach (var attackPlane in attackPlanes)
{
var suffixCount = attackPlanesCount > 0 ? attackPlanesCount.ToString() : "";
attackPlane.RenameKey("AttackAircraft@Plane" + suffixCount, false, true);
++attackPlanesCount;
}

var attackHelisCount = 0;
foreach (var attackHeli in attackHelis)
{
var suffixCount = attackHelisCount > 0 ? attackHelisCount.ToString() : "";
attackHeli.RenameKey("AttackAircraft@Heli" + suffixCount, false, true);
++attackHelisCount;
}
}

yield break;
}
}
}
1 change: 1 addition & 0 deletions OpenRA.Mods.Common/UpdateRules/UpdatePath.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public class UpdatePath
new RenameCrateActionNotification(),
new RemoveRepairBuildingsFromAircraft(),
new AddRearmable(),
new MergeAttackPlaneAndHeli(),
})
};

Expand Down
4 changes: 2 additions & 2 deletions mods/cnc/rules/aircraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ HELI:
PauseOnCondition: !ammo
AutoTarget:
ScanRadius: 4
AttackHeli:
AttackAircraft:
FacingTolerance: 20
AmmoPool:
Ammo: 10
Expand Down Expand Up @@ -144,7 +144,7 @@ ORCA:
PauseOnCondition: !ammo
AutoTarget:
ScanRadius: 5
AttackHeli:
AttackAircraft:
FacingTolerance: 20
AmmoPool:
Ammo: 6
Expand Down
8 changes: 4 additions & 4 deletions mods/ra/rules/aircraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ MIG:
LocalOffset: 0,-640,0, 0,640,0
LocalYaw: -40, 24
PauseOnCondition: !ammo
AttackPlane:
AttackAircraft:
FacingTolerance: 20
Aircraft:
CruiseAltitude: 2560
Expand Down Expand Up @@ -173,7 +173,7 @@ YAK:
LocalOffset: 256,213,0
MuzzleSequence: muzzle
PauseOnCondition: !ammo
AttackPlane:
AttackAircraft:
FacingTolerance: 20
Aircraft:
CruiseAltitude: 2560
Expand Down Expand Up @@ -291,7 +291,7 @@ HELI:
Weapon: HellfireAG
LocalOffset: 0,213,-85, 0,-213,-85
PauseOnCondition: !ammo
AttackHeli:
AttackAircraft:
FacingTolerance: 20
Aircraft:
LandWhenIdle: false
Expand Down Expand Up @@ -357,7 +357,7 @@ HIND:
LocalOffset: 85,213,-85, 85,-213,-85
MuzzleSequence: muzzle
PauseOnCondition: !ammo
AttackHeli:
AttackAircraft:
FacingTolerance: 20
Aircraft:
LandWhenIdle: false
Expand Down
10 changes: 5 additions & 5 deletions mods/ts/rules/aircraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ DPOD:
EjectOnDeath: true
Armament:
Weapon: Vulcan2
AttackHeli:
AttackAircraft:
Voice: Attack
AmmoPool:
Ammo: 5
Expand Down Expand Up @@ -95,7 +95,7 @@ ORCA:
Armament:
Weapon: Hellfire
PauseOnCondition: !ammo
AttackHeli:
AttackAircraft:
FacingTolerance: 20
Voice: Attack
PauseOnCondition: empdisable
Expand Down Expand Up @@ -147,7 +147,7 @@ ORCAB:
Armament:
Weapon: Bomb
PauseOnCondition: !ammo
AttackPlane:
AttackAircraft:
Voice: Attack
FacingTolerance: 20
PauseOnCondition: empdisable
Expand Down Expand Up @@ -278,7 +278,7 @@ SCRIN:
Armament:
Weapon: Proton
PauseOnCondition: !ammo
AttackPlane:
AttackAircraft:
Voice: Attack
FacingTolerance: 20
PauseOnCondition: empdisable
Expand Down Expand Up @@ -326,7 +326,7 @@ APACHE:
Armament:
Weapon: HarpyClaw
PauseOnCondition: !ammo
AttackHeli:
AttackAircraft:
FacingTolerance: 20
Voice: Attack
PauseOnCondition: empdisable
Expand Down