Introduce a Targetable trait; Subs can attack bridges; May introduce subtle bugs due to previous stupid assumption that !selectable == !attackable.

This commit is contained in:
Paul Chote
2010-07-28 22:57:14 +12:00
parent f9f6720437
commit 7a4fa93ce9
15 changed files with 91 additions and 58 deletions

View File

@@ -150,7 +150,7 @@ namespace OpenRA.Mods.RA
if (!WeaponValidForTarget(args.weapon, Target.FromActor(target))) return 0f;
var selectable = target.Info.Traits.GetOrDefault<SelectableInfo>();
var radius = selectable != null ? selectable.Radius : 0;
var radius = selectable != null ? selectable.Radius : 0;
var distance = (int)Math.Max(0, (target.CenterLocation - args.dest).Length - radius);
var falloff = (float)GetDamageFalloff(distance / warhead.Spread);
var rawDamage = (float)(warhead.Damage * modifier * falloff);
@@ -167,13 +167,11 @@ namespace OpenRA.Mods.RA
|| (weapon.ValidTargets.Contains("Water") &&
Game.world.GetTerrainType(Util.CellContaining(target.CenterLocation)) == "Water"); // even bigger hack!
var ownedInfo = target.Actor.Info.Traits.GetOrDefault<OwnedActorInfo>();
if (!weapon.ValidTargets.Intersect(ownedInfo.TargetType).Any())
var targetable = target.Actor.Info.Traits.GetOrDefault<TargetableInfo>();
if (targetable == null || !weapon.ValidTargets.Intersect(targetable.TargetTypes).Any())
return false;
var ownedInfo = target.Actor.Info.Traits.GetOrDefault<OwnedActorInfo>();
if (weapon.Warheads.All( w => w.EffectivenessAgainst(ownedInfo.Armor) <= 0))
return false;

View File

@@ -104,9 +104,9 @@ namespace OpenRA.Mods.RA
yield break;
}
var underCursor = world.FindUnitsAtMouse(mi.Location)
.Where(a => a.Info.Traits.Contains<SelectableInfo>())
.OrderByDescending(a => a.Info.Traits.Get<SelectableInfo>().Priority)
var underCursor = world.FindUnitsAtMouse(mi.Location)
//.Where(a => a.Info.Traits.Contains<SelectableInfo>())
.OrderByDescending(a => a.Info.Traits.Contains<SelectableInfo>() ? a.Info.Traits.Get<SelectableInfo>().Priority : int.MinValue)
.FirstOrDefault();
if (mi.Button == MouseButton.Right && underCursor == null)