Selection, cache DeveloperMode trait.
This commit is contained in:
@@ -29,6 +29,8 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
|
|
||||||
protected readonly SelectionDecorationsBaseInfo Info;
|
protected readonly SelectionDecorationsBaseInfo Info;
|
||||||
|
|
||||||
|
DeveloperMode developerMode;
|
||||||
|
|
||||||
public SelectionDecorationsBase(SelectionDecorationsBaseInfo info)
|
public SelectionDecorationsBase(SelectionDecorationsBaseInfo info)
|
||||||
{
|
{
|
||||||
Info = info;
|
Info = info;
|
||||||
@@ -69,7 +71,6 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
IEnumerable<IRenderable> DrawDecorations(Actor self, WorldRenderer wr)
|
IEnumerable<IRenderable> DrawDecorations(Actor self, WorldRenderer wr)
|
||||||
{
|
{
|
||||||
var selected = self.World.Selection.Contains(self);
|
var selected = self.World.Selection.Contains(self);
|
||||||
var rollover = self.World.Selection.RolloverContains(self);
|
|
||||||
var regularWorld = self.World.Type == WorldType.Regular;
|
var regularWorld = self.World.Type == WorldType.Regular;
|
||||||
var statusBars = Game.Settings.Game.StatusBars;
|
var statusBars = Game.Settings.Game.StatusBars;
|
||||||
|
|
||||||
@@ -77,13 +78,18 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
// * actor is selected / in active drag rectangle / under the mouse
|
// * actor is selected / in active drag rectangle / under the mouse
|
||||||
// * status bar preference is set to "always show"
|
// * status bar preference is set to "always show"
|
||||||
// * status bar preference is set to "when damaged" and actor is damaged
|
// * 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);
|
|| (regularWorld && statusBars == StatusBarsType.DamageShow && self.GetDamageState() != DamageState.Undamaged);
|
||||||
|
|
||||||
// Extra bars are shown when:
|
// Extra bars are shown when:
|
||||||
// * actor is selected / in active drag rectangle / under the mouse
|
// * actor is selected / in active drag rectangle / under the mouse
|
||||||
// * status bar preference is set to "always show" or "when damaged"
|
// * 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)
|
if (selected)
|
||||||
foreach (var r in RenderSelectionBox(self, wr, Info.SelectionBoxColor))
|
foreach (var r in RenderSelectionBox(self, wr, Info.SelectionBoxColor))
|
||||||
@@ -93,8 +99,14 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
foreach (var r in RenderSelectionBars(self, wr, displayHealth, displayExtra))
|
foreach (var r in RenderSelectionBars(self, wr, displayHealth, displayExtra))
|
||||||
yield return r;
|
yield return r;
|
||||||
|
|
||||||
if (selected && self.World.LocalPlayer != null && self.World.LocalPlayer.PlayerActor.Trait<DeveloperMode>().PathDebug)
|
if (selected && self.World.LocalPlayer != null)
|
||||||
yield return new TargetLineRenderable(ActivityTargetPath(self), Color.Green, 1, 2);
|
{
|
||||||
|
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
|
// 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
|
// This avoids graphical glitches with pip rows and icons overlapping the selection box
|
||||||
|
|||||||
Reference in New Issue
Block a user