obey force move commands on bridge demolition and repair

This commit is contained in:
Matthias Mailänder
2013-12-26 15:48:05 +01:00
parent 83915eefb4
commit ed19969afe
2 changed files with 33 additions and 1 deletions

View File

@@ -33,7 +33,7 @@ namespace OpenRA.Mods.RA
public IEnumerable<IOrderTargeter> Orders
{
get { yield return new TargetTypeOrderTargeter("C4", "C4", 6, "c4", true, false); }
get { yield return new C4DemolitionOrderTargeter(); }
}
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
@@ -71,5 +71,33 @@ namespace OpenRA.Mods.RA
{
return order.OrderString == "C4" ? "Attack" : null;
}
class C4DemolitionOrderTargeter : UnitOrderTargeter
{
public C4DemolitionOrderTargeter()
: base("C4", 6, "c4", true, false) { }
public override bool CanTargetActor(Actor self, Actor target, TargetModifiers modifiers, ref string cursor)
{
// Obey force moving onto bridges
if (modifiers.HasModifier(TargetModifiers.ForceMove))
return false;
var demolishable = target.TraitOrDefault<IDemolishable>();
if (demolishable == null || !demolishable.IsValidTarget(target, self))
return false;
return true;
}
public override bool CanTargetFrozenActor(Actor self, FrozenActor target, TargetModifiers modifiers, ref string cursor)
{
// TODO: Bridges don't yet support FrozenUnderFog.
if (target.Actor.HasTrait<BridgeHut>())
return false;
return true;
}
}
}
}

View File

@@ -79,6 +79,10 @@ namespace OpenRA.Mods.RA
if (!modifiers.HasModifier(TargetModifiers.ForceAttack) && damage != DamageState.Dead)
return false;
// Obey force moving onto bridges
if (modifiers.HasModifier(TargetModifiers.ForceMove))
return false;
// Can't repair an undamaged bridge
if (damage == DamageState.Undamaged)
cursor = "goldwrench-blocked";