From c0cb52a5caa8f5a6cdabf85d8ebee5f113daf09e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 7 Aug 2013 13:48:23 +1200 Subject: [PATCH] Show tooltips for frozen actors. --- .../Widgets/ViewportControllerWidget.cs | 14 +++++++++++- .../Widgets/Logic/WorldTooltipLogic.cs | 22 +++++++++++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/OpenRA.Game/Widgets/ViewportControllerWidget.cs b/OpenRA.Game/Widgets/ViewportControllerWidget.cs index 7a3ed4b510..25b4970904 100755 --- a/OpenRA.Game/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Game/Widgets/ViewportControllerWidget.cs @@ -19,7 +19,7 @@ using OpenRA.Traits; namespace OpenRA.Widgets { - public enum WorldTooltipType { None, Unexplored, Actor } + public enum WorldTooltipType { None, Unexplored, Actor, FrozenActor } public class ViewportControllerWidget : Widget { @@ -29,6 +29,7 @@ namespace OpenRA.Widgets public WorldTooltipType TooltipType { get; private set; } public IToolTip ActorTooltip { get; private set; } + public FrozenActor FrozenActorTooltip { get; private set; } public int EdgeScrollThreshold = 15; public int EdgeCornerScrollThreshold = 35; @@ -113,6 +114,17 @@ namespace OpenRA.Widgets TooltipType = WorldTooltipType.Actor; return; } + + var frozen = world.FindFrozenActorsAtMouse(Viewport.LastMousePos) + .Where(a => a.TooltipName != null) + .OrderByDescending(a => a.Info.SelectionPriority()) + .FirstOrDefault(); + + if (frozen != null) + { + FrozenActorTooltip = frozen; + TooltipType = WorldTooltipType.FrozenActor; + } } public static string GetScrollCursor(Widget w, ScrollDirection edge, int2 pos) diff --git a/OpenRA.Mods.RA/Widgets/Logic/WorldTooltipLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/WorldTooltipLogic.cs index e34eb34ead..4e946b1286 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/WorldTooltipLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/WorldTooltipLogic.cs @@ -41,16 +41,30 @@ namespace OpenRA.Mods.RA.Widgets.Logic if (viewport == null || viewport.TooltipType == WorldTooltipType.None) return; - labelText = viewport.TooltipType == WorldTooltipType.Unexplored ? "Unexplored Terrain" : - viewport.ActorTooltip.Name(); + Player o = null; + switch (viewport.TooltipType) + { + case WorldTooltipType.Unexplored: + labelText = "Unexplored Terrain"; + break; + case WorldTooltipType.Actor: + labelText = viewport.ActorTooltip.Name(); + o = viewport.ActorTooltip.Owner(); + break; + case WorldTooltipType.FrozenActor: + labelText = viewport.FrozenActorTooltip.TooltipName; + o = viewport.FrozenActorTooltip.TooltipOwner; + break; + } + var textWidth = font.Measure(labelText).X; if (textWidth != cachedWidth) { label.Bounds.Width = textWidth; widget.Bounds.Width = 2*label.Bounds.X + textWidth; } - var o = viewport.ActorTooltip != null ? viewport.ActorTooltip.Owner() : null; - showOwner = viewport.TooltipType == WorldTooltipType.Actor && o != null && !o.NonCombatant; + + showOwner = o != null && !o.NonCombatant; if (showOwner) {