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 Visualization chat commands #13328

Merged
merged 2 commits into from Jul 23, 2017
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
14 changes: 7 additions & 7 deletions OpenRA.Game/Graphics/WorldRenderer.cs
Expand Up @@ -34,7 +34,7 @@ public sealed class WorldRenderer : IDisposable
readonly HardwarePalette palette = new HardwarePalette();
readonly Dictionary<string, PaletteReference> palettes = new Dictionary<string, PaletteReference>();
readonly TerrainRenderer terrainRenderer;
readonly Lazy<DeveloperMode> devTrait;
readonly Lazy<DebugVisualizations> debugVis;
readonly Func<string, PaletteReference> createPaletteReference;
readonly bool enableDepthBuffer;

Expand All @@ -61,7 +61,7 @@ internal WorldRenderer(ModData modData, World world)
Theater = new Theater(world.Map.Rules.TileSet);
terrainRenderer = new TerrainRenderer(world, this);

devTrait = Exts.Lazy(() => world.LocalPlayer != null ? world.LocalPlayer.PlayerActor.Trait<DeveloperMode>() : null);
debugVis = Exts.Lazy(() => world.WorldActor.TraitOrDefault<DebugVisualizations>());
}

public void UpdatePalettesForPlayer(string internalName, HSLColor color, bool replaceExisting)
Expand Down Expand Up @@ -125,11 +125,11 @@ public void Draw()
if (World.WorldActor.Disposed)
return;

if (devTrait.Value != null)
if (debugVis.Value != null)
{
Game.Renderer.WorldSpriteRenderer.SetDepthPreviewEnabled(devTrait.Value.ShowDepthPreview);
Game.Renderer.WorldRgbaSpriteRenderer.SetDepthPreviewEnabled(devTrait.Value.ShowDepthPreview);
Game.Renderer.WorldRgbaColorRenderer.SetDepthPreviewEnabled(devTrait.Value.ShowDepthPreview);
Game.Renderer.WorldSpriteRenderer.SetDepthPreviewEnabled(debugVis.Value.DepthBuffer);
Game.Renderer.WorldRgbaSpriteRenderer.SetDepthPreviewEnabled(debugVis.Value.DepthBuffer);
Game.Renderer.WorldRgbaColorRenderer.SetDepthPreviewEnabled(debugVis.Value.DepthBuffer);
}

RefreshPalette();
Expand Down Expand Up @@ -196,7 +196,7 @@ public void Draw()
foreach (var r in g)
r.Render(this);

