Merge pull request #3355 from ScottNZ/follow

Guard fixes
This commit is contained in:
Chris Forbes
2013-05-31 18:38:53 -07:00
2 changed files with 11 additions and 7 deletions

View File

@@ -61,8 +61,9 @@ namespace OpenRA.Mods.RA
if (target == null || subjects.All(s => s.IsDead()))
yield break;
foreach (var actor in subjects)
yield return new Order("Guard", actor, false) { TargetActor = target };
foreach (var subject in subjects)
if (subject != target)
yield return new Order("Guard", subject, false) { TargetActor = target };
}
public void Tick(World world)
@@ -76,10 +77,13 @@ namespace OpenRA.Mods.RA
public string GetCursor(World world, CPos xy, MouseInput mi)
{
return world.Map.IsInMap(xy)
&& FriendlyGuardableUnitsAtMouse(world, mi).Any()
? "guard"
: "move-blocked";
if (world.Map.IsInMap(xy))
{
var targets = FriendlyGuardableUnitsAtMouse(world, mi);
if (targets.Any() && (subjects.Count() > 1 || (subjects.Count() == 1 && subjects.First() != targets.First())))
return "guard";
}
return "move-blocked";
}
static IEnumerable<Actor> FriendlyGuardableUnitsAtMouse(World world, MouseInput mi)

View File

@@ -150,7 +150,7 @@ namespace OpenRA.Mods.RA.Widgets
bool PerformGuard()
{
var actors = World.Selection.Actors.Where(a => a.Owner == World.LocalPlayer && a.HasTrait<Guard>());
var actors = World.Selection.Actors.Where(a => !a.Destroyed && a.Owner == World.LocalPlayer && a.HasTrait<Guard>());
if (actors.Any())
World.OrderGenerator = new GuardOrderGenerator(actors);