Merge pull request #12103 from pchote/resource-tooltip
Add tooltips to map resources.
This commit is contained in:
@@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common
|
||||
return false;
|
||||
|
||||
// Can the harvester collect this kind of resource?
|
||||
if (!harvInfo.Resources.Contains(resType.Info.Name))
|
||||
if (!harvInfo.Resources.Contains(resType.Info.Type))
|
||||
return false;
|
||||
|
||||
if (territory != null)
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
if (underCursor != null)
|
||||
editorWidget.SetTooltip(underCursor.Tooltip);
|
||||
else if (mapResources.Contains(cell) && resources.TryGetValue(mapResources[cell].Type, out type))
|
||||
editorWidget.SetTooltip(type.Info.Name);
|
||||
editorWidget.SetTooltip(type.Info.Type);
|
||||
else
|
||||
editorWidget.SetTooltip(null);
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
preview.GetScale = () => worldRenderer.Viewport.Zoom;
|
||||
preview.IsVisible = () => editorWidget.CurrentBrush == this;
|
||||
|
||||
var variant = resource.Variants.FirstOrDefault();
|
||||
var variant = resource.Sequences.FirstOrDefault();
|
||||
var sequence = wr.World.Map.Rules.Sequences.GetSequence("resources", variant);
|
||||
var sprite = sequence.GetSprite(resource.MaxDensity - 1);
|
||||
preview.GetSprite = () => sprite;
|
||||
|
||||
@@ -478,7 +478,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var res = self.World.WorldActor.Trait<ResourceLayer>().GetRenderedResource(location);
|
||||
var info = self.Info.TraitInfo<HarvesterInfo>();
|
||||
|
||||
if (res == null || !info.Resources.Contains(res.Info.Name))
|
||||
if (res == null || !info.Resources.Contains(res.Info.Type))
|
||||
return false;
|
||||
|
||||
cursor = "harvest";
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
this.info = info;
|
||||
|
||||
resourceType = self.World.WorldActor.TraitsImplementing<ResourceType>()
|
||||
.FirstOrDefault(t => t.Info.Name == info.ResourceType);
|
||||
.FirstOrDefault(t => t.Info.Type == info.ResourceType);
|
||||
|
||||
if (resourceType == null)
|
||||
throw new InvalidOperationException("No such resource type `{0}`".F(info.ResourceType));
|
||||
|
||||
@@ -367,6 +367,25 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
Console.WriteLine("Actor type `{0}` is denoted as a RearmBuilding. Consider adding the `WithRearmAnimation` trait to it.".F(host));
|
||||
}
|
||||
|
||||
// Resource type properties were renamed, and support for tooltips added
|
||||
if (engineVersion < 20160925)
|
||||
{
|
||||
if (node.Key.StartsWith("ResourceType"))
|
||||
{
|
||||
var image = node.Value.Nodes.FirstOrDefault(n => n.Key == "Sequence");
|
||||
if (image != null)
|
||||
image.Key = "Image";
|
||||
|
||||
var sequences = node.Value.Nodes.FirstOrDefault(n => n.Key == "Variants");
|
||||
if (sequences != null)
|
||||
sequences.Key = "Sequences";
|
||||
|
||||
var name = node.Value.Nodes.FirstOrDefault(n => n.Key == "Name");
|
||||
if (name != null)
|
||||
node.Value.Nodes.Add(new MiniYamlNode("Type", name.Value.Value));
|
||||
}
|
||||
}
|
||||
|
||||
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Warheads
|
||||
var allCells = world.Map.FindTilesInAnnulus(targetTile, minRange, Size[0]);
|
||||
|
||||
var resourceType = world.WorldActor.TraitsImplementing<ResourceType>()
|
||||
.FirstOrDefault(t => t.Info.Name == AddsResourceType);
|
||||
.FirstOrDefault(t => t.Info.Type == AddsResourceType);
|
||||
|
||||
if (resourceType == null)
|
||||
Log.Write("debug", "Warhead defines an invalid resource type '{0}'".F(AddsResourceType));
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
layerPreview.IsVisible = () => true;
|
||||
layerPreview.GetPalette = () => resource.Palette;
|
||||
|
||||
var variant = resource.Variants.FirstOrDefault();
|
||||
var variant = resource.Sequences.FirstOrDefault();
|
||||
var sequence = rules.Sequences.GetSequence("resources", variant);
|
||||
var frame = sequence.Frames != null ? sequence.Frames.Last() : resource.MaxDensity - 1;
|
||||
layerPreview.GetSprite = () => sequence.GetSprite(frame);
|
||||
@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
newResourcePreviewTemplate.Bounds.Height = tileSize.Height + (layerPreview.Bounds.Y * 2);
|
||||
|
||||
newResourcePreviewTemplate.IsVisible = () => true;
|
||||
newResourcePreviewTemplate.GetTooltipText = () => resource.Name;
|
||||
newResourcePreviewTemplate.GetTooltipText = () => resource.Type;
|
||||
|
||||
layerTemplateList.AddChild(newResourcePreviewTemplate);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
switch (viewport.TooltipType)
|
||||
{
|
||||
case WorldTooltipType.Unexplored:
|
||||
labelText = "Unexplored Terrain";
|
||||
labelText = "Unrevealed Terrain";
|
||||
break;
|
||||
case WorldTooltipType.Resource:
|
||||
labelText = viewport.ResourceTooltip.Info.Name;
|
||||
break;
|
||||
case WorldTooltipType.Actor:
|
||||
{
|
||||
|
||||
@@ -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)))
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
FrozenActorTooltip = frozen;
|
||||
if (frozen.Actor != null)
|
||||
ActorTooltipExtra = frozen.Actor.TraitsImplementing<IProvideTooltipInfo>().ToArray();
|
||||
TooltipType = WorldTooltipType.FrozenActor;
|
||||
if (resourceLayer != null)
|
||||
{
|
||||
var resource = resourceLayer.GetRenderedResource(cell);
|
||||
if (resource != null)
|
||||
{
|
||||
TooltipType = WorldTooltipType.Resource;
|
||||
ResourceTooltip = resource;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user