non-turreted AutoTarget is sensible now

This commit is contained in:
Chris Forbes
2009-12-28 12:08:56 +13:00
parent 73864861e5
commit d3767f2d99
7 changed files with 31 additions and 18 deletions

View File

@@ -16,16 +16,23 @@ namespace OpenRa.Game.Traits
attack.ResolveOrder(self, new Order("Attack", self, target, int2.Zero, null));
}
float GetMaximumRange(Actor self)
{
return new[] { self.Info.Primary, self.Info.Secondary }
.Where(w => w != null)
.Max(w => Rules.WeaponInfo[w].Range);
}
public void Tick(Actor self)
{
if (!self.IsIdle) return;
var attack = self.traits.WithInterface<AttackBase>().First();
var range = Rules.WeaponInfo[self.Info.Primary].Range;
var range = GetMaximumRange(self);
if (attack.target == null ||
(attack.target.Location - self.Location).LengthSquared > range * range + 2)
attack.target = ChooseTarget(self, range);
AttackTarget(self, ChooseTarget(self, range));
}
Actor ChooseTarget(Actor self, float range)

View File

@@ -35,7 +35,7 @@ namespace OpenRa.Game.Traits
{
if (doneBuilding) roof.Tick();
var b = self.Bounds;
var b = self.GetBounds(false);
if (isOpen && !Game.UnitInfluence.GetUnitsAt(((1/24f) * self.CenterLocation).ToInt2()).Any())
{
isOpen = false;