obey force move commands on bridge demolition and repair
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user