refactor QueueAttack -> GetAttackActivity

This commit is contained in:
Bob
2010-11-13 16:42:13 +13:00
parent 7306de3730
commit 22e61a5700
9 changed files with 26 additions and 31 deletions

View File

@@ -22,10 +22,9 @@ namespace OpenRA.Mods.RA.Air
{
public AttackHeli(Actor self, AttackHeliInfo info) : base(self, info) { }
protected override void QueueAttack(Actor self, bool queued, Target newTarget)
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
{
target = newTarget;
self.QueueActivity(queued, new HeliAttack(newTarget));
return new HeliAttack( newTarget );
}
}
}

View File

@@ -22,10 +22,9 @@ namespace OpenRA.Mods.RA.Air
{
public AttackPlane(Actor self, AttackPlaneInfo info) : base(self, info) { }
protected override void QueueAttack(Actor self, bool queued, Target newTarget)
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
{
target = newTarget;
self.QueueActivity(queued, new FlyAttack(newTarget));
return new FlyAttack( newTarget );
}
protected override bool CanAttack(Actor self)

View File

@@ -27,7 +27,9 @@ namespace OpenRA.Mods.RA.Air
if( limitedAmmo != null && !limitedAmmo.HasAmmo() )
Cancel( self );
self.Trait<AttackPlane>().DoAttack( self, Target );
var attack = self.Trait<AttackPlane>();
attack.target = Target;
attack.DoAttack( self, Target );
if( inner == null )
{

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA.Air
return this;
}
var attack = self.Trait<AttackBase>();
var attack = self.Trait<AttackHeli>();
var range = attack.GetMaximumRange() - 1;
var dist = target.CenterLocation - self.CenterLocation;
@@ -46,6 +46,7 @@ namespace OpenRA.Mods.RA.Air
if( !float2.WithinEpsilon( float2.Zero, dist, range * Game.CellSize ) )
aircraft.TickMove( 1024 * aircraft.MovementSpeed, desiredFacing );
attack.target = target;
attack.DoAttack( self, target );
return this;

View File

@@ -149,7 +149,7 @@ namespace OpenRA.Mods.RA
{
if (order.OrderString == "Attack")
{
QueueAttack(self, order.Queued, Target.FromOrder(order));
self.QueueActivity(order.Queued, GetAttackActivity(self, Target.FromOrder(order)));
if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask(w =>
@@ -180,7 +180,7 @@ namespace OpenRA.Mods.RA
return (order.OrderString == "Attack") ? "Attack" : null;
}
protected abstract void QueueAttack(Actor self, bool queued, Target newTarget);
protected abstract IActivity GetAttackActivity(Actor self, Target newTarget);
public bool HasAnyValidWeapons(Target t) { return Weapons.Any(w => w.IsValidAgainst(self.World, t)); }
public float GetMaximumRange() { return Weapons.Max(w => w.Info.Range); }

View File

@@ -40,15 +40,12 @@ namespace OpenRA.Mods.RA
return true;
}
protected override void QueueAttack(Actor self, bool queued, Target newTarget)
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
{
var weapon = ChooseWeaponForTarget(newTarget);
if (weapon != null)
self.QueueActivity( queued,
new Activities.Attack(
newTarget,
Math.Max(0, (int)weapon.Info.Range)));
if( weapon == null )
return null;
return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Info.Range));
}
}
}

View File

@@ -40,15 +40,12 @@ namespace OpenRA.Mods.RA
self.QueueActivity(new Leap(self, target));
}
protected override void QueueAttack(Actor self, bool queued, Target newTarget)
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
{
var weapon = ChooseWeaponForTarget(newTarget);
if (weapon != null)
self.QueueActivity( queued,
new Activities.Attack(
newTarget,
Math.Max(0, (int)weapon.Info.Range)));
if( weapon == null )
return null;
return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Info.Range));
}
}
}

View File

@@ -38,9 +38,9 @@ namespace OpenRA.Mods.RA
DoAttack(self, target);
}
protected override void QueueAttack(Actor self, bool queued, Target newTarget)
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
{
self.QueueActivity( queued, new SetTarget( newTarget ) );
return new SetTarget( newTarget );
}
class SetTarget : CancelableActivity

View File

@@ -46,12 +46,9 @@ namespace OpenRA.Mods.RA
DoAttack( self, target );
}
protected override void QueueAttack( Actor self, bool queued, Target newTarget )
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
{
if (self.TraitsImplementing<IDisable>().Any(d => d.Disabled))
return;
self.QueueActivity( queued, new AttackActivity( newTarget ) );
return new AttackActivity( newTarget );
}
bool buildComplete = false;
@@ -66,6 +63,9 @@ namespace OpenRA.Mods.RA
{
if( IsCanceled ) return NextActivity;
if (self.TraitsImplementing<IDisable>().Any(d => d.Disabled))
return this;
var attack = self.Trait<AttackTurreted>();
const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */
var weapon = attack.ChooseWeaponForTarget(newTarget);