From e078c8f8d89dc46b66b140339379a25f01885978 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 6 Jul 2011 01:31:56 +1200 Subject: [PATCH] Add owner name/flag to world tooltip. --- .../Widgets/Logic/WorldTooltipLogic.cs | 38 +++++++++++++++++-- mods/cnc/chrome/tooltips.yaml | 14 ++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs index 1dee8afe9e..c7af5b9871 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/WorldTooltipLogic.cs @@ -8,9 +8,11 @@ */ #endregion +using System; +using System.Drawing; using OpenRA.Support; using OpenRA.Widgets; -using T = OpenRA.Mods.Cnc.Widgets.CncWorldInteractionControllerWidget; +using Type = OpenRA.Mods.Cnc.Widgets.CncWorldInteractionControllerWidget.WorldTooltipType; namespace OpenRA.Mods.Cnc.Widgets.Logic { @@ -21,15 +23,25 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic [ObjectCreator.Param] TooltipContainerWidget tooltipContainer, [ObjectCreator.Param] CncWorldInteractionControllerWidget wic) { - widget.IsVisible = () => wic.TooltipType != T.WorldTooltipType.None; + widget.IsVisible = () => wic.TooltipType != Type.None; var label = widget.GetWidget("LABEL"); + var flag = widget.GetWidget("FLAG"); + var owner = widget.GetWidget("OWNER"); var font = Game.Renderer.Fonts[label.Font]; + var ownerFont = Game.Renderer.Fonts[owner.Font]; var cachedWidth = 0; var labelText = ""; + var showOwner = false; + var flagRace = ""; + var ownerName = ""; + var ownerColor = Color.White; + var doubleHeight = 45; + var singleHeight = 25; + tooltipContainer.BeforeRender = () => { - labelText = wic.TooltipType == T.WorldTooltipType.Unexplored ? "Unexplored Terrain" : + labelText = wic.TooltipType == Type.Unexplored ? "Unexplored Terrain" : wic.ActorTooltip.Name(); var textWidth = font.Measure(labelText).X; if (textWidth != cachedWidth) @@ -37,9 +49,29 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic label.Bounds.Width = textWidth; widget.Bounds.Width = 2*label.Bounds.X + textWidth; } + var o = wic.ActorTooltip != null ? wic.ActorTooltip.Owner() : null; + showOwner = wic.TooltipType == Type.Actor && o != null && !o.NonCombatant; + + if (showOwner) + { + flagRace = o.Country.Race; + ownerName = o.PlayerName; + ownerColor = o.ColorRamp.GetColor(0); + widget.Bounds.Height = doubleHeight; + widget.Bounds.Width = Math.Max(widget.Bounds.Width, + owner.Bounds.X + ownerFont.Measure(ownerName).X + 5); + } + else + widget.Bounds.Height = singleHeight; }; label.GetText = () => labelText; + flag.IsVisible = () => showOwner; + flag.GetImageCollection = () => "flags"; + flag.GetImageName = () => flagRace; + owner.IsVisible = () => showOwner; + owner.GetText = () => ownerName; + owner.GetColor = () => ownerColor; } } } diff --git a/mods/cnc/chrome/tooltips.yaml b/mods/cnc/chrome/tooltips.yaml index 86cb3eaeb9..6bdd32bd20 100644 --- a/mods/cnc/chrome/tooltips.yaml +++ b/mods/cnc/chrome/tooltips.yaml @@ -32,14 +32,24 @@ Background@WORLD_TOOLTIP: Logic:WorldTooltipLogic Background:panel-black Width:141 - Height:25 Children: Label@LABEL: Id:LABEL X:5 Height:23 Font:Bold - + Image: + Id:FLAG + X:5 + Y:24 + Width:32 + Height:16 + Label@OWNER: + Id:OWNER + X:42 + Y:19 + Height:23 + Font:Bold Background@PRODUCTION_TOOLTIP: Id:PRODUCTION_TOOLTIP Logic:ProductionTooltipLogic