Support multiple ITargetable traits
This commit is contained in:
@@ -63,13 +63,13 @@ namespace OpenRA.Mods.Common.AI
|
||||
if (!a.HasTrait<AttackBase>())
|
||||
return false;
|
||||
|
||||
var targetable = target.TraitOrDefault<ITargetable>();
|
||||
if (targetable == null)
|
||||
var targetTypes = target.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled).SelectMany(t => t.TargetTypes);
|
||||
if (!targetTypes.Any())
|
||||
return false;
|
||||
|
||||
var arms = a.TraitsImplementing<Armament>();
|
||||
foreach (var arm in arms)
|
||||
if (arm.Weapon.IsValidTarget(targetable.TargetTypes))
|
||||
if (arm.Weapon.IsValidTarget(targetTypes))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
@@ -125,14 +125,11 @@ namespace OpenRA.Mods.Common.AI
|
||||
if (a == null)
|
||||
return 0;
|
||||
|
||||
var targetable = a.TraitOrDefault<ITargetable>();
|
||||
if (targetable == null)
|
||||
var targetable = a.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled);
|
||||
if (!targetable.Any(t => t.TargetableBy(a, firedBy.PlayerActor)))
|
||||
return 0;
|
||||
|
||||
if (!targetable.TargetableBy(a, firedBy.PlayerActor))
|
||||
return 0;
|
||||
|
||||
if (Types.Intersect(targetable.TargetTypes).Any())
|
||||
if (Types.Intersect(targetable.SelectMany(t => t.TargetTypes)).Any())
|
||||
{
|
||||
switch (TargetMetric)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user