mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 06:40:13 -05:00
196 lines
5.6 KiB
Lua
196 lines
5.6 KiB
Lua
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|
local ComboPointsBar = IceCore_CreateClass(IceBarElement)
|
|
|
|
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
|
if Enum and Enum.PowerType then
|
|
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
|
end
|
|
|
|
function ComboPointsBar.prototype:init()
|
|
ComboPointsBar.super.prototype.init(self, "ComboPointsBar")
|
|
|
|
self:SetDefaultColor("ComboPointsBarMin", 1, 1, 0)
|
|
self:SetDefaultColor("ComboPointsBarMax", 0, 1, 0)
|
|
self:SetDefaultColor("ChargedComboPointBar", 0.3137254901960784, 0.3725490196078432, 1)
|
|
|
|
self.bTreatEmptyAsFull = true
|
|
end
|
|
|
|
function ComboPointsBar.prototype:GetOptions()
|
|
local opts = ComboPointsBar.super.prototype.GetOptions(self)
|
|
|
|
opts["alwaysDisplay"] = {
|
|
type = "toggle",
|
|
name = L["Always display bar"],
|
|
desc = L["Whether this bar should hide when the player has 0 combo points or stay visible"],
|
|
get = function()
|
|
return self.moduleSettings.alwaysDisplay
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.alwaysDisplay = v
|
|
self:UpdateComboPoints()
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
order = 31
|
|
}
|
|
|
|
opts["bShowWithNoTarget"] =
|
|
{
|
|
type = 'toggle',
|
|
name = L["Show with no target"],
|
|
desc = L["Whether or not to display when you have no target selected but have combo points available"],
|
|
get = function()
|
|
return self.moduleSettings.bShowWithNoTarget
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.bShowWithNoTarget = v
|
|
self:UpdateComboPoints()
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
}
|
|
|
|
opts["bShowCharged"] = {
|
|
type = 'toggle',
|
|
width = 'double',
|
|
name = L["Show Charged points"],
|
|
desc = L["Whether or not to color a charged combo point a separate color and append an @ sign to the number. Set the ChargedComboPointBar color to the color you would like it to be."],
|
|
get = function()
|
|
return self.moduleSettings.bShowCharged
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.bShowCharged = v
|
|
self:UpdateComboPoints()
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
hidden = function()
|
|
return not GetUnitChargedPowerPoints
|
|
end,
|
|
}
|
|
|
|
return opts
|
|
end
|
|
|
|
function ComboPointsBar.prototype:GetDefaultSettings()
|
|
local defaults = ComboPointsBar.super.prototype.GetDefaultSettings(self)
|
|
defaults.offset = 8
|
|
defaults.enabled = false
|
|
defaults.alwaysDisplay = false
|
|
defaults.desiredLerpTime = 0.05
|
|
defaults.bShowWithNoTarget = true
|
|
defaults.bShowCharged = true
|
|
return defaults
|
|
end
|
|
|
|
function ComboPointsBar.prototype:Enable(core)
|
|
ComboPointsBar.super.prototype.Enable(self, core)
|
|
|
|
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
|
|
if not IceHUD.EventExistsPlayerComboPoints then
|
|
if IceHUD.EventExistsUnitComboPoints then
|
|
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
|
|
else
|
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
|
|
end
|
|
if UnitHasVehicleUI then
|
|
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
|
|
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
|
|
end
|
|
else
|
|
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
|
|
end
|
|
|
|
if GetUnitChargedPowerPoints then
|
|
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateComboPoints")
|
|
end
|
|
end
|
|
|
|
function ComboPointsBar.prototype:CreateFrame()
|
|
ComboPointsBar.super.prototype.CreateFrame(self)
|
|
|
|
self:UpdateComboPoints()
|
|
end
|
|
|
|
local color = {}
|
|
|
|
function ComboPointsBar.prototype:UpdateComboPoints(...)
|
|
if select('#', ...) >= 3 and select(1, ...) == IceHUD.UnitPowerEvent and select(3, ...) ~= "COMBO_POINTS" then
|
|
return
|
|
end
|
|
|
|
local points
|
|
if IceHUD.IceCore:IsInConfigMode() then
|
|
points = UnitPowerMax("player", SPELL_POWER_COMBO_POINTS)
|
|
elseif UnitHasVehicleUI then
|
|
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
|
|
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
|
|
local checkUnit = isInVehicle and "vehicle" or "player"
|
|
if IceHUD.PerTargetComboPoints then
|
|
points = GetComboPoints(checkUnit, "target")
|
|
else
|
|
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
|
|
end
|
|
else
|
|
points = GetComboPoints("player", "target")
|
|
end
|
|
|
|
if (points == 0) then
|
|
points = nil
|
|
end
|
|
|
|
local isCharged = self:IsChargedPoint(points) and self.moduleSettings.bShowCharged
|
|
|
|
if points == nil or points == 0 or (not UnitExists("target") and not self.moduleSettings.bShowWithNoTarget) then
|
|
self:Show(self.moduleSettings.alwaysDisplay)
|
|
self:UpdateBar(0, "undef")
|
|
else
|
|
self:Show(true)
|
|
if isCharged then
|
|
color.r, color.g, color.b = self:GetColor("ChargedComboPointBar")
|
|
else
|
|
self:SetScaledColor(color, (points - 1) / 4.0, self.settings.colors["ComboPointsBarMax"], self.settings.colors["ComboPointsBarMin"])
|
|
end
|
|
self:UpdateBar(points / UnitPowerMax("player", SPELL_POWER_COMBO_POINTS), "undef")
|
|
self.barFrame.bar:SetVertexColor(color.r, color.g, color.b, self.alpha)
|
|
end
|
|
|
|
local pointsText = tostring(points or 0)
|
|
if isCharged then
|
|
pointsText = pointsText .. "@"
|
|
end
|
|
self:SetBottomText1(pointsText or "0")
|
|
end
|
|
|
|
function ComboPointsBar.prototype:IsChargedPoint(point)
|
|
if not GetUnitChargedPowerPoints or not point then
|
|
return false
|
|
end
|
|
|
|
local chargedPoints = GetUnitChargedPowerPoints("player")
|
|
if not chargedPoints then
|
|
return false
|
|
end
|
|
|
|
for i=1, #chargedPoints do
|
|
if chargedPoints[i] == point then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function ComboPointsBar.prototype:Update()
|
|
self:UpdateComboPoints()
|
|
end
|
|
|
|
local _, class = UnitClass("player")
|
|
if (not IceHUD.WowClassic and not IceHUD.WowClassicBC) or class == "ROGUE" or class == "DRUID" then
|
|
IceHUD.ComboPointsBar = ComboPointsBar:new()
|
|
end
|