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:
labelText = "Unrevealed Terrain";
break;
case WorldTooltipType.Resource:
labelText = viewport.ResourceTooltip.Info.Name;
break;
case WorldTooltipType.Actor:
{
o = viewport.ActorTooltip.Owner;

View File

@@ -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<TooltipContainerWidget> 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<TooltipContainerWidget>(TooltipContainer));
resourceLayer = world.WorldActor.TraitOrDefault<ResourceLayer>();
}
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<IVisibilityModifier>().Any(t => !t.IsVisible(actor, world.RenderPlayer)))
return;
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;
}
}
if (resourceLayer != null)
{
var resource = resourceLayer.GetRenderedResource(cell);
if (resource != null)
{
TooltipType = WorldTooltipType.Resource;
ResourceTooltip = resource;
}
}
}