diff --git a/src/frames.lua b/src/frames.lua index 69ce9f2..d12face 100644 --- a/src/frames.lua +++ b/src/frames.lua @@ -26,6 +26,8 @@ local colors = { disease = { 0.4, 0.2, 0.0 }, poison = { 0.0, 0.7, 0.7 }, curse = { 0.7, 0.0, 0.7 }, + immune = { 0.0, 0.2, 0.4 }, + bomb = { 1.0, 0.7, 0.7 }, red = { 1, 0, 0 }, blue = { 0.4, 0.4, 1 }, light_blue = { 0.7, 0.7, 1 }, @@ -833,6 +835,51 @@ local function TriggerConfig() return triggers end +local function StatusColorClassConfig() + local _, class = UnitClass("player") + if class == "DRUID" then + return { + { status = "Curse", color = colors.curse }, + { status = "Poison", color = colors.poison }, + } + elseif class == "MAGE" then + return { + { status = "Curse", color = colors.curse }, + } + elseif class == "PALADIN" then + return { + { status = "Magic", color = colors.magic }, + { status = "Poison", color = colors.poison }, + { status = "Disease", color = colors.disease }, + } + elseif class == "PRIEST" then + return { + { status = "Magic", color = colors.magic }, + { status = "Disease", color = colors.disease }, + } + elseif class == "SHAMAN" then + return { + { status = "Poison", color = colors.poison }, + { status = "Disease", color = colors.disease }, + } + end + + return {} +end + +local function StatusColorConfig() + local statusColors = { + { status = "Immune", color = colors.immune }, + { status = "Bomb", color = colors.bomb }, + } + + for _, entry in ipairs(StatusColorClassConfig()) do + table.insert(statusColors, entry) + end + + return statusColors +end + local types = omif.GetModule("types") local UnitFrame = types.UnitFrame local UnitGroup = types.UnitGroup diff --git a/src/types/unitframe.lua b/src/types/unitframe.lua index 9795856..b00582c 100644 --- a/src/types/unitframe.lua +++ b/src/types/unitframe.lua @@ -50,12 +50,6 @@ local colors = { low = { 1.0, 0.0, 0 }, offline = { 0.7, 0.7, 0.7 }, dead = { 0.7, 0.7, 0.7 }, - magic = { 0.4, 0.4, 1.0 }, - disease = { 0.4, 0.2, 0.0 }, - poison = { 0.0, 0.7, 0.7 }, - curse = { 0.7, 0.0, 0.7 }, - immune = { 0.0, 0.2, 0.4 }, - bomb = { 1.0, 0.7, 0.7 }, cyan = { 0.0, 0.8, 0.8 }, white = { 1.0, 1.0, 1.0 }, shield = { 0.85, 0.95, 1.0 }, @@ -90,6 +84,8 @@ function UnitFrame:Init(unit, config) self.rangeEnemy = config.range.enemy self.rangeFade = config.range.fade + self.statusColors = config.statusColors + local secure = self:CreateSecureFrame(width, height) secure:Hide() @@ -662,23 +658,24 @@ function UnitFrame:UpdateHealthColor() if not isFriend then self.hp:SetColor(unpack(colors.hostile)) - elseif self.auras.statusCount["Immune"] then - self.hp:SetColor(unpack(colors.immune)) - elseif self.auras.statusCount["Bomb"] then - self.hp:SetColor(unpack(colors.bomb)) - elseif self.auras.statusCount["Magic"] then - self.hp:SetColor(unpack(colors.magic)) - elseif self.auras.statusCount["Curse"] then - self.hp:SetColor(unpack(colors.curse)) - elseif self.auras.statusCount["Poison"] then - self.hp:SetColor(unpack(colors.poison)) - elseif self.auras.statusCount["Disease"] then - self.hp:SetColor(unpack(colors.disease)) - elseif isFriend and UnitIsDead(unit) then + return + end + + local statusColor = nil + for _, entry in ipairs(self.statusColors) do + if self.auras.statusCount[entry.status] then + statusColor = entry.color + break + end + end + + if statusColor then + self.hp:SetColor(unpack(statusColor)) + elseif UnitIsDead(unit) then self.hp:SetColor(unpack(colors.dead)) - elseif isFriend and pct >= 0.90 then + elseif pct >= 0.90 then self.hp:SetColor(unpack(colors.healthy)) - elseif isFriend and pct >= 0.75 then + elseif pct >= 0.75 then local progress = (pct - 0.75) / (0.90 - 0.75) self.hp:SetInterpolatedColor(colors.mid, colors.high, progress) else