Skip to content

Commit 0abe8f9

Browse files
author
Bynnar18
committed
Fixes issues with support powers and adds property to all IOrderGenerator classes to determine priority over selection in the left-click order scheme.
1 parent 7b46b76 commit 0abe8f9

File tree

17 files changed

+41
-7
lines changed

17 files changed

+41
-7
lines changed

OpenRA.Game/Orders/UnitOrderGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ public static bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
9696

9797
var o = OrderForUnit(underCursor, target, mi);
9898

99-
if (o == null || o.Trait is IMove)
100-
return true;
99+
if (o != null && o.Order.OverrideSelection)
100+
return false;
101101

102-
return false;
102+
return true;
103103
}
104104

105105
static UnitOrderResult OrderForUnit(Actor self, Target target, MouseInput mi)

OpenRA.Game/Traits/TraitsInterfaces.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public interface IOrderTargeter
7979
int OrderPriority { get; }
8080
bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor);
8181
bool IsQueued { get; }
82+
bool OverrideSelection { get; }
8283
}
8384

8485
public interface IResolveOrder { void ResolveOrder(Actor self, Order order); }

OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,15 @@ public override bool HandleMouseInput(MouseInput mi)
6868

6969
dragStart = xy;
7070

71-
// Place buildings
72-
if (!useClassicMouseStyle || !World.Selection.Actors.Any())
71+
// Place buildings, use support powers, and other non-unit things
72+
if (!(World.OrderGenerator is UnitOrderGenerator))
73+
{
7374
ApplyOrders(World, xy, mi);
75+
dragStart = dragEnd = null;
76+
YieldMouseFocus(mi);
77+
lastMousePosition = xy;
78+
return true;
79+
}
7480
}
7581

7682
if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Move && dragStart.HasValue)
@@ -114,8 +120,6 @@ public override bool HandleMouseInput(MouseInput mi)
114120
World.Selection.Combine(World, newSelection, mi.Modifiers.HasModifier(Modifiers.Shift), dragStart == xy);
115121
}
116122
}
117-
else if (useClassicMouseStyle)
118-
ApplyOrders(World, xy, mi);
119123

120124
dragStart = dragEnd = null;
121125
YieldMouseFocus(mi);

OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ public IonCannonPower(Actor self, IonCannonPowerInfo info) : base(self, info) {
4545

4646
public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
4747
{
48+
// Clear selection if using Left-Click Orders
49+
if (Game.Settings.Game.UseClassicMouseStyle)
50+
manager.Self.World.Selection.Clear();
51+
4852
Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound);
4953
var info = Info as IonCannonPowerInfo;
5054
return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left);

