Make helicopters move backwards when target is too close

'Too close' as in closer than weapons' MinRange.
This commit is contained in:
reaperrr
2015-04-08 00:31:40 +02:00
parent a37babf0c1
commit 7ddd6aab93
2 changed files with 22 additions and 0 deletions

View File

@@ -57,6 +57,19 @@ namespace OpenRA.Mods.Common.Activities
if (!target.IsInRange(self.CenterPosition, attackHeli.GetMaximumRange())) if (!target.IsInRange(self.CenterPosition, attackHeli.GetMaximumRange()))
helicopter.SetPosition(self, helicopter.CenterPosition + helicopter.FlyStep(desiredFacing)); helicopter.SetPosition(self, helicopter.CenterPosition + helicopter.FlyStep(desiredFacing));
// Fly backwards from the target
// TODO: Same problem as with MaximumRange
if (target.IsInRange(self.CenterPosition, attackHeli.GetMinimumRange()))
{
// Facing 0 doesn't work with the following position change
var facing = 1;
if (desiredFacing != 0)
facing = desiredFacing;
else if (helicopter.Facing != 0)
facing = helicopter.Facing;
helicopter.SetPosition(self, helicopter.CenterPosition + helicopter.FlyStep(-facing));
}
attackHeli.DoAttack(self, target); attackHeli.DoAttack(self, target);
return this; return this;

View File

@@ -157,6 +157,15 @@ namespace OpenRA.Mods.Common.Traits
return Armaments.Any(a => a.Weapon.IsValidAgainst(t, self.World, self)); return Armaments.Any(a => a.Weapon.IsValidAgainst(t, self.World, self));
} }
public WRange GetMinimumRange()
{
if (IsTraitDisabled)
return WRange.Zero;
return Armaments.Where(a => !a.IsTraitDisabled)
.Select(a => a.Weapon.MinRange).Min();
}
public WRange GetMaximumRange() public WRange GetMaximumRange()
{ {
if (IsTraitDisabled) if (IsTraitDisabled)