From f46e15c63e53cb93b162dcb25685967cd797e124 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 20 Apr 2015 04:10:10 +1200 Subject: [PATCH] Separate terrain geometry visualization from DevMode. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also adds a “terrainoverlay" console command. --- OpenRA.Game/Traits/Player/DeveloperMode.cs | 3 -- .../Traits/World/TerrainGeometryOverlay.cs | 32 +++++++++++++------ .../Widgets/Logic/Ingame/DebugMenuLogic.cs | 7 ++-- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/OpenRA.Game/Traits/Player/DeveloperMode.cs b/OpenRA.Game/Traits/Player/DeveloperMode.cs index 37ce4ce703..d4ba4b849c 100644 --- a/OpenRA.Game/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Game/Traits/Player/DeveloperMode.cs @@ -23,7 +23,6 @@ namespace OpenRA.Traits public bool BuildAnywhere; public bool ShowCombatGeometry; public bool ShowDebugGeometry; - public bool ShowTerrainGeometry; public object Create(ActorInitializer init) { return new DeveloperMode(this); } } @@ -42,7 +41,6 @@ namespace OpenRA.Traits // Client side only public bool ShowCombatGeometry; public bool ShowDebugGeometry; - public bool ShowTerrainGeometry; public bool EnableAll; public DeveloperMode(DeveloperModeInfo info) @@ -56,7 +54,6 @@ namespace OpenRA.Traits BuildAnywhere = info.BuildAnywhere; ShowCombatGeometry = info.ShowCombatGeometry; ShowDebugGeometry = info.ShowDebugGeometry; - ShowTerrainGeometry = info.ShowTerrainGeometry; } public void ResolveOrder(Actor self, Order order) diff --git a/OpenRA.Mods.Common/Traits/World/TerrainGeometryOverlay.cs b/OpenRA.Mods.Common/Traits/World/TerrainGeometryOverlay.cs index e416707fa4..fafd8571d9 100644 --- a/OpenRA.Mods.Common/Traits/World/TerrainGeometryOverlay.cs +++ b/OpenRA.Mods.Common/Traits/World/TerrainGeometryOverlay.cs @@ -13,28 +13,42 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using OpenRA.Graphics; +using OpenRA.Mods.Common.Commands; using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits { [Desc("Renders a debug overlay showing the terrain cells. Attach this to the world actor.")] - public class TerrainGeometryOverlayInfo : ITraitInfo - { - public object Create(ActorInitializer init) { return new TerrainGeometryOverlay(init.Self); } - } + public class TerrainGeometryOverlayInfo : TraitInfo { } - public class TerrainGeometryOverlay : IRenderOverlay + public class TerrainGeometryOverlay : IRenderOverlay, IWorldLoaded, IChatCommand { - readonly Lazy devMode; + const string CommandName = "terrainoverlay"; + const string CommandDesc = "Toggles the terrain geometry overlay"; - public TerrainGeometryOverlay(Actor self) + public bool Enabled; + + public void WorldLoaded(World w, WorldRenderer wr) { - devMode = Exts.Lazy(() => self.World.LocalPlayer != null ? self.World.LocalPlayer.PlayerActor.Trait() : null); + var console = w.WorldActor.TraitOrDefault(); + var help = w.WorldActor.TraitOrDefault(); + + if (console == null || help == null) + return; + + console.RegisterCommand(CommandName, this); + help.RegisterHelp(CommandName, CommandDesc); + } + + public void InvokeCommand(string name, string arg) + { + if (name == CommandName) + Enabled ^= true; } public void Render(WorldRenderer wr) { - if (devMode.Value == null || !devMode.Value.ShowTerrainGeometry) + if (!Enabled) return; var map = wr.World.Map; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugMenuLogic.cs index 9a2ed13567..267ba36ca0 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/DebugMenuLogic.cs @@ -75,11 +75,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic showGeometryCheckbox.OnClick = () => devTrait.ShowDebugGeometry ^= true; } + var terrainGeometryTrait = world.WorldActor.Trait(); var showTerrainGeometryCheckbox = widget.GetOrNull("SHOW_TERRAIN_OVERLAY"); - if (showTerrainGeometryCheckbox != null) + if (showTerrainGeometryCheckbox != null && terrainGeometryTrait != null) { - showTerrainGeometryCheckbox.IsChecked = () => devTrait.ShowTerrainGeometry; - showTerrainGeometryCheckbox.OnClick = () => devTrait.ShowTerrainGeometry ^= true; + showTerrainGeometryCheckbox.IsChecked = () => terrainGeometryTrait.Enabled; + showTerrainGeometryCheckbox.OnClick = () => terrainGeometryTrait.Enabled ^= true; } var allTechCheckbox = widget.GetOrNull("ENABLE_TECH");