From 776899c254c460549c98ef2cc6e1545698e5ff01 Mon Sep 17 00:00:00 2001 From: Imarok Date: Tue, 30 Jan 2018 15:10:20 +0000 Subject: [PATCH] Show rank icon above status bars Reviewed by: bb Fixes: #5005 Differential Revision: https://code.wildfiregames.com/D717 This was SVN commit r21076. --- binaries/data/config/default.cfg | 1 + .../icons/{rank2.png => ranks/Advanced.png} | 0 .../icons/{rank1.png => ranks/Basic.png} | 0 .../icons/{rank3.png => ranks/Elite.png} | 0 .../data/mods/public/gui/options/options.json | 6 ++++ .../data/mods/public/gui/options/options.xml | 2 +- .../data/mods/public/gui/session/selection.js | 9 ++++-- .../public/gui/session/selection_details.js | 16 +--------- .../data/mods/public/gui/session/session.js | 3 +- .../simulation/components/GuiInterface.js | 2 +- .../simulation/components/StatusBars.js | 29 +++++++++++++++++-- 11 files changed, 45 insertions(+), 23 deletions(-) rename binaries/data/mods/public/art/textures/ui/session/icons/{rank2.png => ranks/Advanced.png} (100%) rename binaries/data/mods/public/art/textures/ui/session/icons/{rank1.png => ranks/Basic.png} (100%) rename binaries/data/mods/public/art/textures/ui/session/icons/{rank3.png => ranks/Elite.png} (100%) diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg index be638df585..a7155d3ec5 100644 --- a/binaries/data/config/default.cfg +++ b/binaries/data/config/default.cfg @@ -364,6 +364,7 @@ woundedunithotkeythreshold = 33 ; The wounded unit hotkey considers the select attackrange = true ; Display attack range overlays of selected defensive structures aurasrange = true ; Display aura range overlays of selected units and structures healrange = true ; Display heal range overlays of selected units +rankabovestatusbar = true ; Show rank icons above status bars respoptooltipsort = 0 ; Sorting players in the resources and population tooltip by value (0 - no sort, -1 - ascending, 1 - descending) [gui.session.minimap] diff --git a/binaries/data/mods/public/art/textures/ui/session/icons/rank2.png b/binaries/data/mods/public/art/textures/ui/session/icons/ranks/Advanced.png similarity index 100% rename from binaries/data/mods/public/art/textures/ui/session/icons/rank2.png rename to binaries/data/mods/public/art/textures/ui/session/icons/ranks/Advanced.png diff --git a/binaries/data/mods/public/art/textures/ui/session/icons/rank1.png b/binaries/data/mods/public/art/textures/ui/session/icons/ranks/Basic.png similarity index 100% rename from binaries/data/mods/public/art/textures/ui/session/icons/rank1.png rename to binaries/data/mods/public/art/textures/ui/session/icons/ranks/Basic.png diff --git a/binaries/data/mods/public/art/textures/ui/session/icons/rank3.png b/binaries/data/mods/public/art/textures/ui/session/icons/ranks/Elite.png similarity index 100% rename from binaries/data/mods/public/art/textures/ui/session/icons/rank3.png rename to binaries/data/mods/public/art/textures/ui/session/icons/ranks/Elite.png diff --git a/binaries/data/mods/public/gui/options/options.json b/binaries/data/mods/public/gui/options/options.json index 56ec4c2321..67f50ee6db 100644 --- a/binaries/data/mods/public/gui/options/options.json +++ b/binaries/data/mods/public/gui/options/options.json @@ -128,6 +128,12 @@ "tooltip": "Display the healing range of selected units (can also be toggled in-game with the hotkey).", "config": "gui.session.healrange" }, + { + "type": "boolean", + "label": "Rank icon above status bar", + "tooltip": "Show rank icons above status bars", + "config": "gui.session.rankabovestatusbar" + }, { "type": "dropdown", "label": "Sort resources and population tooltip", diff --git a/binaries/data/mods/public/gui/options/options.xml b/binaries/data/mods/public/gui/options/options.xml index 2650eb3518..eb822d4907 100644 --- a/binaries/data/mods/public/gui/options/options.xml +++ b/binaries/data/mods/public/gui/options/options.xml @@ -9,7 +9,7 @@ - + Game Options diff --git a/binaries/data/mods/public/gui/session/selection.js b/binaries/data/mods/public/gui/session/selection.js index cce4c2c302..cf21acee1e 100644 --- a/binaries/data/mods/public/gui/session/selection.js +++ b/binaries/data/mods/public/gui/session/selection.js @@ -14,8 +14,13 @@ function _setHighlight(ents, alpha, selected) function _setStatusBars(ents, enabled) { - if (ents.length) - Engine.GuiInterfaceCall("SetStatusBars", { "entities": ents, "enabled": enabled }); + if (!ents.length) + return; + Engine.GuiInterfaceCall("SetStatusBars", { + "entities": ents, + "enabled": enabled, + "showRank": Engine.ConfigDB_GetValue("user", "gui.session.rankabovestatusbar") == "true" + }); } function _setMotionOverlay(ents, enabled) diff --git a/binaries/data/mods/public/gui/session/selection_details.js b/binaries/data/mods/public/gui/session/selection_details.js index fd6c679bb4..9434a83c30 100644 --- a/binaries/data/mods/public/gui/session/selection_details.js +++ b/binaries/data/mods/public/gui/session/selection_details.js @@ -84,7 +84,7 @@ function displaySingle(entState) Engine.GetGUIObjectByName("rankIcon").tooltip = sprintf(translate("%(rank)s Rank"), { "rank": translateWithContext("Rank", entState.identity.rank) }); - Engine.GetGUIObjectByName("rankIcon").sprite = getRankIconSprite(entState); + Engine.GetGUIObjectByName("rankIcon").sprite = "stretched:session/icons/ranks/" + entState.identity.rank + ".png"; Engine.GetGUIObjectByName("rankIcon").hidden = false; } else @@ -476,20 +476,6 @@ function updateSelectionDetails() updateGarrisonHealthBar(entStates[0], g_Selection.toList()); } -function getRankIconSprite(entState) -{ - if (entState.identity.rank == "Elite") - return "stretched:session/icons/rank3.png"; - - if (entState.identity.rank == "Advanced") - return "stretched:session/icons/rank2.png"; - - if (entState.identity.classes.indexOf("CitizenSoldier") != -1) - return "stretched:session/icons/rank1.png"; - - return ""; -} - function tradingGainString(gain, owner) { // Translation: Used in the trading gain tooltip diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 34b89dc640..d7a1cf3766 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -1292,7 +1292,8 @@ function recalculateStatusBarDisplay(remove = false) Engine.GuiInterfaceCall("SetStatusBars", { "entities": entities, - "enabled": g_ShowAllStatusBars && !remove + "enabled": g_ShowAllStatusBars && !remove, + "showRank": Engine.ConfigDB_GetValue("user", "gui.session.rankabovestatusbar") == "true" }); } diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index 6a37c3cbd5..48b286ba10 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -823,7 +823,7 @@ GuiInterface.prototype.SetStatusBars = function(player, cmd) let cmpStatusBars = Engine.QueryInterface(ent, IID_StatusBars); if (!cmpStatusBars) continue; - cmpStatusBars.SetEnabled(cmd.enabled); + cmpStatusBars.SetEnabled(cmd.enabled, cmd.showRank); let cmpAuras = Engine.QueryInterface(ent, IID_Auras); if (!cmpAuras) diff --git a/binaries/data/mods/public/simulation/components/StatusBars.js b/binaries/data/mods/public/simulation/components/StatusBars.js index 7095bfd3aa..3bbfcfbf5f 100644 --- a/binaries/data/mods/public/simulation/components/StatusBars.js +++ b/binaries/data/mods/public/simulation/components/StatusBars.js @@ -26,11 +26,13 @@ StatusBars.prototype.Sprites = [ "CaptureBar", "HealthBar", "AuraIcons", - ]; + "RankIcon" +]; StatusBars.prototype.Init = function() { this.enabled = false; + this.showRank = false; this.auraSources = new Map(); }; @@ -48,13 +50,14 @@ StatusBars.prototype.Deserialize = function(data) this.auraSources = data.auraSources; }; -StatusBars.prototype.SetEnabled = function(enabled) +StatusBars.prototype.SetEnabled = function(enabled, showRank) { // Quick return if no change - if (enabled == this.enabled) + if (enabled == this.enabled && showRank == this.showRank) return; this.enabled = enabled; + this.showRank = showRank; // Update the displayed sprites this.RegenerateSprites(); @@ -269,4 +272,24 @@ StatusBars.prototype.AddAuraIcons = function(cmpOverlayRenderer, yoffset) return iconSize + this.template.BarHeight / 2; }; +StatusBars.prototype.AddRankIcon = function(cmpOverlayRenderer, yoffset) +{ + if (!this.enabled || !this.showRank) + return 0; + + let cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity); + if (!cmpIdentity || !cmpIdentity.GetRank()) + return 0; + + let iconSize = +this.template.BarWidth / 2; + cmpOverlayRenderer.AddSprite( + "art/textures/ui/session/icons/ranks/" + cmpIdentity.GetRank() + ".png", + { "x": -iconSize / 2, "y": yoffset }, + { "x": iconSize / 2, "y": iconSize + yoffset }, + { "x": 0, "y": +this.template.HeightOffset + 0.1, "z": 0 }, + g_NaturalColor); + + return iconSize + this.template.BarHeight / 2; +}; + Engine.RegisterComponentType(IID_StatusBars, "StatusBars", StatusBars);