diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 28f9e444aa..3441001a9d 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -724,6 +724,7 @@ + diff --git a/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs b/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs new file mode 100644 index 0000000000..569121c6f3 --- /dev/null +++ b/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs @@ -0,0 +1,62 @@ +#region Copyright & License Information +/* + * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; +using OpenRA.Mods.Common.Traits; +using OpenRA.Orders; + +namespace OpenRA.Mods.Common.Orders +{ + public class GuardOrderGenerator : GenericSelectTarget + { + public GuardOrderGenerator(IEnumerable subjects, string order, string cursor, MouseButton button) + : base(subjects, order, cursor, button) { } + + protected override IEnumerable OrderInner(World world, CPos xy, MouseInput mi) + { + var target = FriendlyGuardableUnits(world, mi).FirstOrDefault(); + + if (target == null || Subjects.All(s => s.IsDead)) + yield break; + + world.CancelInputMode(); + foreach (var subject in Subjects) + if (subject != target) + yield return new Order(OrderName, subject, false) { TargetActor = target }; + } + + public override void Tick(World world) + { + if (Subjects.All(s => s.IsDead || !s.Info.HasTraitInfo())) + world.CancelInputMode(); + } + + public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) + { + if (!Subjects.Any()) + return null; + + var multiple = Subjects.Count() > 1; + var canGuard = FriendlyGuardableUnits(world, mi) + .Any(a => multiple || a != Subjects.First()); + + return canGuard ? Cursor : "move-blocked"; + } + + static IEnumerable FriendlyGuardableUnits(World world, MouseInput mi) + { + return world.ScreenMap.ActorsAt(mi) + .Where(a => !world.FogObscures(a) && !a.IsDead && + a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) && + a.Info.HasTraitInfo()); + } + } +} diff --git a/OpenRA.Mods.Common/Traits/Guard.cs b/OpenRA.Mods.Common/Traits/Guard.cs index 8bec2c52a6..d9b6eabf80 100644 --- a/OpenRA.Mods.Common/Traits/Guard.cs +++ b/OpenRA.Mods.Common/Traits/Guard.cs @@ -59,49 +59,4 @@ namespace OpenRA.Mods.Common.Traits return order.OrderString == "Guard" ? info.Voice : null; } } - - public class GuardOrderGenerator : GenericSelectTarget - { - public GuardOrderGenerator(IEnumerable subjects, string order, string cursor, MouseButton button) - : base(subjects, order, cursor, button) { } - - protected override IEnumerable OrderInner(World world, CPos xy, MouseInput mi) - { - var target = FriendlyGuardableUnits(world, mi).FirstOrDefault(); - - if (target == null || Subjects.All(s => s.IsDead)) - yield break; - - world.CancelInputMode(); - foreach (var subject in Subjects) - if (subject != target) - yield return new Order(OrderName, subject, false) { TargetActor = target }; - } - - public override void Tick(World world) - { - if (Subjects.All(s => s.IsDead || !s.Info.HasTraitInfo())) - world.CancelInputMode(); - } - - public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) - { - if (!Subjects.Any()) - return null; - - var multiple = Subjects.Count() > 1; - var canGuard = FriendlyGuardableUnits(world, mi) - .Any(a => multiple || a != Subjects.First()); - - return canGuard ? Cursor : "move-blocked"; - } - - static IEnumerable FriendlyGuardableUnits(World world, MouseInput mi) - { - return world.ScreenMap.ActorsAt(mi) - .Where(a => !world.FogObscures(a) && !a.IsDead && - a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) && - a.Info.HasTraitInfo()); - } - } } diff --git a/OpenRA.Mods.Common/Widgets/WorldCommandWidget.cs b/OpenRA.Mods.Common/Widgets/WorldCommandWidget.cs index 402221167d..9835255b5c 100644 --- a/OpenRA.Mods.Common/Widgets/WorldCommandWidget.cs +++ b/OpenRA.Mods.Common/Widgets/WorldCommandWidget.cs @@ -12,6 +12,7 @@ using System; using System.Drawing; using System.Linq; using OpenRA.Graphics; +using OpenRA.Mods.Common.Orders; using OpenRA.Mods.Common.Traits; using OpenRA.Orders; using OpenRA.Primitives;