Show a tooltip over map resources.

This commit is contained in:
Paul Chote
2016-09-25 13:21:22 +01:00
parent 74602474e3
commit 404d8235c8
2 changed files with 26 additions and 6 deletions

View File

@@ -57,6 +57,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
case WorldTooltipType.Unexplored: case WorldTooltipType.Unexplored:
labelText = "Unrevealed Terrain"; labelText = "Unrevealed Terrain";
break; break;
case WorldTooltipType.Resource:
labelText = viewport.ResourceTooltip.Info.Name;
break;
case WorldTooltipType.Actor: case WorldTooltipType.Actor:
{ {
o = viewport.ActorTooltip.Owner; o = viewport.ActorTooltip.Owner;

View File

@@ -13,15 +13,18 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets; using OpenRA.Widgets;
namespace OpenRA.Mods.Common.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 public class ViewportControllerWidget : Widget
{ {
readonly ResourceLayer resourceLayer;
public readonly string TooltipTemplate = "WORLD_TOOLTIP"; public readonly string TooltipTemplate = "WORLD_TOOLTIP";
public readonly string TooltipContainer; public readonly string TooltipContainer;
Lazy<TooltipContainerWidget> tooltipContainer; Lazy<TooltipContainerWidget> tooltipContainer;
@@ -30,6 +33,7 @@ namespace OpenRA.Mods.Common.Widgets
public ITooltip ActorTooltip { get; private set; } public ITooltip ActorTooltip { get; private set; }
public IProvideTooltipInfo[] ActorTooltipExtra { get; private set; } public IProvideTooltipInfo[] ActorTooltipExtra { get; private set; }
public FrozenActor FrozenActorTooltip { get; private set; } public FrozenActor FrozenActorTooltip { get; private set; }
public ResourceType ResourceTooltip { get; private set; }
public int EdgeScrollThreshold = 15; public int EdgeScrollThreshold = 15;
public int EdgeCornerScrollThreshold = 35; public int EdgeCornerScrollThreshold = 35;
@@ -105,6 +109,8 @@ namespace OpenRA.Mods.Common.Widgets
this.worldRenderer = worldRenderer; this.worldRenderer = worldRenderer;
tooltipContainer = Exts.Lazy(() => tooltipContainer = Exts.Lazy(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer)); Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
resourceLayer = world.WorldActor.TraitOrDefault<ResourceLayer>();
} }
public override void MouseEntered() public override void MouseEntered()
@@ -198,13 +204,24 @@ namespace OpenRA.Mods.Common.Widgets
if (frozen != null) if (frozen != null)
{ {
var actor = frozen.Actor; var actor = frozen.Actor;
if (actor != null && actor.TraitsImplementing<IVisibilityModifier>().Any(t => !t.IsVisible(actor, world.RenderPlayer))) if (actor != null && actor.TraitsImplementing<IVisibilityModifier>().All(t => t.IsVisible(actor, world.RenderPlayer)))
{
FrozenActorTooltip = frozen;
if (frozen.Actor != null)
ActorTooltipExtra = frozen.Actor.TraitsImplementing<IProvideTooltipInfo>().ToArray();
TooltipType = WorldTooltipType.FrozenActor;
return; return;
}
}
FrozenActorTooltip = frozen; if (resourceLayer != null)
if (frozen.Actor != null) {
ActorTooltipExtra = frozen.Actor.TraitsImplementing<IProvideTooltipInfo>().ToArray(); var resource = resourceLayer.GetRenderedResource(cell);
TooltipType = WorldTooltipType.FrozenActor; if (resource != null)
{
TooltipType = WorldTooltipType.Resource;
ResourceTooltip = resource;
}
} }
} }