Separate terrain geometry visualization from DevMode.

Also adds a “terrainoverlay" console command.
This commit is contained in:
Paul Chote
2015-04-20 04:10:10 +12:00
parent ccf9d8fe97
commit f46e15c63e
3 changed files with 27 additions and 15 deletions

View File

@@ -23,7 +23,6 @@ namespace OpenRA.Traits
public bool BuildAnywhere; public bool BuildAnywhere;
public bool ShowCombatGeometry; public bool ShowCombatGeometry;
public bool ShowDebugGeometry; public bool ShowDebugGeometry;
public bool ShowTerrainGeometry;
public object Create(ActorInitializer init) { return new DeveloperMode(this); } public object Create(ActorInitializer init) { return new DeveloperMode(this); }
} }
@@ -42,7 +41,6 @@ namespace OpenRA.Traits
// Client side only // Client side only
public bool ShowCombatGeometry; public bool ShowCombatGeometry;
public bool ShowDebugGeometry; public bool ShowDebugGeometry;
public bool ShowTerrainGeometry;
public bool EnableAll; public bool EnableAll;
public DeveloperMode(DeveloperModeInfo info) public DeveloperMode(DeveloperModeInfo info)
@@ -56,7 +54,6 @@ namespace OpenRA.Traits
BuildAnywhere = info.BuildAnywhere; BuildAnywhere = info.BuildAnywhere;
ShowCombatGeometry = info.ShowCombatGeometry; ShowCombatGeometry = info.ShowCombatGeometry;
ShowDebugGeometry = info.ShowDebugGeometry; ShowDebugGeometry = info.ShowDebugGeometry;
ShowTerrainGeometry = info.ShowTerrainGeometry;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)

View File

@@ -13,28 +13,42 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Mods.Common.Commands;
using OpenRA.Traits; using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
[Desc("Renders a debug overlay showing the terrain cells. Attach this to the world actor.")] [Desc("Renders a debug overlay showing the terrain cells. Attach this to the world actor.")]
public class TerrainGeometryOverlayInfo : ITraitInfo public class TerrainGeometryOverlayInfo : TraitInfo<TerrainGeometryOverlay> { }
public class TerrainGeometryOverlay : IRenderOverlay, IWorldLoaded, IChatCommand
{ {
public object Create(ActorInitializer init) { return new TerrainGeometryOverlay(init.Self); } const string CommandName = "terrainoverlay";
const string CommandDesc = "Toggles the terrain geometry overlay";
public bool Enabled;
public void WorldLoaded(World w, WorldRenderer wr)
{
var console = w.WorldActor.TraitOrDefault<ChatCommands>();
var help = w.WorldActor.TraitOrDefault<HelpCommand>();
if (console == null || help == null)
return;
console.RegisterCommand(CommandName, this);
help.RegisterHelp(CommandName, CommandDesc);
} }
public class TerrainGeometryOverlay : IRenderOverlay public void InvokeCommand(string name, string arg)
{ {
readonly Lazy<DeveloperMode> devMode; if (name == CommandName)
Enabled ^= true;
public TerrainGeometryOverlay(Actor self)
{
devMode = Exts.Lazy(() => self.World.LocalPlayer != null ? self.World.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
} }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
if (devMode.Value == null || !devMode.Value.ShowTerrainGeometry) if (!Enabled)
return; return;
var map = wr.World.Map; var map = wr.World.Map;

View File

@@ -75,11 +75,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
showGeometryCheckbox.OnClick = () => devTrait.ShowDebugGeometry ^= true; showGeometryCheckbox.OnClick = () => devTrait.ShowDebugGeometry ^= true;
} }
var terrainGeometryTrait = world.WorldActor.Trait<TerrainGeometryOverlay>();
var showTerrainGeometryCheckbox = widget.GetOrNull<CheckboxWidget>("SHOW_TERRAIN_OVERLAY"); var showTerrainGeometryCheckbox = widget.GetOrNull<CheckboxWidget>("SHOW_TERRAIN_OVERLAY");
if (showTerrainGeometryCheckbox != null) if (showTerrainGeometryCheckbox != null && terrainGeometryTrait != null)
{ {
showTerrainGeometryCheckbox.IsChecked = () => devTrait.ShowTerrainGeometry; showTerrainGeometryCheckbox.IsChecked = () => terrainGeometryTrait.Enabled;
showTerrainGeometryCheckbox.OnClick = () => devTrait.ShowTerrainGeometry ^= true; showTerrainGeometryCheckbox.OnClick = () => terrainGeometryTrait.Enabled ^= true;
} }
var allTechCheckbox = widget.GetOrNull<CheckboxWidget>("ENABLE_TECH"); var allTechCheckbox = widget.GetOrNull<CheckboxWidget>("ENABLE_TECH");