Index: binaries/data/config/default.cfg =================================================================== --- binaries/data/config/default.cfg +++ binaries/data/config/default.cfg @@ -341,6 +341,7 @@ batchtrainingsize = 5 ; Number of units to be trained per batch (when pressing the hotkey) aurarange = 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 [gui.session.minimap] blinkduration = 1.7 ; The blink duration while pinging Index: binaries/data/mods/public/gui/options/options.json =================================================================== --- binaries/data/mods/public/gui/options/options.json +++ binaries/data/mods/public/gui/options/options.json @@ -177,6 +177,12 @@ }, { "type": "boolean", + "label": "Rank icon above Status Bar", + "tooltip": "Show rank icons above Status Bars", + "parameters": { "config": "gui.session.rankabovestatusbar" } + }, + { + "type": "boolean", "label": "Particles", "tooltip": "Enable particles", "parameters": { "config": "particles", "renderer": "Particles" } Index: binaries/data/mods/public/gui/session/selection.js =================================================================== --- binaries/data/mods/public/gui/session/selection.js +++ binaries/data/mods/public/gui/session/selection.js @@ -15,7 +15,11 @@ function _setStatusBars(ents, enabled) { if (ents.length) - Engine.GuiInterfaceCall("SetStatusBars", { "entities":ents, "enabled":enabled }); + Engine.GuiInterfaceCall("SetStatusBars", { + "entities": ents, + "enabled": enabled, + "showRank": Engine.ConfigDB_GetValue("user", "gui.session.rankabovestatusbar") == "true" + }); } function _setMotionOverlay(ents, enabled) Index: binaries/data/mods/public/gui/session/selection_details.js =================================================================== --- binaries/data/mods/public/gui/session/selection_details.js +++ binaries/data/mods/public/gui/session/selection_details.js @@ -84,7 +84,7 @@ 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 @@ -494,20 +494,6 @@ 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 Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -1289,7 +1289,8 @@ Engine.GuiInterfaceCall("SetStatusBars", { "entities": entities, - "enabled": g_ShowAllStatusBars && !remove + "enabled": g_ShowAllStatusBars && !remove, + "showRank": Engine.ConfigDB_GetValue("user", "gui.session.rankabovestatusbar") == "true" }); } Index: binaries/data/mods/public/simulation/components/GuiInterface.js =================================================================== --- binaries/data/mods/public/simulation/components/GuiInterface.js +++ binaries/data/mods/public/simulation/components/GuiInterface.js @@ -920,7 +920,7 @@ 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) Index: binaries/data/mods/public/simulation/components/StatusBars.js =================================================================== --- binaries/data/mods/public/simulation/components/StatusBars.js +++ binaries/data/mods/public/simulation/components/StatusBars.js @@ -27,11 +27,13 @@ "CaptureBar", "HealthBar", "AuraIcons", + "RankIcon", ]; StatusBars.prototype.Init = function() { this.enabled = false; + this.showRank = false; this.auraSources = new Map(); }; @@ -49,13 +51,14 @@ 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(); @@ -270,6 +273,27 @@ 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 icon = "art/textures/ui/session/icons/ranks/" + cmpIdentity.GetRank() + ".png"; + + let iconSize = +this.template.BarWidth / 2; + cmpOverlayRenderer.AddSprite( + icon, + { "x": -iconSize / 2, "y": yoffset }, + { "x": iconSize / 2, "y": iconSize + yoffset }, + { "x": 0, "y": +this.template.HeightOffset + 0.1, "z": 0 }, + NATURAL_COLOR + ); + return iconSize + this.template.BarHeight / 2; +}; Engine.RegisterComponentType(IID_StatusBars, "StatusBars", StatusBars);