X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/674e0c047004a7f514ee4c991e09603bcee96432..d76a52e46fc339db35e6a068c0f1564db7b9cf46:/OmaRF/Events.lua diff --git a/OmaRF/Events.lua b/OmaRF/Events.lua index 41fc221..4d2a1a1 100644 --- a/OmaRF/Events.lua +++ b/OmaRF/Events.lua @@ -7,14 +7,19 @@ local UnitName, UnitClass, UnitExists = UnitName, UnitClass, UnitExists; local UnitDebuff, UnitIsCharmed = UnitDebuff, UnitIsCharmed; local UnitPower, UnitPowerMax, UnitPowerType = UnitPower, UnitPowerMax, UnitPowerType; local UnitHealth, UnitHealthMax = UnitHealth, UnitHealthMax; +local UnitIsAFK, UnitIsDND = UnitIsAFK, UnitIsDND; local UnitGetIncomingHeals, UnitGetTotalAbsorbs = UnitGetIncomingHeals, UnitGetTotalAbsorbs; local UnitThreatSituation, GetThreatStatusColor = UnitThreatSituation, GetThreatStatusColor; local UnitIsDeadOrGhost, UnitIsConnected = UnitIsDeadOrGhost, UnitIsConnected; local UnitHasIncomingResurrection = UnitHasIncomingResurrection; local UnitGetTotalHealAbsorbs = UnitGetTotalHealAbsorbs; local UnitHasVehicleUI, UnitTargetsVehicleInRaidUI = UnitHasVehicleUI, UnitTargetsVehicleInRaidUI; +local GetReadyCheckTimeLeft, GetReadyCheckStatus = GetReadyCheckTimeLeft, GetReadyCheckStatus; local UnitGroupRolesAssigned = UnitGroupRolesAssigned; local RAID_CLASS_COLORS = RAID_CLASS_COLORS; +local READY_CHECK_READY_TEXTURE = READY_CHECK_READY_TEXTURE; +local READY_CHECK_NOT_READY_TEXTURE = READY_CHECK_NOT_READY_TEXTURE; +local READY_CHECK_WAITING_TEXTURE = READY_CHECK_WAITING_TEXTURE; local checkIndicators = OmaRFIndicators.CheckIndicators; @@ -24,14 +29,13 @@ local overlayColorDispel = Settings.OverlayColorDispel; local overlayColorCharm = Settings.OverlayColorCharm; local overlayColorAlert = Settings.OverlayColorAlert; local powerColors = Settings.PowerColors; -local width = 10; +local width = Settings.Width; local M = {}; OmaRFEvents = M; function M.RegisterEvents(frame) -- events are taken from FrameXML/CompactUnitFrame.lua - -- TODO ready check support, raid marker support, - -- player flags support (/afk, /dnd) + -- TODO raid marker support local displayed = frame.unit ~= frame.displayed and frame.displayed or nil; frame:RegisterUnitEvent("UNIT_HEALTH", frame.unit, displayed); frame:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", frame.unit, displayed); @@ -47,6 +51,7 @@ function M.RegisterEvents(frame) frame:RegisterUnitEvent("UNIT_THREAT_SITUATION_UPDATE", frame.unit, displayed); frame:RegisterUnitEvent("UNIT_CONNECTION", frame.unit, displayed); frame:RegisterUnitEvent("INCOMING_RESURRECT_CHANGED", frame.unit, displayed); + frame:RegisterUnitEvent("PLAYER_FLAGS_CHANGED", frame.unit, displayed); end local registerEvents = M.RegisterEvents; @@ -84,6 +89,12 @@ local function updateText(frame, unit) elseif not UnitIsConnected(unit) then frame.text:SetText("DC"); frame.text:Show(); + elseif UnitIsAFK(unit) then + frame.text:SetText("afk"); + frame.text:Show(); + elseif UnitIsDND(unit) and healthLost == 0 then + frame.text:SetText("dnd"); + frame.text:Show(); elseif healthLost > 0 then if healthLost > 1200000000 then -- 1.2B frame.text:SetFormattedText("-%.1fB", healthLost / 1000000000); @@ -255,6 +266,22 @@ local function updateRole(frame, unit) end end +local function updateReadyCheck(frame, unit) + local status = GetReadyCheckStatus(unit); + if status == "ready" then + frame.ready:SetTexture(READY_CHECK_READY_TEXTURE); + frame.ready:Show() + elseif status == "notready" then + frame.ready:SetTexture(READY_CHECK_NOT_READY_TEXTURE); + frame.ready:Show() + elseif status == "waiting" then + frame.ready:SetTexture(READY_CHECK_WAITING_TEXTURE); + frame.ready:Show() + else + frame.ready:Hide() + end +end + local eventFuncs = { ["UNIT_HEALTH"] = function(frame) updateHealth(frame, frame.displayed); @@ -312,6 +339,9 @@ local eventFuncs = { ["PLAYER_ROLES_ASSIGNED"] = function(frame) updateRole(frame, frame.unit); end, + ["READY_CHECK"] = function(frame) + updateReadyCheck(frame, frame.unit); + end, ["UPDATE_ALL_BARS"] = function(frame) updateVehicle(frame); updateMaxHealth(frame, frame.displayed); @@ -325,6 +355,7 @@ local eventFuncs = { updateHealAbsorb(frame, frame.displayed); updatePowerColor(frame, frame.displayed); updateIncomingRes(frame, frame.unit); + updateReadyCheck(frame, frame.unit); updateAggro(frame, frame.displayed); updateName(frame, frame.displayed); updateRole(frame, frame.unit); @@ -332,14 +363,16 @@ local eventFuncs = { }; eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"]; eventFuncs["PARTY_MEMBER_DISABLE"] = eventFuncs["PARTY_MEMBER_ENABLE"]; +eventFuncs["PLAYER_FLAGS_CHANGED"] = eventFuncs["UNIT_CONNECTION"]; +eventFuncs["READY_CHECK_CONFIRM"] = eventFuncs["READY_CHECK"]; +eventFuncs["READY_CHECK_FINISHED"] = eventFuncs["READY_CHECK"]; eventFuncs["UNIT_ENTERED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"]; eventFuncs["UNIT_EXITED_VEHICLE"] = eventFuncs["UPDATE_ALL_BARS"]; eventFuncs["UNIT_PET"] = eventFuncs["UPDATE_ALL_BARS"]; eventFuncs["GROUP_ROSTER_UPDATE"] = eventFuncs["UPDATE_ALL_BARS"]; +eventFuncs["PLAYER_ENTERING_WORLD"] = eventFuncs["UPDATE_ALL_BARS"]; +eventFuncs["PLAYER_FOCUS_CHANGED"] = eventFuncs["UPDATE_ALL_BARS"]; + function M.UnitEvent(self, event) eventFuncs[event](self); end - -function M.LoadChar() - width = Settings.Character.Width; -end