Let order generators account for selection changes

This commit is contained in:
abcdefg30
2020-05-22 11:21:57 +02:00
committed by Paul Chote
parent b5e3f25418
commit 07d58337f1
12 changed files with 63 additions and 24 deletions

View File

@@ -28,29 +28,31 @@ namespace OpenRA.Mods.Common.Orders
yield break;
var target = FriendlyGuardableUnits(world, mi).FirstOrDefault();
if (target == null || Subjects.All(s => s.IsDead))
if (target == null)
yield break;
world.CancelInputMode();
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
yield return new Order(OrderName, null, Target.FromActor(target), queued, null, Subjects.Where(s => s != target).ToArray());
yield return new Order(OrderName, null, Target.FromActor(target), queued, null, subjects.Where(s => s != target).ToArray());
}
public override void Tick(World world)
public override void SelectionChanged(World world, IEnumerable<Actor> selected)
{
if (Subjects.All(s => s.IsDead || !s.Info.HasTraitInfo<GuardInfo>()))
// Guarding doesn't work without AutoTarget, so require at least one unit in the selection to have it
subjects = selected.Where(s => s.Info.HasTraitInfo<GuardInfo>());
if (!subjects.Any(s => s.Info.HasTraitInfo<AutoTargetInfo>()))
world.CancelInputMode();
}
public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
if (!Subjects.Any())
if (!subjects.Any())
return null;
var multiple = Subjects.Count() > 1;
var multiple = subjects.Count() > 1;
var canGuard = FriendlyGuardableUnits(world, mi)
.Any(a => multiple || a != Subjects.First());
.Any(a => multiple || a != subjects.First());
return canGuard ? Cursor : "move-blocked";
}