From 404d8235c81b009aab75dcb853cc456fc056e20c Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 25 Sep 2016 13:21:22 +0100 Subject: [PATCH] Show a tooltip over map resources. --- .../Widgets/Logic/Ingame/WorldTooltipLogic.cs | 3 ++ .../Widgets/ViewportControllerWidget.cs | 29 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/WorldTooltipLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/WorldTooltipLogic.cs index 3abe8ff6cf..ef0b137d9d 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/WorldTooltipLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/WorldTooltipLogic.cs @@ -57,6 +57,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic case WorldTooltipType.Unexplored: labelText = "Unrevealed Terrain"; break; + case WorldTooltipType.Resource: + labelText = viewport.ResourceTooltip.Info.Name; + break; case WorldTooltipType.Actor: { o = viewport.ActorTooltip.Owner; diff --git a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs index bd5e9c0314..afe88e4fa9 100644 --- a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs @@ -13,15 +13,18 @@ using System; using System.Collections.Generic; using System.Linq; using OpenRA.Graphics; +using OpenRA.Mods.Common.Traits; using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets { - public enum WorldTooltipType { None, Unexplored, Actor, FrozenActor } + public enum WorldTooltipType { None, Unexplored, Actor, FrozenActor, Resource } public class ViewportControllerWidget : Widget { + readonly ResourceLayer resourceLayer; + public readonly string TooltipTemplate = "WORLD_TOOLTIP"; public readonly string TooltipContainer; Lazy tooltipContainer; @@ -30,6 +33,7 @@ namespace OpenRA.Mods.Common.Widgets public ITooltip ActorTooltip { get; private set; } public IProvideTooltipInfo[] ActorTooltipExtra { get; private set; } public FrozenActor FrozenActorTooltip { get; private set; } + public ResourceType ResourceTooltip { get; private set; } public int EdgeScrollThreshold = 15; public int EdgeCornerScrollThreshold = 35; @@ -105,6 +109,8 @@ namespace OpenRA.Mods.Common.Widgets this.worldRenderer = worldRenderer; tooltipContainer = Exts.Lazy(() => Ui.Root.Get(TooltipContainer)); + + resourceLayer = world.WorldActor.TraitOrDefault(); } public override void MouseEntered() @@ -198,13 +204,24 @@ namespace OpenRA.Mods.Common.Widgets if (frozen != null) { var actor = frozen.Actor; - if (actor != null && actor.TraitsImplementing().Any(t => !t.IsVisible(actor, world.RenderPlayer))) + if (actor != null && actor.TraitsImplementing().All(t => t.IsVisible(actor, world.RenderPlayer))) + { + FrozenActorTooltip = frozen; + if (frozen.Actor != null) + ActorTooltipExtra = frozen.Actor.TraitsImplementing().ToArray(); + TooltipType = WorldTooltipType.FrozenActor; return; + } + } - FrozenActorTooltip = frozen; - if (frozen.Actor != null) - ActorTooltipExtra = frozen.Actor.TraitsImplementing().ToArray(); - TooltipType = WorldTooltipType.FrozenActor; + if (resourceLayer != null) + { + var resource = resourceLayer.GetRenderedResource(cell); + if (resource != null) + { + TooltipType = WorldTooltipType.Resource; + ResourceTooltip = resource; + } } }