Implement new viewport size/zoom UI.
This commit is contained in:
@@ -673,7 +673,10 @@ namespace OpenRA
|
|||||||
|
|
||||||
// World rendering is disabled while the loading screen is displayed
|
// World rendering is disabled while the loading screen is displayed
|
||||||
if (worldRenderer != null && !worldRenderer.World.IsLoadingGameSave)
|
if (worldRenderer != null && !worldRenderer.World.IsLoadingGameSave)
|
||||||
|
{
|
||||||
|
worldRenderer.Viewport.Tick();
|
||||||
worldRenderer.PrepareRenderables();
|
worldRenderer.PrepareRenderables();
|
||||||
|
}
|
||||||
|
|
||||||
Ui.PrepareRenderables();
|
Ui.PrepareRenderables();
|
||||||
Renderer.WorldModelRenderer.EndFrame();
|
Renderer.WorldModelRenderer.EndFrame();
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ namespace OpenRA.Graphics
|
|||||||
public class Viewport
|
public class Viewport
|
||||||
{
|
{
|
||||||
readonly WorldRenderer worldRenderer;
|
readonly WorldRenderer worldRenderer;
|
||||||
|
readonly WorldViewportSizes viewportSizes;
|
||||||
|
readonly GraphicSettings graphicSettings;
|
||||||
|
|
||||||
// Map bounds (world-px)
|
// Map bounds (world-px)
|
||||||
readonly Rectangle mapBounds;
|
readonly Rectangle mapBounds;
|
||||||
@@ -55,14 +57,16 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
ProjectedCellRegion allCells;
|
ProjectedCellRegion allCells;
|
||||||
bool allCellsDirty = true;
|
bool allCellsDirty = true;
|
||||||
readonly float[] availableZoomSteps = new[] { 2f, 1f, 0.5f, 0.25f };
|
|
||||||
|
WorldViewport lastViewportDistance;
|
||||||
|
|
||||||
float zoom = 1f;
|
float zoom = 1f;
|
||||||
|
float minZoom = 1f;
|
||||||
|
float maxZoom = 2f;
|
||||||
|
|
||||||
public float[] AvailableZoomSteps
|
bool unlockMinZoom;
|
||||||
{
|
float unlockedMinZoomScale;
|
||||||
get { return availableZoomSteps; }
|
float unlockedMinZoom = 1f;
|
||||||
}
|
|
||||||
|
|
||||||
public float Zoom
|
public float Zoom
|
||||||
{
|
{
|
||||||
@@ -71,16 +75,37 @@ namespace OpenRA.Graphics
|
|||||||
return zoom;
|
return zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
set
|
private set
|
||||||
{
|
{
|
||||||
var newValue = ClosestTo(AvailableZoomSteps, value);
|
zoom = value;
|
||||||
zoom = newValue;
|
|
||||||
viewportSize = (1f / zoom * new float2(Game.Renderer.Resolution)).ToInt2();
|
viewportSize = (1f / zoom * new float2(Game.Renderer.Resolution)).ToInt2();
|
||||||
cellsDirty = true;
|
cellsDirty = true;
|
||||||
allCellsDirty = true;
|
allCellsDirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AdjustZoom(float dz)
|
||||||
|
{
|
||||||
|
// Exponential ensures that equal positive and negative steps have the same effect
|
||||||
|
Zoom = (zoom * (float)Math.Exp(dz)).Clamp(unlockMinZoom ? unlockedMinZoom : minZoom, maxZoom);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ToggleZoom()
|
||||||
|
{
|
||||||
|
// Unlocked zooms always reset to the default zoom
|
||||||
|
if (zoom < minZoom)
|
||||||
|
Zoom = minZoom;
|
||||||
|
else
|
||||||
|
Zoom = zoom > minZoom ? minZoom : maxZoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UnlockMinimumZoom(float scale)
|
||||||
|
{
|
||||||
|
unlockMinZoom = true;
|
||||||
|
unlockedMinZoomScale = scale;
|
||||||
|
UpdateViewportZooms(false);
|
||||||
|
}
|
||||||
|
|
||||||
public static long LastMoveRunTime = 0;
|
public static long LastMoveRunTime = 0;
|
||||||
public static int2 LastMousePos;
|
public static int2 LastMousePos;
|
||||||
|
|
||||||
@@ -120,6 +145,8 @@ namespace OpenRA.Graphics
|
|||||||
{
|
{
|
||||||
worldRenderer = wr;
|
worldRenderer = wr;
|
||||||
var grid = Game.ModData.Manifest.Get<MapGrid>();
|
var grid = Game.ModData.Manifest.Get<MapGrid>();
|
||||||
|
viewportSizes = Game.ModData.Manifest.Get<WorldViewportSizes>();
|
||||||
|
graphicSettings = Game.Settings.Graphics;
|
||||||
|
|
||||||
// Calculate map bounds in world-px
|
// Calculate map bounds in world-px
|
||||||
if (wr.World.Type == WorldType.Editor)
|
if (wr.World.Type == WorldType.Editor)
|
||||||
@@ -141,8 +168,75 @@ namespace OpenRA.Graphics
|
|||||||
CenterLocation = (tl + br) / 2;
|
CenterLocation = (tl + br) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
Zoom = Game.Settings.Graphics.PixelDouble ? 2 : 1;
|
|
||||||
tileSize = grid.TileSize;
|
tileSize = grid.TileSize;
|
||||||
|
|
||||||
|
UpdateViewportZooms();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Tick()
|
||||||
|
{
|
||||||
|
if (lastViewportDistance != graphicSettings.ViewportDistance)
|
||||||
|
UpdateViewportZooms();
|
||||||
|
}
|
||||||
|
|
||||||
|
float CalculateMinimumZoom(float minHeight, float maxHeight)
|
||||||
|
{
|
||||||
|
var h = Game.Renderer.Resolution.Height;
|
||||||
|
|
||||||
|
// Check the easy case: the native resolution is within the maximum limit
|
||||||
|
// Also catches the case where the user may force a resolution smaller than the minimum window size
|
||||||
|
if (h <= maxHeight)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
// Find a clean fraction that brings us within the desired range to reduce aliasing
|
||||||
|
var step = 1f;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var testZoom = 1f;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var nextZoom = testZoom + step;
|
||||||
|
if (h < minHeight * nextZoom)
|
||||||
|
break;
|
||||||
|
|
||||||
|
testZoom = nextZoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (h < maxHeight * testZoom)
|
||||||
|
return testZoom;
|
||||||
|
|
||||||
|
step /= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateViewportZooms(bool resetCurrentZoom = true)
|
||||||
|
{
|
||||||
|
lastViewportDistance = graphicSettings.ViewportDistance;
|
||||||
|
|
||||||
|
var vd = graphicSettings.ViewportDistance;
|
||||||
|
if (viewportSizes.AllowNativeZoom && vd == WorldViewport.Native)
|
||||||
|
minZoom = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var range = viewportSizes.GetSizeRange(vd);
|
||||||
|
minZoom = CalculateMinimumZoom(range.X, range.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
maxZoom = Math.Min(minZoom * viewportSizes.MaxZoomScale, Game.Renderer.Resolution.Height * 1f / viewportSizes.MaxZoomWindowHeight);
|
||||||
|
|
||||||
|
if (unlockMinZoom)
|
||||||
|
{
|
||||||
|
// Specators and the map editor support zooming out by an extra factor of two.
|
||||||
|
// TODO: Allow zooming out until the full map is visible
|
||||||
|
// We need to improve our viewport scroll handling to center the map as we zoom out
|
||||||
|
// before this will work well enough to enable
|
||||||
|
unlockedMinZoom = minZoom * unlockedMinZoomScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resetCurrentZoom)
|
||||||
|
Zoom = minZoom;
|
||||||
|
else
|
||||||
|
Zoom = Zoom.Clamp(minZoom, maxZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CPos ViewToWorld(int2 view)
|
public CPos ViewToWorld(int2 view)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Graphics;
|
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
|
||||||
@@ -34,6 +33,8 @@ namespace OpenRA
|
|||||||
Incompatible = 16
|
Incompatible = 16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum WorldViewport { Native, Close, Medium, Far }
|
||||||
|
|
||||||
public class ServerSettings
|
public class ServerSettings
|
||||||
{
|
{
|
||||||
[Desc("Sets the server name.")]
|
[Desc("Sets the server name.")]
|
||||||
@@ -145,8 +146,8 @@ namespace OpenRA
|
|||||||
|
|
||||||
public bool HardwareCursors = true;
|
public bool HardwareCursors = true;
|
||||||
|
|
||||||
public bool PixelDouble = false;
|
|
||||||
public bool CursorDouble = false;
|
public bool CursorDouble = false;
|
||||||
|
public WorldViewport ViewportDistance = WorldViewport.Medium;
|
||||||
|
|
||||||
[Desc("Add a frame rate limiter. It is recommended to not disable this.")]
|
[Desc("Add a frame rate limiter. It is recommended to not disable this.")]
|
||||||
public bool CapFramerate = true;
|
public bool CapFramerate = true;
|
||||||
@@ -207,6 +208,7 @@ namespace OpenRA
|
|||||||
public MouseButtonPreference MouseButtonPreference = new MouseButtonPreference();
|
public MouseButtonPreference MouseButtonPreference = new MouseButtonPreference();
|
||||||
public float ViewportEdgeScrollStep = 30f;
|
public float ViewportEdgeScrollStep = 30f;
|
||||||
public float UIScrollSpeed = 50f;
|
public float UIScrollSpeed = 50f;
|
||||||
|
public float ZoomSpeed = 0.04f;
|
||||||
public int SelectionDeadzone = 24;
|
public int SelectionDeadzone = 24;
|
||||||
public int MouseScrollDeadzone = 8;
|
public int MouseScrollDeadzone = 8;
|
||||||
|
|
||||||
@@ -220,8 +222,7 @@ namespace OpenRA
|
|||||||
[Desc("Filename of the authentication profile to use.")]
|
[Desc("Filename of the authentication profile to use.")]
|
||||||
public string AuthProfile = "player.oraid";
|
public string AuthProfile = "player.oraid";
|
||||||
|
|
||||||
public bool AllowZoom = true;
|
public Modifiers ZoomModifier = Modifiers.None;
|
||||||
public Modifiers ZoomModifier = Modifiers.Ctrl;
|
|
||||||
|
|
||||||
public bool FetchNews = true;
|
public bool FetchNews = true;
|
||||||
|
|
||||||
|
|||||||
33
OpenRA.Game/WorldViewportSizes.cs
Normal file
33
OpenRA.Game/WorldViewportSizes.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2019 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;
|
||||||
|
|
||||||
|
namespace OpenRA
|
||||||
|
{
|
||||||
|
public class WorldViewportSizes : IGlobalModData
|
||||||
|
{
|
||||||
|
public readonly int2 CloseWindowHeights = new int2(480, 600);
|
||||||
|
public readonly int2 MediumWindowHeights = new int2(600, 900);
|
||||||
|
public readonly int2 FarWindowHeights = new int2(900, 1300);
|
||||||
|
|
||||||
|
public readonly float MaxZoomScale = 2.0f;
|
||||||
|
public readonly int MaxZoomWindowHeight = 240;
|
||||||
|
public readonly bool AllowNativeZoom = true;
|
||||||
|
|
||||||
|
public int2 GetSizeRange(WorldViewport distance)
|
||||||
|
{
|
||||||
|
return distance == WorldViewport.Close ? CloseWindowHeights
|
||||||
|
: distance == WorldViewport.Medium ? MediumWindowHeights
|
||||||
|
: FarWindowHeights;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,6 +39,9 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
editorActionManager = world.WorldActor.Trait<EditorActionManager>();
|
editorActionManager = world.WorldActor.Trait<EditorActionManager>();
|
||||||
|
|
||||||
editorActionManager.OnChange += EditorActionManagerOnChange;
|
editorActionManager.OnChange += EditorActionManagerOnChange;
|
||||||
|
|
||||||
|
// Allow zooming out to full map size
|
||||||
|
worldRenderer.Viewport.UnlockMinimumZoom(0.25f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorActionManagerOnChange()
|
void EditorActionManagerOnChange()
|
||||||
@@ -80,26 +83,11 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
tooltipContainer.Value.RemoveTooltip();
|
tooltipContainer.Value.RemoveTooltip();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Zoom(int amount)
|
|
||||||
{
|
|
||||||
var zoomSteps = worldRenderer.Viewport.AvailableZoomSteps;
|
|
||||||
var currentZoom = worldRenderer.Viewport.Zoom;
|
|
||||||
|
|
||||||
var nextIndex = zoomSteps.IndexOf(currentZoom) - amount;
|
|
||||||
if (nextIndex < 0 || nextIndex >= zoomSteps.Length)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var zoom = zoomSteps[nextIndex];
|
|
||||||
Parent.Get<DropDownButtonWidget>("ZOOM_BUTTON").SelectedItem = zoom.ToString();
|
|
||||||
worldRenderer.Viewport.Zoom = zoom;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool HandleMouseInput(MouseInput mi)
|
public override bool HandleMouseInput(MouseInput mi)
|
||||||
{
|
{
|
||||||
if (mi.Event == MouseInputEvent.Scroll &&
|
if (mi.Event == MouseInputEvent.Scroll && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier))
|
||||||
Game.Settings.Game.AllowZoom && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier))
|
|
||||||
{
|
{
|
||||||
Zoom(mi.Delta.Y);
|
worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,13 +25,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
MapCopyFilters copyFilters = MapCopyFilters.All;
|
MapCopyFilters copyFilters = MapCopyFilters.All;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public MapEditorLogic(Widget widget, ModData modData, World world, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
|
public MapEditorLogic(Widget widget, World world, WorldRenderer worldRenderer)
|
||||||
{
|
{
|
||||||
MiniYaml yaml;
|
|
||||||
var changeZoomKey = new HotkeyReference();
|
|
||||||
if (logicArgs.TryGetValue("ChangeZoomKey", out yaml))
|
|
||||||
changeZoomKey = modData.Hotkeys[yaml.Value];
|
|
||||||
|
|
||||||
var editorViewport = widget.Get<EditorViewportControllerWidget>("MAP_EDITOR");
|
var editorViewport = widget.Get<EditorViewportControllerWidget>("MAP_EDITOR");
|
||||||
|
|
||||||
var gridButton = widget.GetOrNull<ButtonWidget>("GRID_BUTTON");
|
var gridButton = widget.GetOrNull<ButtonWidget>("GRID_BUTTON");
|
||||||
@@ -43,48 +38,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
gridButton.IsHighlighted = () => terrainGeometryTrait.Enabled;
|
gridButton.IsHighlighted = () => terrainGeometryTrait.Enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
var zoomDropdown = widget.GetOrNull<DropDownButtonWidget>("ZOOM_BUTTON");
|
|
||||||
if (zoomDropdown != null)
|
|
||||||
{
|
|
||||||
var selectedZoom = (Game.Settings.Graphics.PixelDouble ? 2f : 1f).ToString();
|
|
||||||
|
|
||||||
zoomDropdown.SelectedItem = selectedZoom;
|
|
||||||
Func<float, ScrollItemWidget, ScrollItemWidget> setupItem = (zoom, itemTemplate) =>
|
|
||||||
{
|
|
||||||
var item = ScrollItemWidget.Setup(
|
|
||||||
itemTemplate,
|
|
||||||
() =>
|
|
||||||
{
|
|
||||||
return float.Parse(zoomDropdown.SelectedItem) == zoom;
|
|
||||||
},
|
|
||||||
() =>
|
|
||||||
{
|
|
||||||
zoomDropdown.SelectedItem = selectedZoom = zoom.ToString();
|
|
||||||
worldRenderer.Viewport.Zoom = float.Parse(selectedZoom);
|
|
||||||
});
|
|
||||||
|
|
||||||
var label = zoom.ToString();
|
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
|
||||||
|
|
||||||
return item;
|
|
||||||
};
|
|
||||||
|
|
||||||
var options = worldRenderer.Viewport.AvailableZoomSteps;
|
|
||||||
zoomDropdown.OnMouseDown = _ => zoomDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
|
||||||
zoomDropdown.GetText = () => zoomDropdown.SelectedItem;
|
|
||||||
zoomDropdown.OnKeyPress = e =>
|
|
||||||
{
|
|
||||||
if (!changeZoomKey.IsActivatedBy(e))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var selected = (options.IndexOf(float.Parse(selectedZoom)) + 1) % options.Length;
|
|
||||||
var zoom = options[selected];
|
|
||||||
worldRenderer.Viewport.Zoom = zoom;
|
|
||||||
selectedZoom = zoom.ToString();
|
|
||||||
zoomDropdown.SelectedItem = zoom.ToString();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var copypasteButton = widget.GetOrNull<ButtonWidget>("COPYPASTE_BUTTON");
|
var copypasteButton = widget.GetOrNull<ButtonWidget>("COPYPASTE_BUTTON");
|
||||||
if (copypasteButton != null)
|
if (copypasteButton != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,31 +16,21 @@ using OpenRA.Widgets;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
|
namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
|
||||||
{
|
{
|
||||||
[ChromeLogicArgsHotkeys("TogglePixelDoubleKey")]
|
[ChromeLogicArgsHotkeys("ResetZoomKey")]
|
||||||
public class TogglePixelDoubleHotkeyLogic : SingleHotkeyBaseLogic
|
public class ResetZoomHotkeyLogic : SingleHotkeyBaseLogic
|
||||||
{
|
{
|
||||||
readonly Viewport viewport;
|
readonly Viewport viewport;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public TogglePixelDoubleHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
|
public ResetZoomHotkeyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
|
||||||
: base(widget, modData, "TogglePixelDoubleKey", "WORLD_KEYHANDLER", logicArgs)
|
: base(widget, modData, "ResetZoomKey", "WORLD_KEYHANDLER", logicArgs)
|
||||||
{
|
{
|
||||||
viewport = worldRenderer.Viewport;
|
viewport = worldRenderer.Viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool OnHotkeyActivated(KeyInput e)
|
protected override bool OnHotkeyActivated(KeyInput e)
|
||||||
{
|
{
|
||||||
// Zoom is currently always set directly, so we don't need to worry about floating point imprecision
|
viewport.ToggleZoom();
|
||||||
if (viewport.Zoom == 1f)
|
|
||||||
viewport.Zoom = 2f;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Reset zoom to regular view if it was anything else before
|
|
||||||
// (like a zoom level only reachable by using the scroll wheel).
|
|
||||||
viewport.Zoom = 1f;
|
|
||||||
}
|
|
||||||
|
|
||||||
Game.Settings.Graphics.PixelDouble = viewport.Zoom == 2f;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Mods.Common.Lint;
|
using OpenRA.Mods.Common.Lint;
|
||||||
using OpenRA.Network;
|
using OpenRA.Network;
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
@@ -64,7 +65,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
}
|
}
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public ObserverShroudSelectorLogic(Widget widget, ModData modData, World world, Dictionary<string, MiniYaml> logicArgs)
|
public ObserverShroudSelectorLogic(Widget widget, ModData modData, World world, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs)
|
||||||
{
|
{
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
|
||||||
@@ -145,6 +146,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
selected = limitViews ? groups.First().Value.First() : world.WorldActor.Owner.Shroud.ExploreMapEnabled ? combined : disableShroud;
|
selected = limitViews ? groups.First().Value.First() : world.WorldActor.Owner.Shroud.ExploreMapEnabled ? combined : disableShroud;
|
||||||
selected.OnClick();
|
selected.OnClick();
|
||||||
|
|
||||||
|
// Enable zooming out to fractional zoom levels
|
||||||
|
worldRenderer.Viewport.UnlockMinimumZoom(0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HandleKeyPress(KeyInput e)
|
public bool HandleKeyPress(KeyInput e)
|
||||||
|
|||||||
@@ -190,13 +190,20 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
resetPanelActions.Add(type, reset(panel));
|
resetPanelActions.Add(type, reset(panel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static readonly Dictionary<WorldViewport, string> ViewportSizeNames = new Dictionary<WorldViewport, string>()
|
||||||
|
{
|
||||||
|
{ WorldViewport.Close, "Close" },
|
||||||
|
{ WorldViewport.Medium, "Medium" },
|
||||||
|
{ WorldViewport.Far, "Far" },
|
||||||
|
{ WorldViewport.Native, "Furthest" }
|
||||||
|
};
|
||||||
|
|
||||||
Action InitDisplayPanel(Widget panel)
|
Action InitDisplayPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var ds = Game.Settings.Graphics;
|
var ds = Game.Settings.Graphics;
|
||||||
var gs = Game.Settings.Game;
|
var gs = Game.Settings.Game;
|
||||||
|
|
||||||
BindCheckboxPref(panel, "HARDWARECURSORS_CHECKBOX", ds, "HardwareCursors");
|
BindCheckboxPref(panel, "HARDWARECURSORS_CHECKBOX", ds, "HardwareCursors");
|
||||||
BindCheckboxPref(panel, "PIXELDOUBLE_CHECKBOX", ds, "PixelDouble");
|
|
||||||
BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
|
BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
|
||||||
BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
|
BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
|
||||||
BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gs, "UsePlayerStanceColors");
|
BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gs, "UsePlayerStanceColors");
|
||||||
@@ -220,14 +227,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
targetLinesDropDown.GetText = () => gs.TargetLines == TargetLinesType.Automatic ?
|
targetLinesDropDown.GetText = () => gs.TargetLines == TargetLinesType.Automatic ?
|
||||||
"Automatic" : gs.TargetLines == TargetLinesType.Manual ? "Manual" : "Disabled";
|
"Automatic" : gs.TargetLines == TargetLinesType.Manual ? "Manual" : "Disabled";
|
||||||
|
|
||||||
// Update zoom immediately
|
var battlefieldCameraDropDown = panel.Get<DropDownButtonWidget>("BATTLEFIELD_CAMERA_DROPDOWN");
|
||||||
var pixelDoubleCheckbox = panel.Get<CheckboxWidget>("PIXELDOUBLE_CHECKBOX");
|
var battlefieldCameraLabel = new CachedTransform<WorldViewport, string>(vs => ViewportSizeNames[vs]);
|
||||||
var pixelDoubleOnClick = pixelDoubleCheckbox.OnClick;
|
battlefieldCameraDropDown.OnMouseDown = _ => ShowBattlefieldCameraDropdown(battlefieldCameraDropDown, ds);
|
||||||
pixelDoubleCheckbox.OnClick = () =>
|
battlefieldCameraDropDown.GetText = () => battlefieldCameraLabel.Update(ds.ViewportDistance);
|
||||||
{
|
|
||||||
pixelDoubleOnClick();
|
|
||||||
worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed;
|
panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed;
|
||||||
var windowWidth = panel.Get<TextFieldWidget>("WINDOW_WIDTH");
|
var windowWidth = panel.Get<TextFieldWidget>("WINDOW_WIDTH");
|
||||||
@@ -329,10 +332,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ds.Language = dds.Language;
|
ds.Language = dds.Language;
|
||||||
ds.Mode = dds.Mode;
|
ds.Mode = dds.Mode;
|
||||||
ds.WindowedSize = dds.WindowedSize;
|
ds.WindowedSize = dds.WindowedSize;
|
||||||
|
|
||||||
ds.PixelDouble = dds.PixelDouble;
|
|
||||||
ds.CursorDouble = dds.CursorDouble;
|
ds.CursorDouble = dds.CursorDouble;
|
||||||
worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1;
|
ds.ViewportDistance = dds.ViewportDistance;
|
||||||
|
|
||||||
ps.Color = dps.Color;
|
ps.Color = dps.Color;
|
||||||
ps.Name = dps.Name;
|
ps.Name = dps.Name;
|
||||||
@@ -417,7 +418,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
BindCheckboxPref(panel, "CLASSICORDERS_CHECKBOX", gs, "UseClassicMouseStyle");
|
BindCheckboxPref(panel, "CLASSICORDERS_CHECKBOX", gs, "UseClassicMouseStyle");
|
||||||
BindCheckboxPref(panel, "EDGESCROLL_CHECKBOX", gs, "ViewportEdgeScroll");
|
BindCheckboxPref(panel, "EDGESCROLL_CHECKBOX", gs, "ViewportEdgeScroll");
|
||||||
BindCheckboxPref(panel, "LOCKMOUSE_CHECKBOX", gs, "LockMouseWindow");
|
BindCheckboxPref(panel, "LOCKMOUSE_CHECKBOX", gs, "LockMouseWindow");
|
||||||
BindCheckboxPref(panel, "ALLOW_ZOOM_CHECKBOX", gs, "AllowZoom");
|
BindSliderPref(panel, "ZOOMSPEED_SLIDER", gs, "ZoomSpeed");
|
||||||
BindSliderPref(panel, "SCROLLSPEED_SLIDER", gs, "ViewportEdgeScrollStep");
|
BindSliderPref(panel, "SCROLLSPEED_SLIDER", gs, "ViewportEdgeScrollStep");
|
||||||
BindSliderPref(panel, "UI_SCROLLSPEED_SLIDER", gs, "UIScrollSpeed");
|
BindSliderPref(panel, "UI_SCROLLSPEED_SLIDER", gs, "UIScrollSpeed");
|
||||||
|
|
||||||
@@ -516,8 +517,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
gs.LockMouseWindow = dgs.LockMouseWindow;
|
gs.LockMouseWindow = dgs.LockMouseWindow;
|
||||||
gs.ViewportEdgeScroll = dgs.ViewportEdgeScroll;
|
gs.ViewportEdgeScroll = dgs.ViewportEdgeScroll;
|
||||||
gs.ViewportEdgeScrollStep = dgs.ViewportEdgeScrollStep;
|
gs.ViewportEdgeScrollStep = dgs.ViewportEdgeScrollStep;
|
||||||
|
gs.ZoomSpeed = dgs.ZoomSpeed;
|
||||||
gs.UIScrollSpeed = dgs.UIScrollSpeed;
|
gs.UIScrollSpeed = dgs.UIScrollSpeed;
|
||||||
gs.AllowZoom = dgs.AllowZoom;
|
|
||||||
gs.ZoomModifier = dgs.ZoomModifier;
|
gs.ZoomModifier = dgs.ZoomModifier;
|
||||||
|
|
||||||
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
|
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
|
||||||
@@ -738,6 +739,36 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ShowBattlefieldCameraDropdown(DropDownButtonWidget dropdown, GraphicSettings gs)
|
||||||
|
{
|
||||||
|
Func<WorldViewport, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
|
{
|
||||||
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
|
() => gs.ViewportDistance == o,
|
||||||
|
() => gs.ViewportDistance = o);
|
||||||
|
|
||||||
|
var label = ViewportSizeNames[o];
|
||||||
|
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
|
var viewportSizes = Game.ModData.Manifest.Get<WorldViewportSizes>();
|
||||||
|
var windowHeight = Game.Renderer.Resolution.Height;
|
||||||
|
|
||||||
|
var validSizes = new List<WorldViewport>() { WorldViewport.Close };
|
||||||
|
if (viewportSizes.GetSizeRange(WorldViewport.Medium).X < windowHeight)
|
||||||
|
validSizes.Add(WorldViewport.Medium);
|
||||||
|
|
||||||
|
var farRange = viewportSizes.GetSizeRange(WorldViewport.Far);
|
||||||
|
if (farRange.X < windowHeight)
|
||||||
|
validSizes.Add(WorldViewport.Far);
|
||||||
|
|
||||||
|
if (farRange.Y < windowHeight)
|
||||||
|
validSizes.Add(WorldViewport.Native);
|
||||||
|
|
||||||
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, validSizes, setupItem);
|
||||||
|
}
|
||||||
|
|
||||||
void MakeMouseFocusSettingsLive()
|
void MakeMouseFocusSettingsLive()
|
||||||
{
|
{
|
||||||
var gameSettings = Game.Settings.Game;
|
var gameSettings = Game.Settings.Game;
|
||||||
|
|||||||
@@ -306,38 +306,11 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsZoomAllowed(float zoom)
|
|
||||||
{
|
|
||||||
return world.IsGameOver || zoom >= 1.0f || world.IsReplay || world.LocalPlayer == null || world.LocalPlayer.Spectating;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Zoom(int direction)
|
|
||||||
{
|
|
||||||
var zoomSteps = worldRenderer.Viewport.AvailableZoomSteps;
|
|
||||||
var currentZoom = worldRenderer.Viewport.Zoom;
|
|
||||||
var nextIndex = zoomSteps.IndexOf(currentZoom);
|
|
||||||
|
|
||||||
if (direction < 0)
|
|
||||||
nextIndex++;
|
|
||||||
else
|
|
||||||
nextIndex--;
|
|
||||||
|
|
||||||
if (nextIndex < 0 || nextIndex >= zoomSteps.Count())
|
|
||||||
return;
|
|
||||||
|
|
||||||
var zoom = zoomSteps.ElementAt(nextIndex);
|
|
||||||
if (!IsZoomAllowed(zoom))
|
|
||||||
return;
|
|
||||||
|
|
||||||
worldRenderer.Viewport.Zoom = zoom;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool HandleMouseInput(MouseInput mi)
|
public override bool HandleMouseInput(MouseInput mi)
|
||||||
{
|
{
|
||||||
if (mi.Event == MouseInputEvent.Scroll &&
|
if (mi.Event == MouseInputEvent.Scroll && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier))
|
||||||
Game.Settings.Game.AllowZoom && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier))
|
|
||||||
{
|
{
|
||||||
Zoom(mi.Delta.Y);
|
worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -202,13 +202,15 @@ Container@EDITOR_ROOT:
|
|||||||
NextMusicKey: NextMusic
|
NextMusicKey: NextMusic
|
||||||
TakeScreenshotKey: TakeScreenshot
|
TakeScreenshotKey: TakeScreenshot
|
||||||
MuteAudioKey: ToggleMute
|
MuteAudioKey: ToggleMute
|
||||||
|
LogicKeyListener@WORLD_KEYHANDLER:
|
||||||
|
Logic: ResetZoomHotkeyLogic
|
||||||
|
ResetZoomKey: ResetZoom
|
||||||
Container@WORLD_ROOT:
|
Container@WORLD_ROOT:
|
||||||
Container@MENU_ROOT:
|
Container@MENU_ROOT:
|
||||||
TooltipContainer@TOOLTIP_CONTAINER:
|
TooltipContainer@TOOLTIP_CONTAINER:
|
||||||
|
|
||||||
Container@EDITOR_WORLD_ROOT:
|
Container@EDITOR_WORLD_ROOT:
|
||||||
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic
|
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic
|
||||||
ChangeZoomKey: TogglePixelDouble
|
|
||||||
EditPanelPadding: 5
|
EditPanelPadding: 5
|
||||||
Children:
|
Children:
|
||||||
Container@PERF_ROOT:
|
Container@PERF_ROOT:
|
||||||
@@ -578,6 +580,28 @@ Container@EDITOR_WORLD_ROOT:
|
|||||||
Height: 25
|
Height: 25
|
||||||
Text: History
|
Text: History
|
||||||
Font: Bold
|
Font: Bold
|
||||||
|
Button@UNDO_BUTTON:
|
||||||
|
X: WINDOW_RIGHT - 910
|
||||||
|
Y: 5
|
||||||
|
Height: 25
|
||||||
|
Width: 100
|
||||||
|
Text: Undo
|
||||||
|
Font: Bold
|
||||||
|
Key: z ctrl
|
||||||
|
TooltipTemplate: BUTTON_TOOLTIP
|
||||||
|
TooltipText: Undo last step
|
||||||
|
TooltipContainer: TOOLTIP_CONTAINER
|
||||||
|
Button@REDO_BUTTON:
|
||||||
|
X: WINDOW_RIGHT - 800
|
||||||
|
Y: 5
|
||||||
|
Height: 25
|
||||||
|
Width: 100
|
||||||
|
Text: Redo
|
||||||
|
Font: Bold
|
||||||
|
Key: y ctrl
|
||||||
|
TooltipTemplate: BUTTON_TOOLTIP
|
||||||
|
TooltipText: Redo last step
|
||||||
|
TooltipContainer: TOOLTIP_CONTAINER
|
||||||
Button@GRID_BUTTON:
|
Button@GRID_BUTTON:
|
||||||
X: WINDOW_RIGHT - 690
|
X: WINDOW_RIGHT - 690
|
||||||
Y: 5
|
Y: 5
|
||||||
@@ -589,25 +613,6 @@ Container@EDITOR_WORLD_ROOT:
|
|||||||
TooltipTemplate: BUTTON_TOOLTIP
|
TooltipTemplate: BUTTON_TOOLTIP
|
||||||
TooltipText: Toggle the terrain grid
|
TooltipText: Toggle the terrain grid
|
||||||
TooltipContainer: TOOLTIP_CONTAINER
|
TooltipContainer: TOOLTIP_CONTAINER
|
||||||
Label@ZOOM_LABEL:
|
|
||||||
X: WINDOW_RIGHT - 770 - 55
|
|
||||||
Y: 5
|
|
||||||
Width: 50
|
|
||||||
Height: 25
|
|
||||||
Text: Zoom:
|
|
||||||
Align: Right
|
|
||||||
Font: Bold
|
|
||||||
Contrast: true
|
|
||||||
DropDownButton@ZOOM_BUTTON:
|
|
||||||
X: WINDOW_RIGHT - 770
|
|
||||||
Y: 5
|
|
||||||
Width: 70
|
|
||||||
Height: 25
|
|
||||||
Font: Bold
|
|
||||||
Key: TogglePixelDouble
|
|
||||||
TooltipTemplate: BUTTON_TOOLTIP
|
|
||||||
TooltipText: Zoom
|
|
||||||
TooltipContainer: TOOLTIP_CONTAINER
|
|
||||||
Button@COPYPASTE_BUTTON:
|
Button@COPYPASTE_BUTTON:
|
||||||
X: WINDOW_RIGHT - 580
|
X: WINDOW_RIGHT - 580
|
||||||
Y: 5
|
Y: 5
|
||||||
@@ -639,26 +644,6 @@ Container@EDITOR_WORLD_ROOT:
|
|||||||
Align: Left
|
Align: Left
|
||||||
Font: Bold
|
Font: Bold
|
||||||
Contrast: true
|
Contrast: true
|
||||||
Button@UNDO_BUTTON:
|
|
||||||
X: 200
|
|
||||||
Height: 25
|
|
||||||
Width: 100
|
|
||||||
Text: Undo
|
|
||||||
Font: Bold
|
|
||||||
Key: z ctrl
|
|
||||||
TooltipTemplate: BUTTON_TOOLTIP
|
|
||||||
TooltipText: Undo last step
|
|
||||||
TooltipContainer: TOOLTIP_CONTAINER
|
|
||||||
Button@REDO_BUTTON:
|
|
||||||
X: 305
|
|
||||||
Height: 25
|
|
||||||
Width: 100
|
|
||||||
Text: Redo
|
|
||||||
Font: Bold
|
|
||||||
Key: y ctrl
|
|
||||||
TooltipTemplate: BUTTON_TOOLTIP
|
|
||||||
TooltipText: Redo last step
|
|
||||||
TooltipContainer: TOOLTIP_CONTAINER
|
|
||||||
|
|
||||||
ScrollPanel@CATEGORY_FILTER_PANEL:
|
ScrollPanel@CATEGORY_FILTER_PANEL:
|
||||||
Width: 190
|
Width: 190
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ Container@INGAME_ROOT:
|
|||||||
TakeScreenshotKey: TakeScreenshot
|
TakeScreenshotKey: TakeScreenshot
|
||||||
MuteAudioKey: ToggleMute
|
MuteAudioKey: ToggleMute
|
||||||
LogicKeyListener@WORLD_KEYHANDLER:
|
LogicKeyListener@WORLD_KEYHANDLER:
|
||||||
Logic: CycleBasesHotkeyLogic, CycleProductionActorsHotkeyLogic, JumpToLastEventHotkeyLogic, JumpToSelectedActorsHotkeyLogic, TogglePixelDoubleHotkeyLogic, TogglePlayerStanceColorHotkeyLogic, CycleStatusBarsHotkeyLogic, PauseHotkeyLogic, RemoveFromControlGroupHotkeyLogic
|
Logic: CycleBasesHotkeyLogic, CycleProductionActorsHotkeyLogic, JumpToLastEventHotkeyLogic, JumpToSelectedActorsHotkeyLogic, ResetZoomHotkeyLogic, TogglePlayerStanceColorHotkeyLogic, CycleStatusBarsHotkeyLogic, PauseHotkeyLogic, RemoveFromControlGroupHotkeyLogic
|
||||||
RemoveFromControlGroupKey: RemoveFromControlGroup
|
RemoveFromControlGroupKey: RemoveFromControlGroup
|
||||||
CycleBasesKey: CycleBase
|
CycleBasesKey: CycleBase
|
||||||
CycleProductionActorsKey: CycleProductionBuildings
|
CycleProductionActorsKey: CycleProductionBuildings
|
||||||
JumpToLastEventKey: ToLastEvent
|
JumpToLastEventKey: ToLastEvent
|
||||||
JumpToSelectedActorsKey: ToSelection
|
JumpToSelectedActorsKey: ToSelection
|
||||||
TogglePixelDoubleKey: TogglePixelDouble
|
ResetZoomKey: ResetZoom
|
||||||
TogglePlayerStanceColorKey: TogglePlayerStanceColor
|
TogglePlayerStanceColorKey: TogglePlayerStanceColor
|
||||||
CycleStatusBarsKey: CycleStatusBars
|
CycleStatusBarsKey: CycleStatusBars
|
||||||
PauseKey: Pause
|
PauseKey: Pause
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ Container@SETTINGS_PANEL:
|
|||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Use Hardware Cursors
|
Text: Use Hardware Cursors
|
||||||
Checkbox@CURSORDOUBLE_CHECKBOX:
|
Checkbox@CURSORDOUBLE_CHECKBOX:
|
||||||
X: 300
|
X: 310
|
||||||
Y: 75
|
Y: 75
|
||||||
Width: 200
|
Width: 200
|
||||||
Height: 20
|
Height: 20
|
||||||
@@ -152,13 +152,6 @@ Container@SETTINGS_PANEL:
|
|||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Enable Frame Limiter
|
Text: Enable Frame Limiter
|
||||||
Checkbox@PIXELDOUBLE_CHECKBOX:
|
|
||||||
X: 310
|
|
||||||
Y: 125
|
|
||||||
Width: 200
|
|
||||||
Height: 20
|
|
||||||
Font: Regular
|
|
||||||
Text: Enable Pixel Doubling
|
|
||||||
Label@FRAME_LIMIT_DESC_A:
|
Label@FRAME_LIMIT_DESC_A:
|
||||||
X: 45
|
X: 45
|
||||||
Y: 153
|
Y: 153
|
||||||
@@ -209,6 +202,18 @@ Container@SETTINGS_PANEL:
|
|||||||
Y: 6
|
Y: 6
|
||||||
Width: PARENT_RIGHT - 35
|
Width: PARENT_RIGHT - 35
|
||||||
Height: PARENT_BOTTOM - 12
|
Height: PARENT_BOTTOM - 12
|
||||||
|
Label@BATTLEFIELD_CAMERA:
|
||||||
|
X: 15
|
||||||
|
Y: 227
|
||||||
|
Width: 120
|
||||||
|
Text: Battlefield Camera:
|
||||||
|
Align: Right
|
||||||
|
DropDownButton@BATTLEFIELD_CAMERA_DROPDOWN:
|
||||||
|
X: 140
|
||||||
|
Y: 215
|
||||||
|
Width: 145
|
||||||
|
Height: 25
|
||||||
|
Font: Regular
|
||||||
Label@STATUS_BARS:
|
Label@STATUS_BARS:
|
||||||
X: 250
|
X: 250
|
||||||
Y: 257
|
Y: 257
|
||||||
@@ -223,7 +228,7 @@ Container@SETTINGS_PANEL:
|
|||||||
Font: Regular
|
Font: Regular
|
||||||
Label@TARGET_LINES:
|
Label@TARGET_LINES:
|
||||||
X: 250
|
X: 250
|
||||||
Y: 228
|
Y: 227
|
||||||
Width: 145
|
Width: 145
|
||||||
Text: Target Lines:
|
Text: Target Lines:
|
||||||
Align: Right
|
Align: Right
|
||||||
@@ -404,7 +409,7 @@ Container@SETTINGS_PANEL:
|
|||||||
Width: 160
|
Width: 160
|
||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Scroll-zoom Modifier:
|
Text: Mouse Wheel Zoom Modifier:
|
||||||
Align: Right
|
Align: Right
|
||||||
DropDownButton@ZOOM_MODIFIER:
|
DropDownButton@ZOOM_MODIFIER:
|
||||||
X: PARENT_RIGHT - WIDTH - 15
|
X: PARENT_RIGHT - WIDTH - 15
|
||||||
@@ -420,29 +425,22 @@ Container@SETTINGS_PANEL:
|
|||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Edge Scrolling
|
Text: Edge Scrolling
|
||||||
Checkbox@ALLOW_ZOOM_CHECKBOX:
|
Checkbox@LOCKMOUSE_CHECKBOX:
|
||||||
X: 15
|
X: 15
|
||||||
Y: 100
|
Y: 100
|
||||||
Width: 130
|
Width: 130
|
||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Scroll Zooming
|
|
||||||
Checkbox@LOCKMOUSE_CHECKBOX:
|
|
||||||
X: 15
|
|
||||||
Y: 130
|
|
||||||
Width: 130
|
|
||||||
Height: 20
|
|
||||||
Font: Regular
|
|
||||||
Text: Lock Mouse to Window
|
Text: Lock Mouse to Window
|
||||||
Label@SCROLL_SPEED_LABEL:
|
Label@SCROLL_SPEED_LABEL:
|
||||||
X: PARENT_RIGHT - WIDTH - 270
|
X: 15
|
||||||
Y: 128
|
Y: 128
|
||||||
Width: 95
|
Width: 85
|
||||||
Height: 25
|
Height: 25
|
||||||
Text: Scroll Speed:
|
Text: Scroll Speed:
|
||||||
Align: Right
|
Align: Right
|
||||||
Slider@SCROLLSPEED_SLIDER:
|
Slider@SCROLLSPEED_SLIDER:
|
||||||
X: PARENT_RIGHT - WIDTH - 170
|
X: 95
|
||||||
Y: 133
|
Y: 133
|
||||||
Width: 100
|
Width: 100
|
||||||
Height: 20
|
Height: 20
|
||||||
@@ -450,20 +448,35 @@ Container@SETTINGS_PANEL:
|
|||||||
MinimumValue: 10
|
MinimumValue: 10
|
||||||
MaximumValue: 50
|
MaximumValue: 50
|
||||||
Label@UI_SCROLL_SPEED_LABEL:
|
Label@UI_SCROLL_SPEED_LABEL:
|
||||||
X: PARENT_RIGHT - WIDTH - 106
|
X: PARENT_RIGHT - WIDTH - 320
|
||||||
Y: 128
|
Y: 128
|
||||||
Width: 95
|
Width: 95
|
||||||
Height: 25
|
Height: 25
|
||||||
Text: UI Scroll:
|
Text: UI Scroll:
|
||||||
Align: Right
|
Align: Right
|
||||||
Slider@UI_SCROLLSPEED_SLIDER:
|
Slider@UI_SCROLLSPEED_SLIDER:
|
||||||
X: PARENT_RIGHT - WIDTH - 6
|
X: PARENT_RIGHT - WIDTH - 220
|
||||||
Y: 133
|
Y: 133
|
||||||
Width: 100
|
Width: 100
|
||||||
Height: 20
|
Height: 20
|
||||||
Ticks: 5
|
Ticks: 5
|
||||||
MinimumValue: 1
|
MinimumValue: 1
|
||||||
MaximumValue: 100
|
MaximumValue: 100
|
||||||
|
Label@ZOOM_SPEED_LABEL:
|
||||||
|
X: PARENT_RIGHT - WIDTH - 106
|
||||||
|
Y: 129
|
||||||
|
Width: 95
|
||||||
|
Height: 25
|
||||||
|
Text: Zoom Speed:
|
||||||
|
Align: Right
|
||||||
|
ExponentialSlider@ZOOMSPEED_SLIDER:
|
||||||
|
X: PARENT_RIGHT - WIDTH - 6
|
||||||
|
Y: 133
|
||||||
|
Width: 100
|
||||||
|
Height: 20
|
||||||
|
Ticks: 5
|
||||||
|
MinimumValue: 0.01
|
||||||
|
MaximumValue: 0.4
|
||||||
Container@HOTKEYS_PANEL:
|
Container@HOTKEYS_PANEL:
|
||||||
X: 15
|
X: 15
|
||||||
Y: 15
|
Y: 15
|
||||||
|
|||||||
@@ -193,13 +193,15 @@ Container@EDITOR_ROOT:
|
|||||||
NextMusicKey: NextMusic
|
NextMusicKey: NextMusic
|
||||||
TakeScreenshotKey: TakeScreenshot
|
TakeScreenshotKey: TakeScreenshot
|
||||||
MuteAudioKey: ToggleMute
|
MuteAudioKey: ToggleMute
|
||||||
|
LogicKeyListener@WORLD_KEYHANDLER:
|
||||||
|
Logic: ResetZoomHotkeyLogic
|
||||||
|
ResetZoomKey: ResetZoom
|
||||||
Container@WORLD_ROOT:
|
Container@WORLD_ROOT:
|
||||||
Container@MENU_ROOT:
|
Container@MENU_ROOT:
|
||||||
TooltipContainer@TOOLTIP_CONTAINER:
|
TooltipContainer@TOOLTIP_CONTAINER:
|
||||||
|
|
||||||
Container@EDITOR_WORLD_ROOT:
|
Container@EDITOR_WORLD_ROOT:
|
||||||
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic
|
Logic: LoadIngamePerfLogic, MapEditorLogic, ActorEditLogic
|
||||||
ChangeZoomKey: TogglePixelDouble
|
|
||||||
EditPanelPadding: 14
|
EditPanelPadding: 14
|
||||||
Children:
|
Children:
|
||||||
Container@PERF_ROOT:
|
Container@PERF_ROOT:
|
||||||
@@ -584,25 +586,8 @@ Container@EDITOR_WORLD_ROOT:
|
|||||||
TooltipContainer: TOOLTIP_CONTAINER
|
TooltipContainer: TOOLTIP_CONTAINER
|
||||||
Font: Bold
|
Font: Bold
|
||||||
Key: f1
|
Key: f1
|
||||||
Label@ZOOM_LABEL:
|
|
||||||
X: 495
|
|
||||||
Width: 50
|
|
||||||
Height: 25
|
|
||||||
Text: Zoom:
|
|
||||||
Align: Right
|
|
||||||
Font: Bold
|
|
||||||
Contrast: true
|
|
||||||
DropDownButton@ZOOM_BUTTON:
|
|
||||||
X: 550
|
|
||||||
Width: 70
|
|
||||||
Height: 25
|
|
||||||
Font: Bold
|
|
||||||
Key: TogglePixelDouble
|
|
||||||
TooltipTemplate: BUTTON_TOOLTIP
|
|
||||||
TooltipText: Zoom
|
|
||||||
TooltipContainer: TOOLTIP_CONTAINER
|
|
||||||
Button@UNDO_BUTTON:
|
Button@UNDO_BUTTON:
|
||||||
X: 630
|
X: 500
|
||||||
Height: 25
|
Height: 25
|
||||||
Width: 90
|
Width: 90
|
||||||
Text: Undo
|
Text: Undo
|
||||||
@@ -612,7 +597,7 @@ Container@EDITOR_WORLD_ROOT:
|
|||||||
TooltipText: Undo last step
|
TooltipText: Undo last step
|
||||||
TooltipContainer: TOOLTIP_CONTAINER
|
TooltipContainer: TOOLTIP_CONTAINER
|
||||||
Button@REDO_BUTTON:
|
Button@REDO_BUTTON:
|
||||||
X: 730
|
X: 600
|
||||||
Height: 25
|
Height: 25
|
||||||
Width: 90
|
Width: 90
|
||||||
Text: Redo
|
Text: Redo
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ Container@INGAME_ROOT:
|
|||||||
TakeScreenshotKey: TakeScreenshot
|
TakeScreenshotKey: TakeScreenshot
|
||||||
MuteAudioKey: ToggleMute
|
MuteAudioKey: ToggleMute
|
||||||
LogicKeyListener@WORLD_KEYHANDLER:
|
LogicKeyListener@WORLD_KEYHANDLER:
|
||||||
Logic: CycleBasesHotkeyLogic, CycleProductionActorsHotkeyLogic, JumpToLastEventHotkeyLogic, JumpToSelectedActorsHotkeyLogic, TogglePixelDoubleHotkeyLogic, TogglePlayerStanceColorHotkeyLogic, CycleStatusBarsHotkeyLogic, PauseHotkeyLogic, RemoveFromControlGroupHotkeyLogic
|
Logic: CycleBasesHotkeyLogic, CycleProductionActorsHotkeyLogic, JumpToLastEventHotkeyLogic, JumpToSelectedActorsHotkeyLogic, ResetZoomHotkeyLogic, TogglePlayerStanceColorHotkeyLogic, CycleStatusBarsHotkeyLogic, PauseHotkeyLogic, RemoveFromControlGroupHotkeyLogic
|
||||||
RemoveFromControlGroupKey: RemoveFromControlGroup
|
RemoveFromControlGroupKey: RemoveFromControlGroup
|
||||||
CycleBasesKey: CycleBase
|
CycleBasesKey: CycleBase
|
||||||
CycleProductionActorsKey: CycleProductionBuildings
|
CycleProductionActorsKey: CycleProductionBuildings
|
||||||
JumpToLastEventKey: ToLastEvent
|
JumpToLastEventKey: ToLastEvent
|
||||||
JumpToSelectedActorsKey: ToSelection
|
JumpToSelectedActorsKey: ToSelection
|
||||||
TogglePixelDoubleKey: TogglePixelDouble
|
ResetZoomKey: ResetZoom
|
||||||
TogglePlayerStanceColorKey: TogglePlayerStanceColor
|
TogglePlayerStanceColorKey: TogglePlayerStanceColor
|
||||||
CycleStatusBarsKey: CycleStatusBars
|
CycleStatusBarsKey: CycleStatusBars
|
||||||
PauseKey: Pause
|
PauseKey: Pause
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ Background@SETTINGS_PANEL:
|
|||||||
Children:
|
Children:
|
||||||
Label@MODE_LABEL:
|
Label@MODE_LABEL:
|
||||||
X: 110
|
X: 110
|
||||||
Y: 41
|
Y: 40
|
||||||
Width: 45
|
Width: 45
|
||||||
Height: 25
|
Height: 25
|
||||||
Align: Right
|
Align: Right
|
||||||
@@ -146,7 +146,7 @@ Background@SETTINGS_PANEL:
|
|||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Use Hardware Cursors
|
Text: Use Hardware Cursors
|
||||||
Checkbox@CURSORDOUBLE_CHECKBOX:
|
Checkbox@CURSORDOUBLE_CHECKBOX:
|
||||||
X: 300
|
X: 310
|
||||||
Y: 75
|
Y: 75
|
||||||
Width: 200
|
Width: 200
|
||||||
Height: 20
|
Height: 20
|
||||||
@@ -166,13 +166,6 @@ Background@SETTINGS_PANEL:
|
|||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Enable Frame Limiter
|
Text: Enable Frame Limiter
|
||||||
Checkbox@PIXELDOUBLE_CHECKBOX:
|
|
||||||
X: 310
|
|
||||||
Y: 125
|
|
||||||
Width: 200
|
|
||||||
Height: 20
|
|
||||||
Font: Regular
|
|
||||||
Text: Enable Pixel Doubling
|
|
||||||
Label@FRAME_LIMIT_DESC_A:
|
Label@FRAME_LIMIT_DESC_A:
|
||||||
X: 45
|
X: 45
|
||||||
Y: 159
|
Y: 159
|
||||||
@@ -223,29 +216,41 @@ Background@SETTINGS_PANEL:
|
|||||||
Y: 6
|
Y: 6
|
||||||
Width: PARENT_RIGHT - 35
|
Width: PARENT_RIGHT - 35
|
||||||
Height: PARENT_BOTTOM - 12
|
Height: PARENT_BOTTOM - 12
|
||||||
|
Label@BATTLEFIELD_CAMERA:
|
||||||
|
X: 15
|
||||||
|
Y: 242
|
||||||
|
Width: 120
|
||||||
|
Text: Battlefield Camera:
|
||||||
|
Align: Right
|
||||||
|
DropDownButton@BATTLEFIELD_CAMERA_DROPDOWN:
|
||||||
|
X: 140
|
||||||
|
Y: 230
|
||||||
|
Width: 145
|
||||||
|
Height: 25
|
||||||
|
Font: Regular
|
||||||
Label@STATUS_BARS:
|
Label@STATUS_BARS:
|
||||||
X: 250
|
X: 250
|
||||||
Y: 278
|
Y: 277
|
||||||
Width: 145
|
Width: 145
|
||||||
Text: Status Bars:
|
Text: Status Bars:
|
||||||
Align: Right
|
Align: Right
|
||||||
DropDownButton@STATUS_BAR_DROPDOWN:
|
DropDownButton@STATUS_BAR_DROPDOWN:
|
||||||
X: 400
|
X: 400
|
||||||
Y: 265
|
Y: 265
|
||||||
Width: 170
|
Width: 180
|
||||||
Height: 25
|
Height: 25
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Standard
|
Text: Standard
|
||||||
Label@TARGET_LINES:
|
Label@TARGET_LINES:
|
||||||
X: 250
|
X: 250
|
||||||
Y: 243
|
Y: 242
|
||||||
Width: 145
|
Width: 145
|
||||||
Text: Target Lines:
|
Text: Target Lines:
|
||||||
Align: Right
|
Align: Right
|
||||||
DropDownButton@TARGET_LINES_DROPDOWN:
|
DropDownButton@TARGET_LINES_DROPDOWN:
|
||||||
X: 400
|
X: 400
|
||||||
Y: 230
|
Y: 230
|
||||||
Width: 170
|
Width: 180
|
||||||
Height: 25
|
Height: 25
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Label@LOCALIZATION_TITLE:
|
Label@LOCALIZATION_TITLE:
|
||||||
@@ -410,7 +415,7 @@ Background@SETTINGS_PANEL:
|
|||||||
Width: 160
|
Width: 160
|
||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Scroll-zoom Modifier:
|
Text: Mouse Wheel Zoom Modifier:
|
||||||
Align: Right
|
Align: Right
|
||||||
DropDownButton@ZOOM_MODIFIER:
|
DropDownButton@ZOOM_MODIFIER:
|
||||||
X: PARENT_RIGHT - WIDTH - 15
|
X: PARENT_RIGHT - WIDTH - 15
|
||||||
@@ -426,29 +431,22 @@ Background@SETTINGS_PANEL:
|
|||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Edge Scrolling
|
Text: Edge Scrolling
|
||||||
Checkbox@ALLOW_ZOOM_CHECKBOX:
|
Checkbox@LOCKMOUSE_CHECKBOX:
|
||||||
X: 15
|
X: 15
|
||||||
Y: 100
|
Y: 100
|
||||||
Width: 130
|
Width: 130
|
||||||
Height: 20
|
Height: 20
|
||||||
Font: Regular
|
Font: Regular
|
||||||
Text: Scroll Zooming
|
|
||||||
Checkbox@LOCKMOUSE_CHECKBOX:
|
|
||||||
X: 15
|
|
||||||
Y: 130
|
|
||||||
Width: 130
|
|
||||||
Height: 20
|
|
||||||
Font: Regular
|
|
||||||
Text: Lock mouse to window
|
Text: Lock mouse to window
|
||||||
Label@SCROLL_SPEED_LABEL:
|
Label@SCROLL_SPEED_LABEL:
|
||||||
X: PARENT_RIGHT - WIDTH - 270
|
X: 15
|
||||||
Y: 129
|
Y: 129
|
||||||
Width: 95
|
Width: 85
|
||||||
Height: 25
|
Height: 25
|
||||||
Text: Scroll Speed:
|
Text: Scroll Speed:
|
||||||
Align: Right
|
Align: Right
|
||||||
Slider@SCROLLSPEED_SLIDER:
|
Slider@SCROLLSPEED_SLIDER:
|
||||||
X: PARENT_RIGHT - WIDTH - 170
|
X: 95
|
||||||
Y: 133
|
Y: 133
|
||||||
Width: 100
|
Width: 100
|
||||||
Height: 20
|
Height: 20
|
||||||
@@ -456,20 +454,35 @@ Background@SETTINGS_PANEL:
|
|||||||
MinimumValue: 10
|
MinimumValue: 10
|
||||||
MaximumValue: 50
|
MaximumValue: 50
|
||||||
Label@UI_SCROLL_SPEED_LABEL:
|
Label@UI_SCROLL_SPEED_LABEL:
|
||||||
X: PARENT_RIGHT - WIDTH - 106
|
X: PARENT_RIGHT - WIDTH - 320
|
||||||
Y: 129
|
Y: 129
|
||||||
Width: 95
|
Width: 95
|
||||||
Height: 25
|
Height: 25
|
||||||
Text: UI Scroll:
|
Text: UI Scroll:
|
||||||
Align: Right
|
Align: Right
|
||||||
Slider@UI_SCROLLSPEED_SLIDER:
|
Slider@UI_SCROLLSPEED_SLIDER:
|
||||||
X: PARENT_RIGHT - WIDTH - 6
|
X: PARENT_RIGHT - WIDTH - 220
|
||||||
Y: 133
|
Y: 133
|
||||||
Width: 100
|
Width: 100
|
||||||
Height: 20
|
Height: 20
|
||||||
Ticks: 5
|
Ticks: 5
|
||||||
MinimumValue: 1
|
MinimumValue: 1
|
||||||
MaximumValue: 100
|
MaximumValue: 100
|
||||||
|
Label@ZOOM_SPEED_LABEL:
|
||||||
|
X: PARENT_RIGHT - WIDTH - 106
|
||||||
|
Y: 129
|
||||||
|
Width: 95
|
||||||
|
Height: 25
|
||||||
|
Text: Zoom Speed:
|
||||||
|
Align: Right
|
||||||
|
ExponentialSlider@ZOOMSPEED_SLIDER:
|
||||||
|
X: PARENT_RIGHT - WIDTH - 6
|
||||||
|
Y: 133
|
||||||
|
Width: 95
|
||||||
|
Height: 20
|
||||||
|
Ticks: 5
|
||||||
|
MinimumValue: 0.01
|
||||||
|
MaximumValue: 0.4
|
||||||
Container@HOTKEYS_PANEL:
|
Container@HOTKEYS_PANEL:
|
||||||
X: 5
|
X: 5
|
||||||
Y: 50
|
Y: 50
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ CycleStatusBars: COMMA
|
|||||||
Description: Cycle status bars display
|
Description: Cycle status bars display
|
||||||
Types: World, Player, Spectator
|
Types: World, Player, Spectator
|
||||||
|
|
||||||
TogglePixelDouble: PERIOD
|
ResetZoom: PERIOD
|
||||||
Description: Toggle pixel doubling
|
Description: Reset zoom
|
||||||
Types: World, Player, Spectator
|
Types: World, Player, Spectator
|
||||||
|
|
||||||
ToggleMute: M
|
ToggleMute: M
|
||||||
|
|||||||
Reference in New Issue
Block a user