diff --git a/OpenRA.Game/Settings.cs b/OpenRA.Game/Settings.cs index 04f773e553..c6d932247a 100644 --- a/OpenRA.Game/Settings.cs +++ b/OpenRA.Game/Settings.cs @@ -190,6 +190,11 @@ namespace OpenRA public Hotkey SelectAllUnitsKey = new Hotkey(Keycode.Q, Modifiers.None); public Hotkey SelectUnitsByTypeKey = new Hotkey(Keycode.W, Modifiers.None); + public Hotkey MapScrollUp = new Hotkey(Keycode.UP, Modifiers.None); + public Hotkey MapScrollDown = new Hotkey(Keycode.DOWN, Modifiers.None); + public Hotkey MapScrollLeft = new Hotkey(Keycode.LEFT, Modifiers.None); + public Hotkey MapScrollRight = new Hotkey(Keycode.RIGHT, Modifiers.None); + public Hotkey PauseKey = new Hotkey(Keycode.PAUSE, Modifiers.None); public Hotkey PlaceBeaconKey = new Hotkey(Keycode.B, Modifiers.None); public Hotkey SellKey = new Hotkey(Keycode.Z, Modifiers.None); diff --git a/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs index 7c38cd2a4e..dbdbf26293 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/SettingsLogic.cs @@ -410,6 +410,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic { "ToggleStatusBarsKey", "Toggle status bars" }, { "TogglePixelDoubleKey", "Toggle pixel doubling" }, + + { "MapScrollUp", "Map scroll up" }, + { "MapScrollDown", "Map scroll down" }, + { "MapScrollLeft", "Map scroll left" }, + { "MapScrollRight", "Map scroll right" } }; var header = ScrollItemWidget.Setup(hotkeyHeader, returnTrue, doNothing); diff --git a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs index 6013d044a1..c0822e6f56 100644 --- a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs @@ -222,12 +222,31 @@ namespace OpenRA.Mods.Common.Widgets public override bool HandleKeyPress(KeyInput e) { - switch (e.Key) + var key = Hotkey.FromKeyInput(e); + var ks = Game.Settings.Keys; + + if (key == ks.MapScrollUp) { - case Keycode.UP: keyboardDirections = keyboardDirections.Set(ScrollDirection.Up, e.Event == KeyInputEvent.Down); return true; - case Keycode.DOWN: keyboardDirections = keyboardDirections.Set(ScrollDirection.Down, e.Event == KeyInputEvent.Down); return true; - case Keycode.LEFT: keyboardDirections = keyboardDirections.Set(ScrollDirection.Left, e.Event == KeyInputEvent.Down); return true; - case Keycode.RIGHT: keyboardDirections = keyboardDirections.Set(ScrollDirection.Right, e.Event == KeyInputEvent.Down); return true; + keyboardDirections = keyboardDirections.Set(ScrollDirection.Up, e.Event == KeyInputEvent.Down); + return true; + } + + if (key == ks.MapScrollDown) + { + keyboardDirections = keyboardDirections.Set(ScrollDirection.Down, e.Event == KeyInputEvent.Down); + return true; + } + + if (key == ks.MapScrollLeft) + { + keyboardDirections = keyboardDirections.Set(ScrollDirection.Left, e.Event == KeyInputEvent.Down); + return true; + } + + if (key == ks.MapScrollRight) + { + keyboardDirections = keyboardDirections.Set(ScrollDirection.Right, e.Event == KeyInputEvent.Down); + return true; } return false;