Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more map editor hotkeys #20029

Merged
merged 3 commits into from Jun 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
61 changes: 0 additions & 61 deletions OpenRA.Mods.Common/Widgets/Logic/Editor/MapEditorLogic.cs
Expand Up @@ -11,26 +11,15 @@

using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Lint;
using OpenRA.Mods.Common.Traits;
using OpenRA.Widgets;

namespace OpenRA.Mods.Common.Widgets.Logic
{
[ChromeLogicArgsHotkeys("ChangeZoomKey")]
public class MapEditorLogic : ChromeLogic
{
MapCopyFilters copyFilters = MapCopyFilters.All;

enum MapOverlays
{
None = 0,
Grid = 1,
Buildable = 2,
}

MapOverlays overlays = MapOverlays.None;

[ObjectCreator.UseCtor]
public MapEditorLogic(Widget widget, World world, WorldRenderer worldRenderer)
{
Expand Down Expand Up @@ -63,16 +52,6 @@ public MapEditorLogic(Widget widget, World world, WorldRenderer worldRenderer)
};
}

var overlayDropdown = widget.GetOrNull<DropDownButtonWidget>("OVERLAY_BUTTON");
if (overlayDropdown != null)
{
overlayDropdown.OnMouseDown = _ =>
{
overlayDropdown.RemovePanel();
overlayDropdown.AttachPanel(CreateOverlaysPanel(world));
};
}

var cashLabel = widget.GetOrNull<LabelWidget>("CASH_LABEL");
if (cashLabel != null)
{
Expand Down Expand Up @@ -112,45 +91,5 @@ Widget CreateCategoriesPanel()

return categoriesPanel;
}

Widget CreateOverlaysPanel(World world)
{
var categoriesPanel = Ui.LoadWidget("OVERLAY_PANEL", null, new WidgetArgs());
var categoryTemplate = categoriesPanel.Get<CheckboxWidget>("CATEGORY_TEMPLATE");

MapOverlays[] allCategories = { MapOverlays.Grid, MapOverlays.Buildable };
foreach (var cat in allCategories)
{
var category = (CheckboxWidget)categoryTemplate.Clone();
category.GetText = () => cat.ToString();
category.IsChecked = () => overlays.HasFlag(cat);
category.IsVisible = () => true;
category.OnClick = () => overlays ^= cat;

if (cat.HasFlag(MapOverlays.Grid))
{
var terrainGeometryTrait = world.WorldActor.Trait<TerrainGeometryOverlay>();
category.OnClick = () =>
{
overlays ^= cat;
terrainGeometryTrait.Enabled = overlays.HasFlag(MapOverlays.Grid);
};
}

if (cat.HasFlag(MapOverlays.Buildable))
{
var buildableTerrainTrait = world.WorldActor.Trait<BuildableTerrainOverlay>();
category.OnClick = () =>
{
overlays ^= cat;
buildableTerrainTrait.Enabled = overlays.HasFlag(MapOverlays.Buildable);
};
}

categoriesPanel.AddChild(category);
}

return categoriesPanel;
}
}
}
109 changes: 109 additions & 0 deletions OpenRA.Mods.Common/Widgets/Logic/Editor/MapOverlaysLogic.cs
@@ -0,0 +1,109 @@
#region Copyright & License Information
/*
* Copyright 2007-2022 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, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion

using System.Collections.Generic;
using OpenRA.Mods.Common.Lint;
using OpenRA.Mods.Common.Traits;
using OpenRA.Widgets;

namespace OpenRA.Mods.Common.Widgets.Logic
{
[ChromeLogicArgsHotkeys("ToggleGridOverlayKey", "ToggleBuildableOverlayKey")]
public class MapOverlaysLogic : ChromeLogic
{
enum MapOverlays
{
None = 0,
Grid = 1,
Buildable = 2,
}

readonly TerrainGeometryOverlay terrainGeometryTrait;
readonly BuildableTerrainOverlay buildableTerrainTrait;

[ObjectCreator.UseCtor]
public MapOverlaysLogic(Widget widget, World world, ModData modData, Dictionary<string, MiniYaml> logicArgs)
{
terrainGeometryTrait = world.WorldActor.Trait<TerrainGeometryOverlay>();
buildableTerrainTrait = world.WorldActor.Trait<BuildableTerrainOverlay>();

var toggleGridKey = new HotkeyReference();
if (logicArgs.TryGetValue("ToggleGridOverlayKey", out var yaml))
toggleGridKey = modData.Hotkeys[yaml.Value];

var toggleBuildableKey = new HotkeyReference();
if (logicArgs.TryGetValue("ToggleBuildableOverlayKey", out yaml))
toggleBuildableKey = modData.Hotkeys[yaml.Value];

var keyhandler = widget.Get<LogicKeyListenerWidget>("OVERLAY_KEYHANDLER");
keyhandler.AddHandler(e =>
{
if (e.Event != KeyInputEvent.Down)
return false;

if (toggleGridKey.IsActivatedBy(e))
{
terrainGeometryTrait.Enabled ^= true;
return true;
}

if (toggleBuildableKey.IsActivatedBy(e))
{
buildableTerrainTrait.Enabled ^= true;
return true;
}

return false;
});

var overlayPanel = CreateOverlaysPanel();

var overlayDropdown = widget.GetOrNull<DropDownButtonWidget>("OVERLAY_BUTTON");
if (overlayDropdown != null)
{
overlayDropdown.OnMouseDown = _ =>
{
overlayDropdown.RemovePanel();
overlayDropdown.AttachPanel(overlayPanel);
};
}
}

Widget CreateOverlaysPanel()
{
var categoriesPanel = Ui.LoadWidget("OVERLAY_PANEL", null, new WidgetArgs());
var categoryTemplate = categoriesPanel.Get<CheckboxWidget>("CATEGORY_TEMPLATE");

MapOverlays[] allCategories = { MapOverlays.Grid, MapOverlays.Buildable };
foreach (var cat in allCategories)
{
var category = (CheckboxWidget)categoryTemplate.Clone();
category.GetText = () => cat.ToString();
category.IsVisible = () => true;

if (cat.HasFlag(MapOverlays.Grid))
{
category.IsChecked = () => terrainGeometryTrait.Enabled;
category.OnClick = () => terrainGeometryTrait.Enabled ^= true;
}
else if (cat.HasFlag(MapOverlays.Buildable))
{
category.IsChecked = () => buildableTerrainTrait.Enabled;
category.OnClick = () => buildableTerrainTrait.Enabled ^= true;
}

categoriesPanel.AddChild(category);
}

return categoriesPanel;
}
}
}
22 changes: 20 additions & 2 deletions mods/cnc/chrome/editor.yaml
Expand Up @@ -212,9 +212,11 @@ Container@EDITOR_ROOT:
TooltipContainer@TOOLTIP_CONTAINER:

Container@EDITOR_WORLD_ROOT:
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic
EditPanelPadding: 5
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic, MapOverlaysLogic
ToggleGridOverlayKey: EditorToggleGridOverlay
ToggleBuildableOverlayKey: EditorToggleBuildableOverlay
Children:
LogicKeyListener@OVERLAY_KEYHANDLER:
Container@PERF_ROOT:
EditorViewportController@MAP_EDITOR:
Width: WINDOW_RIGHT
Expand Down Expand Up @@ -566,24 +568,40 @@ Container@EDITOR_WORLD_ROOT:
Height: 25
Text: Tiles
Font: Bold
Key: EditorTilesTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: Tiles
TooltipContainer: TOOLTIP_CONTAINER
Button@OVERLAYS_TAB:
X: 70
Width: 80
Height: 25
Text: Overlays
Font: Bold
Key: EditorOverlaysTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: Overlays
TooltipContainer: TOOLTIP_CONTAINER
Button@ACTORS_TAB:
X: 149
Width: 71
Height: 25
Text: Actors
Font: Bold
Key: EditorActorsTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: Actors
TooltipContainer: TOOLTIP_CONTAINER
Button@HISTORY_TAB:
X: 219
Width: 71
Height: 25
Text: History
Font: Bold
Key: EditorHistoryTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: History
TooltipContainer: TOOLTIP_CONTAINER
Button@UNDO_BUTTON:
X: WINDOW_RIGHT - 800
Y: 5
Expand Down
22 changes: 20 additions & 2 deletions mods/common/chrome/editor.yaml
Expand Up @@ -203,9 +203,11 @@ Container@EDITOR_ROOT:
TooltipContainer@TOOLTIP_CONTAINER:

Container@EDITOR_WORLD_ROOT:
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic
EditPanelPadding: 14
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic, MapOverlaysLogic
ToggleGridOverlayKey: EditorToggleGridOverlay
ToggleBuildableOverlayKey: EditorToggleBuildableOverlay
Children:
LogicKeyListener@OVERLAY_KEYHANDLER:
Container@PERF_ROOT:
EditorViewportController@MAP_EDITOR:
Width: WINDOW_RIGHT
Expand Down Expand Up @@ -534,24 +536,40 @@ Container@EDITOR_WORLD_ROOT:
Height: 25
Text: Tiles
Font: Bold
Key: EditorTilesTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: Tiles
TooltipContainer: TOOLTIP_CONTAINER
Button@OVERLAYS_TAB:
X: 70
Width: 90
Height: 25
Text: Overlays
Font: Bold
Key: EditorOverlaysTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: Overlays
TooltipContainer: TOOLTIP_CONTAINER
Button@ACTORS_TAB:
X: 160
Width: 70
Height: 25
Text: Actors
Font: Bold
Key: EditorActorsTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: Actors
TooltipContainer: TOOLTIP_CONTAINER
Button@HISTORY_TAB:
X: 230
Width: 70
Height: 25
Text: History
Font: Bold
Key: EditorHistoryTab
TooltipTemplate: BUTTON_TOOLTIP
TooltipText: History
TooltipContainer: TOOLTIP_CONTAINER
MenuButton@OPTIONS_BUTTON:
Logic: MenuButtonsChromeLogic
MenuContainer: INGAME_MENU
Expand Down
30 changes: 30 additions & 0 deletions mods/common/hotkeys/editor.yaml
Expand Up @@ -19,3 +19,33 @@ EditorCopy: C Ctrl
Contexts: Editor
Platform:
OSX: C Meta

EditorTilesTab: E
Description: Tiles Tab
Types: Editor
Contexts: Editor

EditorOverlaysTab: R
Description: Overlays Tab
Types: Editor
Contexts: Editor

EditorActorsTab: T
Description: Actors Tab
Types: Editor
Contexts: Editor

EditorHistoryTab: Y
Description: History Tab
Types: Editor
Contexts: Editor

EditorToggleGridOverlay: F1
Description: Grid Overlay
Types: Editor
Contexts: Editor

EditorToggleBuildableOverlay: F2
Description: Buildable Terrain Overlay
Types: Editor
Contexts: Editor