refactor QueueAttack -> GetAttackActivity
This commit is contained in:
@@ -22,10 +22,9 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
{
|
{
|
||||||
public AttackHeli(Actor self, AttackHeliInfo info) : base(self, info) { }
|
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;
|
return new HeliAttack( newTarget );
|
||||||
self.QueueActivity(queued, new HeliAttack(newTarget));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,10 +22,9 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
{
|
{
|
||||||
public AttackPlane(Actor self, AttackPlaneInfo info) : base(self, info) { }
|
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;
|
return new FlyAttack( newTarget );
|
||||||
self.QueueActivity(queued, new FlyAttack(newTarget));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool CanAttack(Actor self)
|
protected override bool CanAttack(Actor self)
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
if( limitedAmmo != null && !limitedAmmo.HasAmmo() )
|
if( limitedAmmo != null && !limitedAmmo.HasAmmo() )
|
||||||
Cancel( self );
|
Cancel( self );
|
||||||
|
|
||||||
self.Trait<AttackPlane>().DoAttack( self, Target );
|
var attack = self.Trait<AttackPlane>();
|
||||||
|
attack.target = Target;
|
||||||
|
attack.DoAttack( self, Target );
|
||||||
|
|
||||||
if( inner == null )
|
if( inner == null )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
var attack = self.Trait<AttackBase>();
|
var attack = self.Trait<AttackHeli>();
|
||||||
var range = attack.GetMaximumRange() - 1;
|
var range = attack.GetMaximumRange() - 1;
|
||||||
var dist = target.CenterLocation - self.CenterLocation;
|
var dist = target.CenterLocation - self.CenterLocation;
|
||||||
|
|
||||||
@@ -46,6 +46,7 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
if( !float2.WithinEpsilon( float2.Zero, dist, range * Game.CellSize ) )
|
if( !float2.WithinEpsilon( float2.Zero, dist, range * Game.CellSize ) )
|
||||||
aircraft.TickMove( 1024 * aircraft.MovementSpeed, desiredFacing );
|
aircraft.TickMove( 1024 * aircraft.MovementSpeed, desiredFacing );
|
||||||
|
|
||||||
|
attack.target = target;
|
||||||
attack.DoAttack( self, target );
|
attack.DoAttack( self, target );
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
if (order.OrderString == "Attack")
|
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)
|
if (self.Owner == self.World.LocalPlayer)
|
||||||
self.World.AddFrameEndTask(w =>
|
self.World.AddFrameEndTask(w =>
|
||||||
@@ -180,7 +180,7 @@ namespace OpenRA.Mods.RA
|
|||||||
return (order.OrderString == "Attack") ? "Attack" : null;
|
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 bool HasAnyValidWeapons(Target t) { return Weapons.Any(w => w.IsValidAgainst(self.World, t)); }
|
||||||
public float GetMaximumRange() { return Weapons.Max(w => w.Info.Range); }
|
public float GetMaximumRange() { return Weapons.Max(w => w.Info.Range); }
|
||||||
|
|||||||
@@ -40,15 +40,12 @@ namespace OpenRA.Mods.RA
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void QueueAttack(Actor self, bool queued, Target newTarget)
|
protected override IActivity GetAttackActivity(Actor self, Target newTarget)
|
||||||
{
|
{
|
||||||
var weapon = ChooseWeaponForTarget(newTarget);
|
var weapon = ChooseWeaponForTarget(newTarget);
|
||||||
|
if( weapon == null )
|
||||||
if (weapon != null)
|
return null;
|
||||||
self.QueueActivity( queued,
|
return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Info.Range));
|
||||||
new Activities.Attack(
|
|
||||||
newTarget,
|
|
||||||
Math.Max(0, (int)weapon.Info.Range)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,15 +40,12 @@ namespace OpenRA.Mods.RA
|
|||||||
self.QueueActivity(new Leap(self, target));
|
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);
|
var weapon = ChooseWeaponForTarget(newTarget);
|
||||||
|
if( weapon == null )
|
||||||
if (weapon != null)
|
return null;
|
||||||
self.QueueActivity( queued,
|
return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Info.Range));
|
||||||
new Activities.Attack(
|
|
||||||
newTarget,
|
|
||||||
Math.Max(0, (int)weapon.Info.Range)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ namespace OpenRA.Mods.RA
|
|||||||
DoAttack(self, target);
|
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
|
class SetTarget : CancelableActivity
|
||||||
|
|||||||
@@ -46,12 +46,9 @@ namespace OpenRA.Mods.RA
|
|||||||
DoAttack( self, target );
|
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 new AttackActivity( newTarget );
|
||||||
return;
|
|
||||||
|
|
||||||
self.QueueActivity( queued, new AttackActivity( newTarget ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool buildComplete = false;
|
bool buildComplete = false;
|
||||||
@@ -66,6 +63,9 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
if( IsCanceled ) return NextActivity;
|
if( IsCanceled ) return NextActivity;
|
||||||
|
|
||||||
|
if (self.TraitsImplementing<IDisable>().Any(d => d.Disabled))
|
||||||
|
return this;
|
||||||
|
|
||||||
var attack = self.Trait<AttackTurreted>();
|
var attack = self.Trait<AttackTurreted>();
|
||||||
const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */
|
const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */
|
||||||
var weapon = attack.ChooseWeaponForTarget(newTarget);
|
var weapon = attack.ChooseWeaponForTarget(newTarget);
|
||||||
|
|||||||
Reference in New Issue
Block a user