diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index bb3fa18f6a..269c8146c5 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -811,6 +811,7 @@ + diff --git a/OpenRA.Mods.Common/Orders/ForceModifiersOrderGenerator.cs b/OpenRA.Mods.Common/Orders/ForceModifiersOrderGenerator.cs new file mode 100644 index 0000000000..402d7c26d6 --- /dev/null +++ b/OpenRA.Mods.Common/Orders/ForceModifiersOrderGenerator.cs @@ -0,0 +1,46 @@ +#region Copyright & License Information +/* + * Copyright 2007-2017 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, either version 3 of + * the License, or (at your option) any later version. 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 ForceModifiersOrderGenerator : UnitOrderGenerator + { + public readonly Modifiers Modifiers; + readonly bool cancelOnFirstUse; + + public ForceModifiersOrderGenerator(Modifiers modifiers, bool cancelOnFirstUse) + { + Modifiers = modifiers; + this.cancelOnFirstUse = cancelOnFirstUse; + } + + public override IEnumerable Order(World world, CPos cell, int2 worldPixel, MouseInput mi) + { + mi.Modifiers |= Modifiers; + + if (cancelOnFirstUse) + world.CancelInputMode(); + + return base.Order(world, cell, worldPixel, mi); + } + + public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) + { + mi.Modifiers |= Modifiers; + return base.GetCursor(world, cell, worldPixel, mi); + } + } +}