Merge pull request #12947 from pchote/fix-obelisk-targeting

Fix obelisk targeting.
This commit is contained in:
Oliver Brakmann
2017-03-11 22:28:42 +01:00
committed by GitHub
2 changed files with 7 additions and 5 deletions

View File

@@ -17,7 +17,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Cnc.Traits namespace OpenRA.Mods.Cnc.Traits
{ {
[Desc("Implements the charge-then-burst attack logic specific to the RA tesla coil.")] [Desc("Implements the charge-then-burst attack logic specific to the RA tesla coil.")]
class AttackTeslaInfo : AttackOmniInfo class AttackTeslaInfo : AttackBaseInfo
{ {
[Desc("How many charges this actor has to attack with, once charged.")] [Desc("How many charges this actor has to attack with, once charged.")]
public readonly int MaxCharges = 1; public readonly int MaxCharges = 1;
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.Cnc.Traits
public override object Create(ActorInitializer init) { return new AttackTesla(init.Self, this); } public override object Create(ActorInitializer init) { return new AttackTesla(init.Self, this); }
} }
class AttackTesla : AttackOmni, ITick, INotifyAttack class AttackTesla : AttackBase, ITick, INotifyAttack
{ {
readonly AttackTeslaInfo info; readonly AttackTeslaInfo info;

View File

@@ -26,23 +26,25 @@ namespace OpenRA.Mods.Common.Traits
public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove, bool forceAttack) public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove, bool forceAttack)
{ {
return new SetTarget(this, newTarget); return new SetTarget(this, newTarget, allowMove);
} }
protected class SetTarget : Activity protected class SetTarget : Activity
{ {
readonly Target target; readonly Target target;
readonly AttackOmni attack; readonly AttackOmni attack;
readonly bool allowMove;
public SetTarget(AttackOmni attack, Target target) public SetTarget(AttackOmni attack, Target target, bool allowMove)
{ {
this.target = target; this.target = target;
this.attack = attack; this.attack = attack;
this.allowMove = allowMove;
} }
public override Activity Tick(Actor self) public override Activity Tick(Actor self)
{ {
if (IsCanceled || !target.IsValidFor(self)) if (IsCanceled || !target.IsValidFor(self) || !attack.IsReachableTarget(target, allowMove))
return NextActivity; return NextActivity;
attack.DoAttack(self, target); attack.DoAttack(self, target);