Skip to content

Commit

Permalink
Selection, cache DeveloperMode trait.
Browse files Browse the repository at this point in the history
  • Loading branch information
anvilvapre authored and PunkPun committed Sep 11, 2022
1 parent 3be0e9e commit 7f404f6
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions OpenRA.Mods.Common/Traits/Render/SelectionDecorationsBase.cs
Expand Up @@ -29,6 +29,8 @@ public abstract class SelectionDecorationsBase : ISelectionDecorations, IRenderA

protected readonly SelectionDecorationsBaseInfo Info;

DeveloperMode developerMode;

public SelectionDecorationsBase(SelectionDecorationsBaseInfo info)
{
Info = info;
Expand Down Expand Up @@ -69,21 +71,25 @@ IEnumerable<IRenderable> IRenderAnnotations.RenderAnnotations(Actor self, WorldR
IEnumerable<IRenderable> DrawDecorations(Actor self, WorldRenderer wr)
{
var selected = self.World.Selection.Contains(self);
var rollover = self.World.Selection.RolloverContains(self);
var regularWorld = self.World.Type == WorldType.Regular;
var statusBars = Game.Settings.Game.StatusBars;

// Health bars are shown when:
// * actor is selected / in active drag rectangle / under the mouse
// * status bar preference is set to "always show"
// * status bar preference is set to "when damaged" and actor is damaged
var displayHealth = selected || rollover || (regularWorld && statusBars == StatusBarsType.AlwaysShow)
var displayHealth = selected || (regularWorld && statusBars == StatusBarsType.AlwaysShow)
|| (regularWorld && statusBars == StatusBarsType.DamageShow && self.GetDamageState() != DamageState.Undamaged);

// Extra bars are shown when:
// * actor is selected / in active drag rectangle / under the mouse
// * status bar preference is set to "always show" or "when damaged"
var displayExtra = selected || rollover || (regularWorld && statusBars != StatusBarsType.Standard);
var displayExtra = selected || (regularWorld && statusBars != StatusBarsType.Standard);

// PERF: Only search rollover enumerable if needed.
if (!displayHealth || !displayExtra)
if (self.World.Selection.RolloverContains(self))
displayHealth = displayExtra = true;

if (selected)
foreach (var r in RenderSelectionBox(self, wr, Info.SelectionBoxColor))
Expand All @@ -93,8 +99,14 @@ IEnumerable<IRenderable> DrawDecorations(Actor self, WorldRenderer wr)
foreach (var r in RenderSelectionBars(self, wr, displayHealth, displayExtra))
yield return r;

if (selected && self.World.LocalPlayer != null && self.World.LocalPlayer.PlayerActor.Trait<DeveloperMode>().PathDebug)
yield return new TargetLineRenderable(ActivityTargetPath(self), Color.Green, 1, 2);
if (selected && self.World.LocalPlayer != null)
{
if (developerMode == null)
developerMode = self.World.LocalPlayer.PlayerActor.Trait<DeveloperMode>();

if (developerMode.PathDebug)
yield return new TargetLineRenderable(ActivityTargetPath(self), Color.Green, 1, 2);
}

// Hide decorations for spectators that zoom out further than the normal minimum level
// This avoids graphical glitches with pip rows and icons overlapping the selection box
Expand Down

0 comments on commit 7f404f6

Please sign in to comment.