diff --git a/data/ui_scripts/hud_info/hud.lua b/data/ui_scripts/hud_info/hud.lua index 51b9e127..fe2e4a5a 100644 --- a/data/ui_scripts/hud_info/hud.lua +++ b/data/ui_scripts/hud_info/hud.lua @@ -4,157 +4,195 @@ local textheight = 13 local textoffsety = barheight / 2 - textheight / 2 function createinfobar() - local infobar = LUI.UIElement.new({ - left = GameX.IsHardcoreMode() and 0 or 213, - top = GameX.IsHardcoreMode() and 0 or -6, - height = barheight, - width = 70, - leftAnchor = true, - topAnchor = true - }) + local infobar = LUI.UIElement.new({ + left = 213, + top = -6, + height = barheight, + width = 70, + leftAnchor = true, + topAnchor = true + }) - infobar:registerAnimationState("hud_on", { - alpha = 1 - }) + infobar:registerAnimationState("minimap_on", { + left = 213, + top = -6, + height = barheight, + width = 70, + leftAnchor = true, + topAnchor = true + }) - infobar:registerAnimationState("hud_off", { - alpha = 0 - }) + infobar:registerAnimationState("minimap_off", { + left = 0, + top = 0, + height = barheight, + width = 70, + leftAnchor = true, + topAnchor = true + }) - return infobar + infobar:registerAnimationState("hud_on", { + alpha = 1 + }) + + infobar:registerAnimationState("hud_off", { + alpha = 0 + }) + + return infobar +end + +function updateinfobarvisibility() + local root = Engine.GetLuiRoot() + local menus = root:AnyActiveMenusInStack() + local infobar = root.infobar + + if (not infobar) then + return + end + + if (menus or Game.InKillCam()) then + infobar:animateToState("hud_off") + else + infobar:animateToState("hud_on") + end + + local validstates = { + "hud_on", + "active", + "nosignal", + "scrambled" + } + + infobar:animateToState("minimap_off") + for i = 1, #validstates do + if (validstates[i] == root.hud.minimap.current_state) then + infobar:animateToState("minimap_on") + break + end + end end function populateinfobar(infobar) - elementoffset = 0 + elementoffset = 0 - if (Engine.GetDvarBool("cg_infobar_fps")) then - infobar:addElement(infoelement({ - label = "FPS: ", - getvalue = function() - return game:getfps() - end, - width = 70, - interval = 100 - })) - end + if (Engine.GetDvarBool("cg_infobar_fps")) then + infobar:addElement(infoelement({ + label = "FPS: ", + getvalue = function() + return game:getfps() + end, + width = 70, + interval = 100 + })) + end - if (Engine.GetDvarBool("cg_infobar_ping")) then - infobar:addElement(infoelement({ - label = "Latency: ", - getvalue = function() - return game:getping() .. " ms" - end, - width = 115, - interval = 100 - })) - end + if (Engine.GetDvarBool("cg_infobar_ping")) then + infobar:addElement(infoelement({ + label = "Latency: ", + getvalue = function() + return game:getping() .. " ms" + end, + width = 115, + interval = 100 + })) + end + + updateinfobarvisibility() end function infoelement(data) - local container = LUI.UIElement.new({ - bottomAnchor = true, - leftAnchor = true, - topAnchor = true, - width = data.width, - left = elementoffset - }) + local container = LUI.UIElement.new({ + bottomAnchor = true, + leftAnchor = true, + topAnchor = true, + width = data.width, + left = elementoffset + }) - elementoffset = elementoffset + data.width + 10 + elementoffset = elementoffset + data.width + 10 - local background = LUI.UIImage.new({ - bottomAnchor = true, - leftAnchor = true, - topAnchor = true, - rightAnchor = true, - material = luiglobals.RegisterMaterial("white"), - color = luiglobals.Colors.black, - alpha = 0.5 - }) + local background = LUI.UIImage.new({ + bottomAnchor = true, + leftAnchor = true, + topAnchor = true, + rightAnchor = true, + material = luiglobals.RegisterMaterial("white"), + color = luiglobals.Colors.black, + alpha = 0.5 + }) - local labelfont = CoD.TextSettings.FontBold110 + local labelfont = CoD.TextSettings.FontBold110 - local label = LUI.UIText.new({ - left = 5, - top = textoffsety, - font = labelfont.Font, - height = textheight, - leftAnchor = true, - topAnchor = true, - color = { - r = 0.8, - g = 0.8, - b = 0.8 - } - }) + local label = LUI.UIText.new({ + left = 5, + top = textoffsety, + font = labelfont.Font, + height = textheight, + leftAnchor = true, + topAnchor = true, + color = { + r = 0.8, + g = 0.8, + b = 0.8 + } + }) - label:setText(data.label) + label:setText(data.label) - local _, _, left = luiglobals.GetTextDimensions(data.label, labelfont.Font, textheight) - local value = LUI.UIText.new({ - left = left + 5, - top = textoffsety, - font = labelfont.Font, - height = textheight, - leftAnchor = true, - topAnchor = true, - color = { - r = 0.6, - g = 0.6, - b = 0.6 - } - }) + local _, _, left = luiglobals.GetTextDimensions(data.label, labelfont.Font, textheight) + local value = LUI.UIText.new({ + left = left + 5, + top = textoffsety, + font = labelfont.Font, + height = textheight, + leftAnchor = true, + topAnchor = true, + color = { + r = 0.6, + g = 0.6, + b = 0.6 + } + }) - value:addElement(LUI.UITimer.new(data.interval, "update")) - value:setText(data.getvalue()) - value:addEventHandler("update", function() - value:setText(data.getvalue()) - end) + value:addElement(LUI.UITimer.new(data.interval, "update")) + value:setText(data.getvalue()) + value:addEventHandler("update", function() + value:setText(data.getvalue()) + end) - container:addElement(background) - container:addElement(label) - container:addElement(value) + container:addElement(background) + container:addElement(label) + container:addElement(value) - return container + return container end local updatehudvisibility = mphud.updateHudVisibility mphud.updateHudVisibility = function(a1, a2) - updatehudvisibility(a1, a2) - - local root = Engine.GetLuiRoot() - local menus = root:AnyActiveMenusInStack() - local infobar = root.infobar - - if (not infobar) then - return - end - - if (menus) then - infobar:animateToState("hud_off") - else - infobar:animateToState("hud_on") - end + updatehudvisibility(a1, a2) + updateinfobarvisibility() end LUI.onmenuopen("mp_hud", function(hud) - if (Engine.InFrontend()) then - return - end + if (Engine.InFrontend()) then + return + end - local infobar = createinfobar() - local root = Engine.GetLuiRoot() - root.infobar = infobar - populateinfobar(infobar) + local infobar = createinfobar() + local root = Engine.GetLuiRoot() + root.infobar = infobar + root.hud = hud + populateinfobar(infobar) - root:registerEventHandler("update_hud_infobar_settings", function() - infobar:removeAllChildren() - populateinfobar(infobar) - end) + root:registerEventHandler("update_hud_infobar_settings", function() + infobar:removeAllChildren() + populateinfobar(infobar) + end) - root:processEvent({ - name = "update_hud_infobar_settings" - }) + root:processEvent({ + name = "update_hud_infobar_settings" + }) - hud.static.scalable:addElement(infobar) + hud.static.scalable:addElement(infobar) end) -