Merge pull request #3726 from pchote/cloak-fix

Cloak fixes
This commit is contained in:
Matthias Mailänder
2013-08-23 09:27:56 -07:00
36 changed files with 135 additions and 132 deletions

View File

@@ -18,7 +18,6 @@ namespace OpenRA.Mods.RA.Activities
public class Attack : Activity
{
protected Target Target;
ITargetable targetable;
WRange Range;
bool AllowMovement;
@@ -33,9 +32,6 @@ namespace OpenRA.Mods.RA.Activities
public Attack(Target target, WRange range, bool allowMovement)
{
Target = target;
if (target.Type == TargetType.Actor)
targetable = target.Actor.TraitOrDefault<ITargetable>();
Range = range;
AllowMovement = allowMovement;
}
@@ -54,13 +50,11 @@ namespace OpenRA.Mods.RA.Activities
return NextActivity;
var type = Target.Type;
if (type != TargetType.Actor && type != TargetType.Terrain)
return NextActivity;
if (type == TargetType.Actor && !self.Owner.HasFogVisibility() && Target.Actor.HasTrait<Mobile>() && !self.Owner.Shroud.IsTargetable(Target.Actor))
if (!Target.IsValidFor(self) || type == TargetType.FrozenActor)
return NextActivity;
if (targetable != null && !targetable.TargetableBy(Target.Actor, self))
// TODO: This is horrible, and probably wrong. Work out what it is trying to solve, then redo it properly.
if (type == TargetType.Actor && !self.Owner.HasFogVisibility() && Target.Actor.HasTrait<Mobile>() && !self.Owner.Shroud.IsTargetable(Target.Actor))
return NextActivity;
if (!Target.IsInRange(self.CenterPosition, Range))

View File

@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Activities
var capturable = target.Actor.Trait<Capturable>();
if (IsCanceled || !self.IsInWorld || self.IsDead())
if (IsCanceled || !self.IsInWorld || self.IsDead() || !target.IsValidFor(self))
{
if (capturable.CaptureInProgress)
capturable.EndCapture();

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Activities
public override Activity Tick(Actor self)
{
if (IsCanceled || target.Type != TargetType.Actor)
if (IsCanceled || !target.IsValidFor(self))
return NextActivity;
self.World.AddFrameEndTask(w => w.Add(new DelayedAction(delay, () =>

View File

@@ -27,7 +27,10 @@ namespace OpenRA.Mods.RA.Activities
public override Activity Tick(Actor self)
{
if (IsCanceled || target.Type != TargetType.Actor)
if (IsCanceled || !target.IsValidFor(self))
return NextActivity;
if (target.Type != TargetType.Actor)
return NextActivity;
var targetActor = target.Actor;

View File

@@ -27,7 +27,10 @@ namespace OpenRA.Mods.RA.Activities
public override Activity Tick(Actor self)
{
if (IsCanceled || target.Type != TargetType.Actor)
if (IsCanceled || !target.IsValidFor(self))
return NextActivity;
if (target.Type != TargetType.Actor)
return NextActivity;
if (!Util.AdjacentCells(target).Any(c => c == self.Location))

View File

@@ -16,21 +16,23 @@ namespace OpenRA.Mods.RA.Activities
public class Follow : Activity
{
Target target;
Mobile mobile;
WRange range;
int nextPathTime;
const int delayBetweenPathingAttempts = 20;
const int delaySpread = 5;
public Follow(Target target, WRange range)
public Follow(Actor self, Target target, WRange range)
{
this.target = target;
mobile = self.Trait<Mobile>();
this.range = range;
}
public override Activity Tick(Actor self)
{
if (IsCanceled || !target.IsValid)
if (IsCanceled || !target.IsValidFor(self))
return NextActivity;
if (target.IsInRange(self.CenterPosition, range) || --nextPathTime > 0)
@@ -39,7 +41,6 @@ namespace OpenRA.Mods.RA.Activities
nextPathTime = self.World.SharedRandom.Next(delayBetweenPathingAttempts - delaySpread,
delayBetweenPathingAttempts + delaySpread);
var mobile = self.Trait<Mobile>();
return Util.SequenceActivities(mobile.MoveWithinRange(target, range), this);
}
}

View File

@@ -22,6 +22,9 @@ namespace OpenRA.Mods.RA.Activities
protected override Activity InnerTick(Actor self, AttackBase attack)
{
if (!Target.IsValidFor(self))
return NextActivity;
if (Target.Type == TargetType.Actor && Target.Actor.GetDamageState() == DamageState.Undamaged)
return NextActivity;

View File

@@ -23,7 +23,10 @@ namespace OpenRA.Mods.RA.Activities
public override Activity Tick(Actor self)
{
if (IsCanceled || target.Type != TargetType.Actor)
if (IsCanceled || !target.IsValidFor(self))
return NextActivity;
if (target.Type != TargetType.Actor)
return NextActivity;
var actor = target.Actor;

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Activities
public override Activity Tick(Actor self)
{
if (IsCanceled || !target.IsValid)
if (IsCanceled || !target.IsValidFor(self))
return NextActivity;
var mobile = self.Trait<Mobile>();