Merge pull request #11081 from pchote/fix-left-click-orders

Fix left click orders
This commit is contained in:
Matthias Mailänder
2016-04-10 17:32:14 +02:00
13 changed files with 39 additions and 18 deletions

View File

@@ -58,5 +58,11 @@ namespace OpenRA.Orders
{
return world.Map.Contains(cell) ? Cursor : "generic-blocked";
}
public override bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
{
// Custom order generators always override selection
return true;
}
}
}

View File

@@ -83,7 +83,7 @@ namespace OpenRA.Orders
}
// Used for classic mouse orders, determines whether or not action at xy is move or select
public static bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
public virtual bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
{
var actor = world.ScreenMap.ActorsAt(xy).WithHighestSelectionPriority(xy);
if (actor == null)
@@ -95,10 +95,21 @@ namespace OpenRA.Orders
var underCursor = world.Selection.Actors.WithHighestSelectionPriority(xy);
var o = OrderForUnit(underCursor, target, actorsAt, cell, mi);
if (o != null && o.Order.OverrideSelection)
return false;
if (o != null)
{
var modifiers = TargetModifiers.None;
if (mi.Modifiers.HasModifier(Modifiers.Ctrl))
modifiers |= TargetModifiers.ForceAttack;
if (mi.Modifiers.HasModifier(Modifiers.Shift))
modifiers |= TargetModifiers.ForceQueue;
if (mi.Modifiers.HasModifier(Modifiers.Alt))
modifiers |= TargetModifiers.ForceMove;
return true;
if (o.Order.TargetOverridesSelection(modifiers))
return true;
}
return false;
}
/// <summary>

View File

@@ -108,7 +108,7 @@ namespace OpenRA.Traits
int OrderPriority { get; }
bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, ref TargetModifiers modifiers, ref string cursor);
bool IsQueued { get; }
bool OverrideSelection { get; }
bool TargetOverridesSelection(TargetModifiers modifiers);
}
public interface IResolveOrder { void ResolveOrder(Actor self, Order order); }

View File

@@ -103,10 +103,8 @@ namespace OpenRA.Widgets
var selectableActor = World.ScreenMap.ActorsAt(mousePos).Any(x =>
x.Info.HasTraitInfo<SelectableInfo>() && (x.Owner.IsAlliedWith(World.RenderPlayer) || !World.FogObscures(x)));
var ignoreSelection = mi.Modifiers.HasModifier(Modifiers.Ctrl) || mi.Modifiers.HasModifier(Modifiers.Alt) ||
UnitOrderGenerator.InputOverridesSelection(World, mousePos, mi);
if (ignoreSelection || !selectableActor)
var uog = (UnitOrderGenerator)World.OrderGenerator;
if (!selectableActor || uog.InputOverridesSelection(World, mousePos, mi))
{
// Order units instead of selecting
ApplyOrders(World, mi);