Cancel the attack when no traits are active.
This commit is contained in:
committed by
abcdefg30
parent
a3f79503ed
commit
3bce55ac44
@@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
[Flags]
|
[Flags]
|
||||||
protected enum AttackStatus { UnableToAttack, NeedsToTurn, NeedsToMove, Attacking }
|
protected enum AttackStatus { UnableToAttack, NeedsToTurn, NeedsToMove, Attacking }
|
||||||
|
|
||||||
readonly AttackFrontal[] attackTraits;
|
readonly IEnumerable<AttackFrontal> attackTraits;
|
||||||
readonly RevealsShroud[] revealsShroud;
|
readonly RevealsShroud[] revealsShroud;
|
||||||
readonly IMove move;
|
readonly IMove move;
|
||||||
readonly IFacing facing;
|
readonly IFacing facing;
|
||||||
@@ -51,7 +51,7 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
this.targetLineColor = targetLineColor;
|
this.targetLineColor = targetLineColor;
|
||||||
this.forceAttack = forceAttack;
|
this.forceAttack = forceAttack;
|
||||||
|
|
||||||
attackTraits = self.TraitsImplementing<AttackFrontal>().ToArray();
|
attackTraits = self.TraitsImplementing<AttackFrontal>().ToArray().Where(Exts.IsTraitEnabled);
|
||||||
revealsShroud = self.TraitsImplementing<RevealsShroud>().ToArray();
|
revealsShroud = self.TraitsImplementing<RevealsShroud>().ToArray();
|
||||||
facing = self.Trait<IFacing>();
|
facing = self.Trait<IFacing>();
|
||||||
positionable = self.Trait<IPositionable>();
|
positionable = self.Trait<IPositionable>();
|
||||||
@@ -90,13 +90,19 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
if (IsCanceling)
|
if (IsCanceling)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (!attackTraits.Any())
|
||||||
|
{
|
||||||
|
Cancel(self);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool targetIsHiddenActor;
|
bool targetIsHiddenActor;
|
||||||
target = RecalculateTarget(self, out targetIsHiddenActor);
|
target = RecalculateTarget(self, out targetIsHiddenActor);
|
||||||
|
|
||||||
if (!targetIsHiddenActor && target.Type == TargetType.Actor)
|
if (!targetIsHiddenActor && target.Type == TargetType.Actor)
|
||||||
{
|
{
|
||||||
lastVisibleTarget = Target.FromTargetPositions(target);
|
lastVisibleTarget = Target.FromTargetPositions(target);
|
||||||
lastVisibleMaximumRange = attackTraits.Where(x => !x.IsTraitDisabled)
|
lastVisibleMaximumRange = attackTraits.Min(x => x.GetMaximumRangeVersusTarget(target));
|
||||||
.Min(x => x.GetMaximumRangeVersusTarget(target));
|
|
||||||
|
|
||||||
lastVisibleOwner = target.Actor.Owner;
|
lastVisibleOwner = target.Actor.Owner;
|
||||||
lastVisibleTargetTypes = target.Actor.GetEnabledTargetTypes();
|
lastVisibleTargetTypes = target.Actor.GetEnabledTargetTypes();
|
||||||
@@ -132,7 +138,7 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
|
|
||||||
attackStatus = AttackStatus.UnableToAttack;
|
attackStatus = AttackStatus.UnableToAttack;
|
||||||
|
|
||||||
foreach (var attack in attackTraits.Where(x => !x.IsTraitDisabled))
|
foreach (var attack in attackTraits)
|
||||||
{
|
{
|
||||||
var status = TickAttack(self, attack);
|
var status = TickAttack(self, attack);
|
||||||
attack.IsAiming = status == AttackStatus.Attacking || status == AttackStatus.NeedsToTurn;
|
attack.IsAiming = status == AttackStatus.Attacking || status == AttackStatus.NeedsToTurn;
|
||||||
|
|||||||
Reference in New Issue
Block a user