Migrate hotkey consumers to HotkeyManager.

This commit is contained in:
Paul Chote
2017-10-28 09:12:54 +01:00
committed by abcdefg30
parent 35a3df3736
commit 2f79173044
21 changed files with 51 additions and 64 deletions

View File

@@ -275,7 +275,7 @@ namespace OpenRA
}
else if (fieldType == typeof(HotkeyReference))
{
return new HotkeyReference(value, Game.Settings.Keys);
return Game.ModData.Hotkeys[value];
}
else if (fieldType == typeof(WDist))
{

View File

@@ -32,20 +32,6 @@ namespace OpenRA
this.getValue = getValue;
}
public HotkeyReference(string name, KeySettings settings)
{
// Try parsing the value as a reference to a named hotkey
getValue = settings.GetHotkeyReference(name);
if (getValue == null)
{
// Try parsing the value as a normal (static) hotkey
var staticKey = Hotkey.Invalid;
Hotkey.TryParse(name, out staticKey);
getValue = () => staticKey;
}
}
public Hotkey GetValue()
{
return getValue();

View File

@@ -23,12 +23,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public class MapEditorLogic : ChromeLogic
{
[ObjectCreator.UseCtor]
public MapEditorLogic(Widget widget, World world, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
public MapEditorLogic(Widget widget, ModData modData, World world, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
{
MiniYaml yaml;
var changeZoomKey = new HotkeyReference();
if (logicArgs.TryGetValue("ChangeZoomKey", out yaml))
changeZoomKey = new HotkeyReference(yaml.Value, Game.Settings.Keys);
changeZoomKey = modData.Hotkeys[yaml.Value];
var editorViewport = widget.Get<EditorViewportControllerWidget>("MAP_EDITOR");

View File

@@ -27,8 +27,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
readonly World world;
[ObjectCreator.UseCtor]
public CycleBasesHotkeyLogic(Widget widget, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "CycleBasesKey", "WORLD_KEYHANDLER", logicArgs)
public CycleBasesHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "CycleBasesKey", "WORLD_KEYHANDLER", logicArgs)
{
viewport = worldRenderer.Viewport;
selection = world.Selection;

View File

@@ -26,8 +26,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
readonly World world;
[ObjectCreator.UseCtor]
public CycleProductionActorsHotkeyLogic(Widget widget, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "CycleProductionActorsKey", "WORLD_KEYHANDLER", logicArgs)
public CycleProductionActorsHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "CycleProductionActorsKey", "WORLD_KEYHANDLER", logicArgs)
{
viewport = worldRenderer.Viewport;
selection = world.Selection;

View File

@@ -22,8 +22,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
StatusBarsType[] options = { StatusBarsType.Standard, StatusBarsType.DamageShow, StatusBarsType.AlwaysShow };
[ObjectCreator.UseCtor]
public CycleStatusBarsHotkeyLogic(Widget widget, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "CycleStatusBarsKey", "WORLD_KEYHANDLER", logicArgs) { }
public CycleStatusBarsHotkeyLogic(Widget widget, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "CycleStatusBarsKey", "WORLD_KEYHANDLER", logicArgs) { }
protected override bool OnHotkeyActivated(KeyInput e)
{

View File

@@ -24,8 +24,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
readonly RadarPings radarPings;
[ObjectCreator.UseCtor]
public JumpToLastEventHotkeyLogic(Widget widget, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "JumpToLastEventKey", "WORLD_KEYHANDLER", logicArgs)
public JumpToLastEventHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "JumpToLastEventKey", "WORLD_KEYHANDLER", logicArgs)
{
viewport = worldRenderer.Viewport;
radarPings = world.WorldActor.TraitOrDefault<RadarPings>();

View File

@@ -23,8 +23,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
readonly Selection selection;
[ObjectCreator.UseCtor]
public JumpToSelectedActorsHotkeyLogic(Widget widget, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "JumpToSelectedActorsKey", "WORLD_KEYHANDLER", logicArgs)
public JumpToSelectedActorsHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "JumpToSelectedActorsKey", "WORLD_KEYHANDLER", logicArgs)
{
viewport = worldRenderer.Viewport;
selection = world.Selection;

View File

@@ -22,8 +22,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
readonly World world;
[ObjectCreator.UseCtor]
public PauseHotkeyLogic(Widget widget, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "PauseKey", "WORLD_KEYHANDLER", logicArgs)
public PauseHotkeyLogic(Widget widget, ModData modData, World world, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "PauseKey", "WORLD_KEYHANDLER", logicArgs)
{
this.world = world;
}

View File

@@ -22,8 +22,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
readonly Viewport viewport;
[ObjectCreator.UseCtor]
public TogglePixelDoubleHotkeyLogic(Widget widget, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "TogglePixelDoubleKey", "WORLD_KEYHANDLER", logicArgs)
public TogglePixelDoubleHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "TogglePixelDoubleKey", "WORLD_KEYHANDLER", logicArgs)
{
viewport = worldRenderer.Viewport;
}

View File

@@ -20,8 +20,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
public class TogglePlayerStanceColorHotkeyLogic : SingleHotkeyBaseLogic
{
[ObjectCreator.UseCtor]
public TogglePlayerStanceColorHotkeyLogic(Widget widget, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "TogglePlayerStanceColorKey", "WORLD_KEYHANDLER", logicArgs) { }
public TogglePlayerStanceColorHotkeyLogic(Widget widget, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "TogglePlayerStanceColorKey", "WORLD_KEYHANDLER", logicArgs) { }
protected override bool OnHotkeyActivated(KeyInput e)
{

View File

@@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Widget currentWidget;
[ObjectCreator.UseCtor]
public MenuButtonsChromeLogic(Widget widget, World world, Dictionary<string, MiniYaml> logicArgs)
public MenuButtonsChromeLogic(Widget widget, ModData modData, World world, Dictionary<string, MiniYaml> logicArgs)
{
this.world = world;
@@ -36,11 +36,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
menuRoot = Ui.Root.Get("MENU_ROOT");
MiniYaml yaml;
var ks = Game.Settings.Keys;
string[] keyNames = Enum.GetNames(typeof(ObserverStatsPanel));
var statsHotkeys = new HotkeyReference[keyNames.Length];
for (var i = 0; i < keyNames.Length; i++)
statsHotkeys[i] = logicArgs.TryGetValue("Statistics" + keyNames[i] + "Key", out yaml) ? new HotkeyReference(yaml.Value, ks) : new HotkeyReference();
statsHotkeys[i] = logicArgs.TryGetValue("Statistics" + keyNames[i] + "Key", out yaml) ? modData.Hotkeys[yaml.Value] : new HotkeyReference();
// System buttons
var options = widget.GetOrNull<MenuButtonWidget>("OPTIONS_BUTTON");

View File

@@ -62,15 +62,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}
[ObjectCreator.UseCtor]
public ObserverShroudSelectorLogic(Widget widget, World world, Dictionary<string, MiniYaml> logicArgs)
public ObserverShroudSelectorLogic(Widget widget, ModData modData, World world, Dictionary<string, MiniYaml> logicArgs)
{
MiniYaml yaml;
var ks = Game.Settings.Keys;
if (logicArgs.TryGetValue("CombinedViewKey", out yaml))
combinedViewKey = new HotkeyReference(yaml.Value, ks);
combinedViewKey = modData.Hotkeys[yaml.Value];
if (logicArgs.TryGetValue("WorldViewKey", out yaml))
worldViewKey = new HotkeyReference(yaml.Value, ks);
worldViewKey = modData.Hotkeys[yaml.Value];
limitViews = world.Map.Visibility.HasFlag(MapVisibility.MissionSelector);

View File

@@ -44,17 +44,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor]
public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget, Action onExit, ObserverStatsPanel activePanel, Dictionary<string, MiniYaml> logicArgs)
public ObserverStatsLogic(World world, ModData modData, WorldRenderer worldRenderer, Widget widget,
Action onExit, ObserverStatsPanel activePanel, Dictionary<string, MiniYaml> logicArgs)
{
this.world = world;
this.worldRenderer = worldRenderer;
MiniYaml yaml;
var ks = Game.Settings.Keys;
string[] keyNames = Enum.GetNames(typeof(ObserverStatsPanel));
var statsHotkeys = new HotkeyReference[keyNames.Length];
for (var i = 0; i < keyNames.Length; i++)
statsHotkeys[i] = logicArgs.TryGetValue("Statistics" + keyNames[i] + "Key", out yaml) ? new HotkeyReference(yaml.Value, ks) : new HotkeyReference();
statsHotkeys[i] = logicArgs.TryGetValue("Statistics" + keyNames[i] + "Key", out yaml) ? modData.Hotkeys[yaml.Value] : new HotkeyReference();
players = world.Players.Where(p => !p.NonCombatant);

View File

@@ -22,28 +22,26 @@ namespace OpenRA.Mods.Common.Widgets.Logic
readonly MusicPlaylist musicPlaylist;
[ObjectCreator.UseCtor]
public MusicHotkeyLogic(Widget widget, World world, Dictionary<string, MiniYaml> logicArgs)
public MusicHotkeyLogic(Widget widget, ModData modData, World world, Dictionary<string, MiniYaml> logicArgs)
{
musicPlaylist = world.WorldActor.Trait<MusicPlaylist>();
var ks = Game.Settings.Keys;
MiniYaml yaml;
var stopKey = new HotkeyReference();
if (logicArgs.TryGetValue("StopMusicKey", out yaml))
stopKey = new HotkeyReference(yaml.Value, ks);
stopKey = modData.Hotkeys[yaml.Value];
var pauseKey = new HotkeyReference();
if (logicArgs.TryGetValue("PauseMusicKey", out yaml))
pauseKey = new HotkeyReference(yaml.Value, ks);
pauseKey = modData.Hotkeys[yaml.Value];
var prevKey = new HotkeyReference();
if (logicArgs.TryGetValue("PrevMusicKey", out yaml))
prevKey = new HotkeyReference(yaml.Value, ks);
prevKey = modData.Hotkeys[yaml.Value];
var nextKey = new HotkeyReference();
if (logicArgs.TryGetValue("NextMusicKey", out yaml))
nextKey = new HotkeyReference(yaml.Value, ks);
nextKey = modData.Hotkeys[yaml.Value];
var keyhandler = widget.Get<LogicKeyListenerWidget>("GLOBAL_KEYHANDLER");
keyhandler.AddHandler(e =>

View File

@@ -20,8 +20,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public class MuteHotkeyLogic : SingleHotkeyBaseLogic
{
[ObjectCreator.UseCtor]
public MuteHotkeyLogic(Widget widget, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "MuteAudioKey", "GLOBAL_KEYHANDLER", logicArgs) { }
public MuteHotkeyLogic(Widget widget, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "MuteAudioKey", "GLOBAL_KEYHANDLER", logicArgs) { }
protected override bool OnHotkeyActivated(KeyInput e)
{

View File

@@ -19,8 +19,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public class ScreenshotHotkeyLogic : SingleHotkeyBaseLogic
{
[ObjectCreator.UseCtor]
public ScreenshotHotkeyLogic(Widget widget, Dictionary<string, MiniYaml> logicArgs)
: base(widget, "TakeScreenshotKey", "GLOBAL_KEYHANDLER", logicArgs) { }
public ScreenshotHotkeyLogic(Widget widget, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "TakeScreenshotKey", "GLOBAL_KEYHANDLER", logicArgs) { }
protected override bool OnHotkeyActivated(KeyInput e)
{

View File

@@ -17,14 +17,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{
public abstract class SingleHotkeyBaseLogic : ChromeLogic
{
protected SingleHotkeyBaseLogic(Widget widget, string argName, string parentName, Dictionary<string, MiniYaml> logicArgs)
protected SingleHotkeyBaseLogic(Widget widget, ModData modData, string argName, string parentName, Dictionary<string, MiniYaml> logicArgs)
{
var ks = Game.Settings.Keys;
MiniYaml yaml;
var namedKey = new HotkeyReference();
if (logicArgs.TryGetValue(argName, out yaml))
namedKey = new HotkeyReference(yaml.Value, ks);
namedKey = modData.Hotkeys[yaml.Value];
var keyhandler = widget.Get<LogicKeyListenerWidget>(parentName);
keyhandler.AddHandler(e =>

View File

@@ -76,6 +76,7 @@ namespace OpenRA.Mods.Common.Widgets
public ProductionIcon TooltipIcon { get; private set; }
public Func<ProductionIcon> GetTooltipIcon;
public readonly World World;
readonly ModData modData;
readonly OrderManager orderManager;
public int MinimumRows = 4;
@@ -127,8 +128,9 @@ namespace OpenRA.Mods.Common.Widgets
}
[ObjectCreator.UseCtor]
public ProductionPaletteWidget(OrderManager orderManager, World world, WorldRenderer worldRenderer)
public ProductionPaletteWidget(ModData modData, OrderManager orderManager, World world, WorldRenderer worldRenderer)
{
this.modData = modData;
this.orderManager = orderManager;
World = world;
this.worldRenderer = worldRenderer;
@@ -146,7 +148,7 @@ namespace OpenRA.Mods.Common.Widgets
base.Initialize(args);
hotkeys = Exts.MakeArray(HotkeyCount,
i => new HotkeyReference(HotkeyPrefix + (i + 1).ToString("D2"), Game.Settings.Keys));
i => modData.Hotkeys[HotkeyPrefix + (i + 1).ToString("D2")]);
}
public void ScrollDown()

View File

@@ -43,6 +43,7 @@ namespace OpenRA.Mods.Common.Widgets
public int IconCount { get; private set; }
public event Action<int, int> OnIconCountChanged = (a, b) => { };
readonly ModData modData;
readonly WorldRenderer worldRenderer;
readonly SupportPowerManager spm;
@@ -82,8 +83,9 @@ namespace OpenRA.Mods.Common.Widgets
}
[ObjectCreator.UseCtor]
public SupportPowersWidget(World world, WorldRenderer worldRenderer)
public SupportPowersWidget(ModData modData, World world, WorldRenderer worldRenderer)
{
this.modData = modData;
this.worldRenderer = worldRenderer;
spm = world.LocalPlayer.PlayerActor.Trait<SupportPowerManager>();
tooltipContainer = Exts.Lazy(() =>
@@ -98,7 +100,7 @@ namespace OpenRA.Mods.Common.Widgets
base.Initialize(args);
hotkeys = Exts.MakeArray(HotkeyCount,
i => new HotkeyReference(HotkeyPrefix + (i + 1).ToString("D2"), Game.Settings.Keys));
i => modData.Hotkeys[HotkeyPrefix + (i + 1).ToString("D2")]);
}
public class SupportPowerIcon

View File

@@ -24,6 +24,7 @@ namespace OpenRA.Mods.Common.Widgets
public class ViewportControllerWidget : Widget
{
readonly ModData modData;
readonly ResourceLayer resourceLayer;
public readonly HotkeyReference ScrollUpKey = new HotkeyReference();
@@ -132,8 +133,9 @@ namespace OpenRA.Mods.Common.Widgets
}
[ObjectCreator.UseCtor]
public ViewportControllerWidget(World world, WorldRenderer worldRenderer)
public ViewportControllerWidget(ModData modData, World world, WorldRenderer worldRenderer)
{
this.modData = modData;
this.world = world;
this.worldRenderer = worldRenderer;
tooltipContainer = Exts.Lazy(() =>
@@ -147,10 +149,10 @@ namespace OpenRA.Mods.Common.Widgets
base.Initialize(args);
saveBookmarkHotkeys = Exts.MakeArray(BookmarkKeyCount,
i => new HotkeyReference(BookmarkSaveKeyPrefix + (i + 1).ToString("D2"), Game.Settings.Keys));
i => modData.Hotkeys[BookmarkSaveKeyPrefix + (i + 1).ToString("D2")]);
restoreBookmarkHotkeys = Exts.MakeArray(BookmarkKeyCount,
i => new HotkeyReference(BookmarkRestoreKeyPrefix + (i + 1).ToString("D2"), Game.Settings.Keys));
i => modData.Hotkeys[BookmarkRestoreKeyPrefix + (i + 1).ToString("D2")]);
bookmarkPositions = new WPos?[BookmarkKeyCount];
}