diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugLogic.cs new file mode 100644 index 0000000000..9b9d1cf3c2 --- /dev/null +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugLogic.cs @@ -0,0 +1,44 @@ +#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.Linq; +using OpenRA.Graphics; +using OpenRA.Mods.Common.Traits; +using OpenRA.Network; +using OpenRA.Widgets; + +namespace OpenRA.Mods.Common.Widgets.Logic.Ingame +{ + public class DebugLogic : ChromeLogic + { + [ObjectCreator.UseCtor] + public DebugLogic(Widget widget, OrderManager orderManager, World world, WorldRenderer worldRenderer) + { + var geometryOverlay = world.WorldActor.TraitOrDefault(); + if (geometryOverlay != null) + { + var labelWidget = widget.Get("DEBUG_TEXT"); + + var cellPosText = new CachedTransform(t => + { + var cell = worldRenderer.Viewport.ViewToWorld(Viewport.LastMousePos); + var map = worldRenderer.World.Map; + var wpos = map.CenterOfCell(cell); + return map.Height.Contains(cell) ? "({0},{1}) ({2})".F(cell, map.Height[cell], wpos) : ""; + }); + + labelWidget.GetText = () => cellPosText.Update(Viewport.LastMousePos); + + labelWidget.IsVisible = () => geometryOverlay.Enabled; + } + } + } +} diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs index ef383b99b7..1589ac539b 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs @@ -9,6 +9,7 @@ */ #endregion +using OpenRA.Mods.Common.Commands; using OpenRA.Mods.Common.Scripting; using OpenRA.Mods.Common.Traits; using OpenRA.Widgets; @@ -53,6 +54,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic }; } + var devMode = world.LocalPlayer.PlayerActor.Trait(); + if (devMode.Enabled) + Game.LoadWidget(world, "DEBUG_WIDGETS", worldRoot, new WidgetArgs()); + Game.LoadWidget(world, "CHAT_PANEL", worldRoot, new WidgetArgs() { { "isMenuChat", false } }); world.GameOver += () => diff --git a/mods/cnc/chrome/ingame-debuginfo.yaml b/mods/cnc/chrome/ingame-debuginfo.yaml new file mode 100644 index 0000000000..fd28c29844 --- /dev/null +++ b/mods/cnc/chrome/ingame-debuginfo.yaml @@ -0,0 +1,14 @@ +Container@DEBUG_WIDGETS: + Logic: DebugLogic + X: WINDOW_RIGHT / 2 - WIDTH + Y: 60 + Width: 100 + Height: 55 + Children: + Label@DEBUG_TEXT: + Y: 35 + Width: PARENT_RIGHT + Height: 15 + Align: Center + Font: Bold + Contrast: true diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 1103495f5f..a590e10f7f 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -120,6 +120,7 @@ ChromeLayout: cnc|chrome/ingame-infoobjectives.yaml cnc|chrome/ingame-infostats.yaml cnc|chrome/ingame-observerstats.yaml + cnc|chrome/ingame-debuginfo.yaml cnc|chrome/music.yaml cnc|chrome/settings.yaml cnc|chrome/credits.yaml diff --git a/mods/common/chrome/ingame-debuginfo.yaml b/mods/common/chrome/ingame-debuginfo.yaml new file mode 100644 index 0000000000..fd28c29844 --- /dev/null +++ b/mods/common/chrome/ingame-debuginfo.yaml @@ -0,0 +1,14 @@ +Container@DEBUG_WIDGETS: + Logic: DebugLogic + X: WINDOW_RIGHT / 2 - WIDTH + Y: 60 + Width: 100 + Height: 55 + Children: + Label@DEBUG_TEXT: + Y: 35 + Width: PARENT_RIGHT + Height: 15 + Align: Center + Font: Bold + Contrast: true diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 59382355ba..214b8628c6 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -80,6 +80,7 @@ ChromeLayout: d2k|chrome/ingame-player.yaml common|chrome/ingame-perf.yaml common|chrome/ingame-debug.yaml + common|chrome/ingame-debuginfo.yaml common|chrome/ingame-infochat.yaml d2k|chrome/mainmenu.yaml common|chrome/settings.yaml diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index a3f664d1c5..eb7905e37a 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -95,6 +95,7 @@ ChromeLayout: ra|chrome/ingame-player.yaml common|chrome/ingame-perf.yaml common|chrome/ingame-debug.yaml + common|chrome/ingame-debuginfo.yaml common|chrome/ingame-infochat.yaml common|chrome/mainmenu.yaml common|chrome/settings.yaml diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 3ca217105a..16177fba8a 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -142,6 +142,7 @@ ChromeLayout: ts|chrome/ingame-player.yaml common|chrome/ingame-perf.yaml ts|chrome/ingame-debug.yaml + common|chrome/ingame-debuginfo.yaml common|chrome/ingame-infochat.yaml common|chrome/mainmenu.yaml ts|chrome/mainmenu-prerelease-notification.yaml