OpenRA.Mods.Common/Orders/DeployOrderTargeter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public DeployOrderTargeter(string order, int priority, Func<bool> useDeployCurso
3232

3333
public string OrderID { get; private set; }
3434
public int OrderPriority { get; private set; }
35+
public bool OverrideSelection { get { return true; } }
3536

3637
public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor)
3738
{

OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public PlaceBuildingOrderGenerator(ProductionQueue queue, string name)
3434
producer = queue.Actor;
3535
building = name;
3636

37+
// Clear selection if using Left-Click Orders
38+
if (Game.Settings.Game.UseClassicMouseStyle)
39+
producer.World.Selection.Clear();
40+
3741
var map = producer.World.Map;
3842
var tileset = producer.World.TileSet.Id.ToLowerInvariant();
3943
buildingInfo = map.Rules.Actors[building].Traits.Get<BuildingInfo>();

OpenRA.Mods.Common/Orders/UnitOrderTargeter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public UnitOrderTargeter(string order, int priority, string cursor, bool targetE
3131
public string OrderID { get; private set; }
3232
public int OrderPriority { get; private set; }
3333
public bool? ForceAttack = null;
34+
public bool OverrideSelection { get { return true; } }
3435

3536
public abstract bool CanTargetActor(Actor self, Actor target, TargetModifiers modifiers, ref string cursor);
3637
public abstract bool CanTargetFrozenActor(Actor self, FrozenActor target, TargetModifiers modifiers, ref string cursor);

OpenRA.Mods.Common/Traits/Air/Aircraft.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ class AircraftMoveOrderTargeter : IOrderTargeter
302302
{
303303
public string OrderID { get { return "Move"; } }
304304
public int OrderPriority { get { return 4; } }
305+
public bool OverrideSelection { get { return false; } }
305306

306307
readonly AircraftInfo info;
307308

OpenRA.Mods.Common/Traits/Attack/AttackBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ public AttackOrderTargeter(AttackBase ab, string order, int priority, bool negat
194194

195195
public string OrderID { get; private set; }
196196
public int OrderPriority { get; private set; }
197+
public bool OverrideSelection { get { return true; } }
197198

198199
bool CanTargetActor(Actor self, Target target, TargetModifiers modifiers, ref string cursor)
199200
{

OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class RallyPointOrderTargeter : IOrderTargeter
5656
{
5757
public string OrderID { get { return "SetRallyPoint"; } }
5858
public int OrderPriority { get { return 0; } }
59+
public bool OverrideSelection { get { return true; } }
5960

6061
public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor)
6162
{

OpenRA.Mods.Common/Traits/Harvester.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ class HarvestOrderTargeter : IOrderTargeter
445445
public string OrderID { get { return "Harvest"; } }
446446
public int OrderPriority { get { return 10; } }
447447
public bool IsQueued { get; protected set; }
448+
public bool OverrideSelection { get { return true; } }
448449

449450
public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor)
450451
{

OpenRA.Mods.Common/Traits/Mobile.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,7 @@ class MoveOrderTargeter : IOrderTargeter
619619
{
620620
readonly MobileInfo unitType;
621621
readonly bool rejectMove;
622+
public bool OverrideSelection { get { return false; } }
622623

623624
public MoveOrderTargeter(Actor self, MobileInfo unitType)
624625
{

OpenRA.Mods.Common/Traits/SupportPowers/GrantUpgradePower.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ class SelectTarget : IOrderGenerator
102102

103103
public SelectTarget(World world, string order, SupportPowerManager manager, GrantUpgradePower power)
104104
{
105+
// Clear selection if using Left-Click Orders
106+
if (Game.Settings.Game.UseClassicMouseStyle)
107+
manager.Self.World.Selection.Clear();
108+
105109
this.manager = manager;
106110
this.order = order;
107111
this.power = power;

OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,10 @@ public class SelectGenericPowerTarget : IOrderGenerator
239239

240240
public SelectGenericPowerTarget(string order, SupportPowerManager manager, string cursor, MouseButton button)
241241
{
242+
// Clear selection if using Left-Click Orders
243+
if (Game.Settings.Game.UseClassicMouseStyle)
244+
manager.Self.World.Selection.Clear();
245+
242246
this.manager = manager;
243247
this.order = order;
244248
this.cursor = cursor;

OpenRA.Mods.RA/Traits/Minelayer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ class BeginMinefieldOrderTargeter : IOrderTargeter
197197
{
198198
public string OrderID { get { return "BeginMinefield"; } }
199199
public int OrderPriority { get { return 5; } }
200+
public bool OverrideSelection { get { return true; } }
200201

201202
public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor)
202203
{

OpenRA.Mods.RA/Traits/PortableChrono.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ class PortableChronoOrderTargeter : IOrderTargeter
119119
public string OrderID { get { return "PortableChronoTeleport"; } }
120120
public int OrderPriority { get { return 5; } }
121121
public bool IsQueued { get; protected set; }
122+
public bool OverrideSelection { get { return true; } }
122123

123124
public bool CanTarget(Actor self, Target target, List<Actor> othersAtTarget, TargetModifiers modifiers, ref string cursor)
124125
{

OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ class SelectTarget : IOrderGenerator
101101

102102
public SelectTarget(World world, string order, SupportPowerManager manager, ChronoshiftPower power)
103103
{
104+
// Clear selection if using Left-Click Orders
105+
if (Game.Settings.Game.UseClassicMouseStyle)
106+
manager.Self.World.Selection.Clear();
107+
104108
this.manager = manager;
105109
this.order = order;
106110
this.power = power;

0 commit comments

Comments
 (0)