if (devTrait.Value != null && devTrait.Value.ShowDebugGeometry)
if (debugVis.Value != null && debugVis.Value.RenderGeometry)
{
for (var i = 0; i < renderables.Count; i++)
renderables[i].RenderDebugGeometry(this);
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Game/OpenRA.Game.csproj
Expand Up @@ -181,7 +181,6 @@
<Compile Include="Sync.cs" />
<Compile Include="TraitDictionary.cs" />
<Compile Include="Traits\LintAttributes.cs" />
<Compile Include="Traits\Player\DeveloperMode.cs" />
<Compile Include="Traits\Player\PlayerResources.cs" />
<Compile Include="Traits\Selectable.cs" />
<Compile Include="Traits\Target.cs" />
Expand All @@ -190,6 +189,7 @@
<Compile Include="Traits\World\ResourceType.cs" />
<Compile Include="Traits\World\ScreenShaker.cs" />
<Compile Include="Traits\World\Shroud.cs" />
<Compile Include="Traits\World\DebugVisualizations.cs" />
<Compile Include="World.cs" />
<Compile Include="WorldUtils.cs" />
<Compile Include="VoiceExts.cs" />
Expand Down
24 changes: 24 additions & 0 deletions OpenRA.Game/Traits/World/DebugVisualizations.cs
@@ -0,0 +1,24 @@
#region Copyright & License Information
/*
* Copyright 2007-2017 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

namespace OpenRA.Traits
{
[Desc("Enables visualization commands. Attach this to the world actor.")]
public class DebugVisualizationsInfo : TraitInfo<DebugVisualizations> { }

public class DebugVisualizations
{
public bool CombatGeometry;
public bool RenderGeometry;
public bool DepthBuffer;
public bool ActorTags;
}
}
70 changes: 70 additions & 0 deletions OpenRA.Mods.Common/Commands/DebugVisualizationCommands.cs
@@ -0,0 +1,70 @@
#region Copyright & License Information
/*
* Copyright 2007-2017 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;
using OpenRA.Graphics;
using OpenRA.Traits;

namespace OpenRA.Mods.Common.Commands
{
[Desc("Enables visualization commands via the chatbox. Attach this to the world actor.")]
public class DebugVisualizationCommandsInfo : TraitInfo<DebugVisualizationCommands> { }

public class DebugVisualizationCommands : IChatCommand, IWorldLoaded
{
DebugVisualizations debugVis;

public void WorldLoaded(World w, WorldRenderer wr)
{
var world = w;
debugVis = world.WorldActor.TraitOrDefault<DebugVisualizations>();

if (debugVis == null)
return;

var console = world.WorldActor.Trait<ChatCommands>();
var help = world.WorldActor.Trait<HelpCommand>();

Action<string, string> register = (name, helpText) =>
{
console.RegisterCommand(name, this);
help.RegisterHelp(name, helpText);
};

register("showcombatgeometry", "toggles combat geometry overlay.");
register("showrendergeometry", "toggles render geometry overlay.");
register("showdepthbuffer", "toggles depth buffer overlay.");
register("showactortags", "toggles actor tags overlay.");
}

public void InvokeCommand(string name, string arg)
{
switch (name)
{
case "showcombatgeometry":
debugVis.CombatGeometry ^= true;
break;

case "showrendergeometry":
debugVis.RenderGeometry ^= true;
break;

case "showdepthbuffer":
debugVis.DepthBuffer ^= true;
break;

case "showactortags":
debugVis.ActorTags ^= true;
break;
}
}
}
}
2 changes: 2 additions & 0 deletions OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
Expand Up @@ -157,6 +157,7 @@
<Compile Include="Commands\DevCommands.cs" />
<Compile Include="Commands\HelpCommand.cs" />
<Compile Include="Commands\PlayerCommands.cs" />
<Compile Include="Commands\DebugVisualizationCommands.cs" />
<Compile Include="Graphics\ActorPreview.cs" />
<Compile Include="Graphics\BeamRenderable.cs" />
<Compile Include="Graphics\ContrailRenderable.cs" />
Expand Down Expand Up @@ -296,6 +297,7 @@
<Compile Include="Traits\CommandBarBlacklist.cs" />
<Compile Include="Traits\Health.cs" />
<Compile Include="Traits\HitShape.cs" />
<Compile Include="Traits\Player\DeveloperMode.cs" />
<Compile Include="Traits\PowerTooltip.cs" />
<Compile Include="Traits\Render\VeteranProductionIconOverlay.cs" />
<Compile Include="Traits\Capturable.cs" />
Expand Down
10 changes: 4 additions & 6 deletions OpenRA.Mods.Common/Traits/CombatDebugOverlay.cs
Expand Up @@ -10,7 +10,6 @@
#endregion

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
Expand All @@ -30,7 +29,7 @@ public class CombatDebugOverlay : IRenderAboveWorld, INotifyDamage, INotifyCreat
static readonly WVec TargetPosHLine = new WVec(0, 128, 0);
static readonly WVec TargetPosVLine = new WVec(128, 0, 0);

readonly DeveloperMode devMode;
readonly DebugVisualizations debugVis;
readonly HealthInfo healthInfo;
readonly Lazy<BodyOrientation> coords;

Expand All @@ -42,8 +41,7 @@ public CombatDebugOverlay(Actor self)
healthInfo = self.Info.TraitInfoOrDefault<HealthInfo>();
coords = Exts.Lazy(self.Trait<BodyOrientation>);

var localPlayer = self.World.LocalPlayer;
devMode = localPlayer != null ? localPlayer.PlayerActor.Trait<DeveloperMode>() : null;
debugVis = self.World.WorldActor.TraitOrDefault<DebugVisualizations>();
}

void INotifyCreated.Created(Actor self)
Expand All @@ -54,7 +52,7 @@ void INotifyCreated.Created(Actor self)

void IRenderAboveWorld.RenderAboveWorld(Actor self, WorldRenderer wr)
{
if (devMode == null || !devMode.ShowCombatGeometry)
if (debugVis == null || !debugVis.CombatGeometry)
return;

var wcr = Game.Renderer.WorldRgbaColorRenderer;
Expand Down Expand Up @@ -132,7 +130,7 @@ void DrawArmaments(Actor self, AttackBase attack, WorldRenderer wr, RgbaColorRen

void INotifyDamage.Damaged(Actor self, AttackInfo e)
{
if (devMode == null || !devMode.ShowCombatGeometry || e.Damage.Value == 0)
if (debugVis == null || !debugVis.CombatGeometry || e.Damage.Value == 0)
return;

if (healthInfo == null)
Expand Down
Expand Up @@ -11,8 +11,9 @@

using System.Collections.Generic;
using System.Linq;
using OpenRA.Traits;

namespace OpenRA.Traits
namespace OpenRA.Mods.Common.Traits
{
[Desc("Attach this to the player actor.")]
public class DeveloperModeInfo : ITraitInfo, ILobbyOptions
Expand Down Expand Up @@ -47,18 +48,6 @@ public class DeveloperModeInfo : ITraitInfo, ILobbyOptions
[Desc("Enable the path debug overlay by default.")]
public bool PathDebug;

[Desc("Enable the combat geometry overlay by default.")]
public bool ShowCombatGeometry;

[Desc("Enable the debug geometry overlay by default.")]
public bool ShowDebugGeometry;

[Desc("Enable the depth buffer overlay by default.")]
public bool ShowDepthPreview;

[Desc("Enable the actor tags overlay by default.")]
public bool ShowActorTags;

IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
{
yield return new LobbyBooleanOption("cheats", "Debug Menu", Enabled, Locked);
Expand Down Expand Up @@ -88,12 +77,6 @@ public class DeveloperMode : IResolveOrder, ISync, INotifyCreated
public bool UnlimitedPower { get { return Enabled && unlimitedPower; } }
public bool BuildAnywhere { get { return Enabled && buildAnywhere; } }

// Client side only
public bool ShowCombatGeometry;
public bool ShowDebugGeometry;
public bool ShowDepthPreview;
public bool ShowActorTags;

bool enableAll;

public DeveloperMode(DeveloperModeInfo info)
Expand All @@ -105,11 +88,6 @@ public DeveloperMode(DeveloperModeInfo info)
pathDebug = info.PathDebug;
unlimitedPower = info.UnlimitedPower;
buildAnywhere = info.BuildAnywhere;

ShowCombatGeometry = info.ShowCombatGeometry;
ShowDebugGeometry = info.ShowDebugGeometry;
ShowDepthPreview = info.ShowDepthPreview;
ShowActorTags = info.ShowActorTags;
}

void INotifyCreated.Created(Actor self)
Expand Down
Expand Up @@ -29,7 +29,7 @@ class CustomTerrainDebugOverlayInfo : ITraitInfo
class CustomTerrainDebugOverlay : IWorldLoaded, IChatCommand, IRender
{
const string CommandName = "debugcustomterrain";
const string CommandDesc = "Toggles the custom terrain debug overlay.";
const string CommandDesc = "toggles the custom terrain debug overlay.";

public bool Enabled;

Expand Down
7 changes: 3 additions & 4 deletions OpenRA.Mods.Common/Traits/Render/RenderDebugState.cs
Expand Up @@ -29,7 +29,7 @@ class RenderDebugStateInfo : ITraitInfo

class RenderDebugState : INotifyAddedToWorld, INotifyOwnerChanged, IRenderAboveShroudWhenSelected
{
readonly DeveloperMode devMode;
readonly DebugVisualizations debugVis;
readonly SpriteFont font;
readonly Actor self;
readonly WVec offset;
Expand All @@ -48,8 +48,7 @@ public RenderDebugState(Actor self, RenderDebugStateInfo info)
color = GetColor();
font = Game.Renderer.Fonts[info.Font];

var localPlayer = self.World.LocalPlayer;
devMode = localPlayer != null ? localPlayer.PlayerActor.Trait<DeveloperMode>() : null;
debugVis = self.World.WorldActor.TraitOrDefault<DebugVisualizations>();
ai = self.Owner.PlayerActor.TraitsImplementing<HackyAI>().FirstOrDefault(x => x.IsEnabled);
}

Expand All @@ -70,7 +69,7 @@ Color GetColor()

IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
{
if (devMode == null || !devMode.ShowActorTags)
if (debugVis == null || !debugVis.ActorTags)
yield break;

yield return new TextRenderable(font, self.CenterPosition - offset, 0, color, tagString);
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Mods.Common/Traits/World/TerrainGeometryOverlay.cs
Expand Up @@ -23,7 +23,7 @@ public class TerrainGeometryOverlayInfo : TraitInfo<TerrainGeometryOverlay> { }
public class TerrainGeometryOverlay : IRenderAboveWorld, IWorldLoaded, IChatCommand
{
const string CommandName = "terrainoverlay";
const string CommandDesc = "Toggles the terrain geometry overlay";
const string CommandDesc = "toggles the terrain geometry overlay.";

public bool Enabled;

Expand Down
9 changes: 3 additions & 6 deletions OpenRA.Mods.Common/Warheads/HealthPercentageDamageWarhead.cs
Expand Up @@ -25,12 +25,9 @@ public override void DoImpact(WPos pos, Actor firedBy, IEnumerable<int> damageMo
{
var world = firedBy.World;

if (world.LocalPlayer != null)
{
var devMode = world.LocalPlayer.PlayerActor.TraitOrDefault<DeveloperMode>();
if (devMode != null && devMode.ShowCombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(pos, Spread, DebugOverlayColor);
}
var debugVis = world.WorldActor.TraitOrDefault<DebugVisualizations>();
if (debugVis != null && debugVis.CombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(pos, Spread, DebugOverlayColor);

var range = Spread[0];
var hitActors = world.FindActorsInCircle(pos, range);
Expand Down
9 changes: 3 additions & 6 deletions OpenRA.Mods.Common/Warheads/SpreadDamageWarhead.cs
Expand Up @@ -54,12 +54,9 @@ public override void DoImpact(WPos pos, Actor firedBy, IEnumerable<int> damageMo
{
var world = firedBy.World;

if (world.LocalPlayer != null)
{
var devMode = world.LocalPlayer.PlayerActor.TraitOrDefault<DeveloperMode>();
if (devMode != null && devMode.ShowCombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(pos, Range, DebugOverlayColor);
}
var debugVis = world.WorldActor.TraitOrDefault<DebugVisualizations>();
if (debugVis != null && debugVis.CombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(pos, Range, DebugOverlayColor);

// This only finds actors where the center is within the search radius,
// so we need to search beyond the maximum spread to account for actors with large health radius
Expand Down
15 changes: 6 additions & 9 deletions OpenRA.Mods.Common/Warheads/TargetDamageWarhead.cs
Expand Up @@ -10,7 +10,6 @@
#endregion

using System.Collections.Generic;
using OpenRA.GameRules;
using OpenRA.Mods.Common.Traits;
using OpenRA.Traits;

Expand All @@ -33,12 +32,9 @@ public override void DoImpact(WPos pos, Actor firedBy, IEnumerable<int> damageMo
var world = firedBy.World;
var debugOverlayRange = new[] { WDist.Zero, new WDist(128) };

if (world.LocalPlayer != null)
{
var devMode = world.LocalPlayer.PlayerActor.TraitOrDefault<DeveloperMode>();
if (devMode != null && devMode.ShowCombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(pos, debugOverlayRange, DebugOverlayColor);
}
var debugVis = world.WorldActor.TraitOrDefault<DebugVisualizations>();
if (debugVis != null && debugVis.CombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(pos, debugOverlayRange, DebugOverlayColor);
}

public override void DoImpact(Actor victim, Actor firedBy, IEnumerable<int> damageModifiers)
Expand All @@ -53,8 +49,9 @@ public override void DoImpact(Actor victim, Actor firedBy, IEnumerable<int> dama
if (world.LocalPlayer != null)
{
var debugOverlayRange = new[] { WDist.Zero, new WDist(128) };
var devMode = world.LocalPlayer.PlayerActor.TraitOrDefault<DeveloperMode>();
if (devMode != null && devMode.ShowCombatGeometry)

var debugVis = world.WorldActor.TraitOrDefault<DebugVisualizations>();
if (debugVis != null && debugVis.CombatGeometry)
world.WorldActor.Trait<WarheadDebugOverlay>().AddImpact(victim.CenterPosition, debugOverlayRange, DebugOverlayColor);
}
}
Expand Down