diff --git a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs index 9b2d5b83e9..fc7d673431 100644 --- a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs +++ b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs @@ -198,13 +198,7 @@ namespace OpenRA.Widgets { if (e.Event == KeyInputEvent.Down) { - if (e.Key >= Keycode.NUMBER_0 && e.Key <= Keycode.NUMBER_9) - { - var group = (int)e.Key - (int)Keycode.NUMBER_0; - World.Selection.DoControlGroup(World, worldRenderer, group, e.Modifiers, e.MultiTapCount); - return true; - } - else if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.PauseKey && World.LocalPlayer != null) // Disable pausing for spectators + if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.PauseKey && World.LocalPlayer != null) // Disable pausing for spectators World.SetPauseState(!World.Paused); else if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.SelectAllUnitsKey) { diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 29356da817..751ef99f70 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -490,6 +490,7 @@ + diff --git a/OpenRA.Mods.RA/Widgets/Logic/ControlGroupLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ControlGroupLogic.cs new file mode 100644 index 0000000000..09353fd932 --- /dev/null +++ b/OpenRA.Mods.RA/Widgets/Logic/ControlGroupLogic.cs @@ -0,0 +1,35 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 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 OpenRA.Graphics; +using OpenRA.Widgets; + +namespace OpenRA.Mods.RA.Widgets.Logic +{ + public class ControlGroupLogic + { + [ObjectCreator.UseCtor] + public ControlGroupLogic(Widget widget, World world, WorldRenderer worldRenderer) + { + var keyhandler = widget.Get("CONTROLGROUP_KEYHANDLER"); + keyhandler.OnKeyPress = e => + { + if (e.Key >= Keycode.NUMBER_0 && e.Key <= Keycode.NUMBER_9) + { + var group = (int)e.Key - (int)Keycode.NUMBER_0; + world.Selection.DoControlGroup(world, worldRenderer, group, e.Modifiers, e.MultiTapCount); + return true; + } + + return false; + }; + } + } +} diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 7a98ec4073..6869282c68 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -175,6 +175,8 @@ Container@OBSERVER_WIDGETS: Container@PLAYER_WIDGETS: Children: + LogicKeyListener@CONTROLGROUP_KEYHANDLER: + Logic:ControlGroupLogic LogicTicker@SIDEBAR_TICKER: WorldCommand: Width:WINDOW_RIGHT diff --git a/mods/d2k/chrome/ingame-player.yaml b/mods/d2k/chrome/ingame-player.yaml index 2d4731e64f..b4b2c54a68 100644 --- a/mods/d2k/chrome/ingame-player.yaml +++ b/mods/d2k/chrome/ingame-player.yaml @@ -1,5 +1,7 @@ Container@PLAYER_WIDGETS: Children: + LogicKeyListener@CONTROLGROUP_KEYHANDLER: + Logic:ControlGroupLogic LogicTicker@SIDEBAR_TICKER: Button@INGAME_DIPLOMACY_BUTTON: X:162 diff --git a/mods/ra/chrome/ingame-player.yaml b/mods/ra/chrome/ingame-player.yaml index 7f1313dddb..e50f119644 100644 --- a/mods/ra/chrome/ingame-player.yaml +++ b/mods/ra/chrome/ingame-player.yaml @@ -1,5 +1,7 @@ Container@PLAYER_WIDGETS: Children: + LogicKeyListener@CONTROLGROUP_KEYHANDLER: + Logic:ControlGroupLogic LogicTicker@SIDEBAR_TICKER: Button@INGAME_DIPLOMACY_BUTTON: X:162