--[[============================================================================ This file is a part of ChampionBar Copyright (C) 2015 Scott Yeskie (Sasky) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ============================================================================]] EP_PER_CHAMPION_POINT = 100000 ENLIGHTENMENT_MAX = 1200000 MAX_VETERAN_RANK = 16 --Since for some stupid reason, MAXIMUM_VETERAN_RANK is 50 ChampionBar = ChampionBar or {} function ChampionBar.replaceBars() local ppb = PLAYER_PROGRESS_BAR ppb.barTypeClasses[PPB_CLASS_EP] = ChampionBar.EPBarType ppb.barTypeClasses[PPB_CLASS_VP] = ChampionBar.VPMaxBarType ppb.nextBarType = 1 ppb.barTypes = {} PPB_XP = ppb:InstantiateBarType(PPB_CLASS_XP) PPB_VP = ppb:InstantiateBarType(PPB_CLASS_VP) PPB_CP = ppb:InstantiateBarType(PPB_CLASS_CP) PPB_EP = ppb:InstantiateBarType(PPB_CLASS_EP) ppb:RefreshCurrentBar() end function ChampionBar.replaceHandlers() function PLAYER_PROGRESS_BAR:RefreshSecondaryBar() local secondaryBarInfo = self:GetSecondaryBarInfo() local hasSecondaryBar = secondaryBarInfo ~= nil if hasSecondaryBar then local current = secondaryBarInfo:GetCurrent() local max = secondaryBarInfo:GetLevelSize(secondaryBarInfo:GetLevel()) if max == nil then current = 1 max = 1 end self.secondaryBarControl:SetMinMax(0, max) self.secondaryBarControl:SetValue(current) local gradient = secondaryBarInfo:GetBarGradient() ZO_StatusBar_SetGradientColor(self.secondaryBarControl, gradient) ZO_StatusBar_SetGradientColor(self.enlightenedBarControl, gradient) --Begin difference from base ESOUI code local icon = secondaryBarInfo:GetIcon() if icon then self.secondaryBarLevelTypeIcon:SetTexture(icon) end self.secondaryBarLevelTypeIcon:SetHidden(not icon) local txt = current == 0 and "" or string.upper(GetString(SI_ENLIGHTENED)) self.secondaryBarLevelTypeLabel:SetText(txt) --End difference from base ESOUI code end self.secondaryBarLevelTypeIcon:SetHidden(not hasSecondaryBar) self.secondaryBarControl:SetHidden(not hasSecondaryBar) end --Hook first, then restore for showing bar on login local originalFn = PLAYER_PROGRESS_BAR.ShowIncrease function PLAYER_PROGRESS_BAR.ShowIncrease(self, barType, startLevel, start, stop, increaseSound, waitBeforeShowMS, owner) local bar = ChampionBar.VPMaxBarType originalFn(self, barType,bar:GetLevel(), bar:GetCurrent(), bar:GetCurrent(), increaseSound, waitBeforeShowMS, owner) PLAYER_PROGRESS_BAR.ShowIncrease = originalFn end end function ChampionBar.cpCurve(val, max) return math.sqrt(val)*math.sqrt(max) end function ChampionBar.registerEvents() EVENT_MANAGER:RegisterForEvent("ChampionBar", EVENT_CHAMPION_POINT_GAINED, function() local vpbar = PLAYER_PROGRESS_BAR.barTypes[PPB_VP]; vpbar.icon = vpbar:GetIcon() vpbar.barGradient = vpbar:GetBarGradient() vpbar.barGlowColor = vpbar.barGradient[2] end) end function ChampionBar.addLines() local parent = PLAYER_PROGRESS_BAR.secondaryBarControl local maxwidth = parent:GetWidth() local linecolor = ZO_ColorDef:New("6b5d39") ChampionBar.lines = {} for i=1,11 do local line = WINDOW_MANAGER:CreateControl("ChampionBar_CPLine"..i, parent, CT_LINE) local offset = ChampionBar.cpCurve(i*100000, ENLIGHTENMENT_MAX)/ENLIGHTENMENT_MAX*maxwidth-3 line:SetAnchor(TOPLEFT, parent, TOPLEFT, offset, 0) line:SetAnchor(BOTTOMLEFT, parent, BOTTOMLEFT, offset, 0) line:SetThickness(2) line:SetColor(linecolor:UnpackRGBA()) line:SetDrawLayer(DL_OVERLAY) table.insert(ChampionBar.lines, line) end end function ChampionBar.onLevelup(_, unit, vr) if unit == "player" and vr == MAX_VETERAN_RANK then ChampionBar.initMaxLevel() EVENT_MANAGER:UnregisterForEvent("ChampionBar", EVENT_VETERAN_RANK_UPDATE) end end function ChampionBar.initMaxLevel() if PLAYER_PROGRESS_BAR.barTypeClasses then ChampionBar.replaceBars() ChampionBar.replaceHandlers() ChampionBar.registerEvents() ChampionBar.addLines() end end function ChampionBar.initLowerLevel() -- Show enlightenment pool in tooltip PLAYER_PROGRESS_BAR.barTypes[PPB_CP].GetEnlightenedTooltip = ChampionBar.EPBarType.GetEnlightenedTooltip EVENT_MANAGER:RegisterForEvent("ChampionBar", EVENT_VETERAN_RANK_UPDATE, ChampionBar.onLevelup) end function ChampionBar.init() --Only show for max VR characters if GetUnitLevel("player") ~= 50 or GetUnitVeteranRank("player") ~= MAX_VETERAN_RANK then ChampionBar.initLowerLevel() else ChampionBar.initMaxLevel() end EVENT_MANAGER:UnregisterForEvent("ChampionBar", EVENT_PLAYER_ACTIVATED) end EVENT_MANAGER:RegisterForEvent("ChampionBar", EVENT_PLAYER_ACTIVATED, function() ChampionBar.init() end)