mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 06:40:13 -05:00
- added a rough version of tracking weapon buffs to the player info module
This commit is contained in:
@ -1,6 +1,13 @@
|
||||
local AceOO = AceLibrary("AceOO-2.0")
|
||||
local PlayerInfo = AceOO.Class(IceTargetInfo)
|
||||
|
||||
local EPSILON = 0.5
|
||||
|
||||
PlayerInfo.prototype.mainHandEnchantTimeSet = 0
|
||||
PlayerInfo.prototype.mainHandEnchantEndTime = 0
|
||||
PlayerInfo.prototype.offHandEnchantTimeSet = 0
|
||||
PlayerInfo.prototype.offHandEnchantEndTime = 0
|
||||
|
||||
-- Constructor --
|
||||
function PlayerInfo.prototype:init()
|
||||
PlayerInfo.super.prototype.init(self, "PlayerInfo", "player")
|
||||
@ -73,6 +80,8 @@ function PlayerInfo.prototype:Enable(core)
|
||||
if (self.moduleSettings.hideBlizz) then
|
||||
self:HideBlizz()
|
||||
end
|
||||
|
||||
self:ScheduleRepeatingEvent(self.elementName, self.UpdateBuffs, 1, self, self.unit, true)
|
||||
end
|
||||
|
||||
function PlayerInfo.prototype:ShowBlizz()
|
||||
@ -88,5 +97,73 @@ function PlayerInfo.prototype:HideBlizz()
|
||||
BuffFrame:UnregisterAllEvents()
|
||||
end
|
||||
|
||||
function PlayerInfo.prototype:UpdateBuffs(unit, fromRepeated)
|
||||
if unit and unit ~= self.unit then
|
||||
return
|
||||
end
|
||||
|
||||
if not fromRepeated then
|
||||
PlayerInfo.super.prototype.UpdateBuffs(self)
|
||||
end
|
||||
|
||||
local startingNum = 0
|
||||
|
||||
for i=1, IceCore.BuffLimit do
|
||||
if not self.frame.buffFrame.buffs[i]:IsVisible()
|
||||
or self.frame.buffFrame.buffs[i].type == "mh"
|
||||
or self.frame.buffFrame.buffs[i].type == "oh" then
|
||||
startingNum = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local hasMainHandEnchant, mainHandExpiration, mainHandCharges,
|
||||
hasOffHandEnchant, offHandExpiration, offHandCharges
|
||||
= GetWeaponEnchantInfo()
|
||||
|
||||
if hasMainHandEnchant or hasOffHandEnchant then
|
||||
local CurrTime = GetTime()
|
||||
|
||||
if hasMainHandEnchant then
|
||||
if self.mainHandEnchantEndTime == 0 or
|
||||
abs(self.mainHandEnchantEndTime - (mainHandExpiration/1000)) > CurrTime - self.mainHandEnchantTimeSet + EPSILON then
|
||||
self.mainHandEnchantEndTime = mainHandExpiration/1000
|
||||
self.mainHandEnchantTimeSet = CurrTime
|
||||
end
|
||||
|
||||
self:SetUpBuff(startingNum,
|
||||
GetInventoryItemTexture(self.unit, GetInventorySlotInfo("MainHandSlot")),
|
||||
self.mainHandEnchantEndTime,
|
||||
CurrTime + (mainHandExpiration/1000),
|
||||
true,
|
||||
mainHandCharges,
|
||||
"mh")
|
||||
|
||||
startingNum = startingNum + 1
|
||||
end
|
||||
|
||||
if hasOffHandEnchant then
|
||||
if self.offHandEnchantEndTime == 0 or
|
||||
abs(self.offHandEnchantEndTime - (offHandExpiration/1000)) > abs(CurrTime - self.offHandEnchantTimeSet) + EPSILON then
|
||||
self.offHandEnchantEndTime = offHandExpiration/1000
|
||||
self.offHandEnchantTimeSet = CurrTime
|
||||
end
|
||||
|
||||
self:SetUpBuff(startingNum,
|
||||
GetInventoryItemTexture(self.unit, GetInventorySlotInfo("SecondaryHandSlot")),
|
||||
self.offHandEnchantEndTime,
|
||||
CurrTime + (offHandExpiration/1000),
|
||||
true,
|
||||
offHandCharges,
|
||||
"oh")
|
||||
|
||||
startingNum = startingNum + 1
|
||||
end
|
||||
|
||||
local direction = self.moduleSettings.buffGrowDirection == "Left" and -1 or 1
|
||||
self.frame.buffFrame.buffs = self:CreateIconFrames(self.frame.buffFrame, direction, self.frame.buffFrame.buffs, "buff")
|
||||
end
|
||||
end
|
||||
|
||||
-- Load us up
|
||||
IceHUD.PlayerInfo = PlayerInfo:new()
|
||||
|
@ -958,7 +958,7 @@ function IceTargetInfo.prototype:CreateIconFrames(parent, direction, buffs, type
|
||||
buffs[i].id = i
|
||||
if (self.moduleSettings.mouseBuff) then
|
||||
buffs[i]:EnableMouse(true)
|
||||
buffs[i]:SetScript("OnEnter", function() self:BuffOnEnter(type) end)
|
||||
buffs[i]:SetScript("OnEnter", function() self:BuffOnEnter(buffs[i].type or type) end)
|
||||
buffs[i]:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
||||
else
|
||||
buffs[i]:EnableMouse(false)
|
||||
@ -1004,38 +1004,7 @@ function IceTargetInfo.prototype:UpdateBuffs()
|
||||
end
|
||||
|
||||
if (buffTexture) then
|
||||
self.frame.buffFrame.buffs[i].icon.texture:SetTexture(buffTexture)
|
||||
self.frame.buffFrame.buffs[i].icon.texture:SetTexCoord(zoom, 1-zoom, zoom, 1-zoom)
|
||||
|
||||
local alpha = buffTexture and 0.5 or 0
|
||||
self.frame.buffFrame.buffs[i].texture:SetTexture(0, 0, 0, alpha)
|
||||
|
||||
-- cooldown frame
|
||||
if (buffDuration and buffDuration > 0 and
|
||||
buffTimeLeft and buffTimeLeft > 0) then
|
||||
local start
|
||||
if IceHUD.WowVer >= 30000 then
|
||||
-- in wotlk, the "bufftimeleft" parameter is actually the ending time for the buff
|
||||
start = buffTimeLeft - buffDuration
|
||||
else
|
||||
start = GetTime() - buffDuration + buffTimeLeft
|
||||
end
|
||||
self.frame.buffFrame.buffs[i].cd:SetCooldown(start, buffDuration)
|
||||
self.frame.buffFrame.buffs[i].cd:Show()
|
||||
else
|
||||
self.frame.buffFrame.buffs[i].cd:Hide()
|
||||
end
|
||||
|
||||
self.frame.buffFrame.buffs[i].fromPlayer = isFromMe
|
||||
|
||||
if (buffApplications and (buffApplications > 1)) then
|
||||
self.frame.buffFrame.buffs[i].icon.stack:SetText(buffApplications)
|
||||
else
|
||||
self.frame.buffFrame.buffs[i].icon.stack:SetText(nil)
|
||||
end
|
||||
|
||||
|
||||
self.frame.buffFrame.buffs[i]:Show()
|
||||
self:SetUpBuff(i, buffTexture, buffDuration, buffTimeLeft, isFromMe, buffApplications)
|
||||
else
|
||||
self.frame.buffFrame.buffs[i]:Hide()
|
||||
end
|
||||
@ -1096,6 +1065,38 @@ function IceTargetInfo.prototype:UpdateBuffs()
|
||||
end
|
||||
|
||||
|
||||
function IceTargetInfo.prototype:SetUpBuff(i, buffTexture, buffDuration, buffTimeLeft, isFromMe, buffApplications, buffType)
|
||||
local zoom = self.moduleSettings.zoom
|
||||
|
||||
self.frame.buffFrame.buffs[i].type = buffType
|
||||
self.frame.buffFrame.buffs[i].icon.texture:SetTexture(buffTexture)
|
||||
self.frame.buffFrame.buffs[i].icon.texture:SetTexCoord(zoom, 1-zoom, zoom, 1-zoom)
|
||||
|
||||
local alpha = buffTexture and 0.5 or 0
|
||||
self.frame.buffFrame.buffs[i].texture:SetTexture(0, 0, 0, alpha)
|
||||
|
||||
-- cooldown frame
|
||||
if (buffDuration and buffDuration > 0 and
|
||||
buffTimeLeft and buffTimeLeft > 0) then
|
||||
local start = buffTimeLeft - buffDuration
|
||||
self.frame.buffFrame.buffs[i].cd:SetCooldown(start, buffDuration)
|
||||
self.frame.buffFrame.buffs[i].cd:Show()
|
||||
else
|
||||
self.frame.buffFrame.buffs[i].cd:Hide()
|
||||
end
|
||||
|
||||
self.frame.buffFrame.buffs[i].fromPlayer = isFromMe
|
||||
|
||||
if (buffApplications and (buffApplications > 1)) then
|
||||
self.frame.buffFrame.buffs[i].icon.stack:SetText(buffApplications)
|
||||
else
|
||||
self.frame.buffFrame.buffs[i].icon.stack:SetText(nil)
|
||||
end
|
||||
|
||||
self.frame.buffFrame.buffs[i]:Show()
|
||||
end
|
||||
|
||||
|
||||
|
||||
function IceTargetInfo.prototype:AuraChanged(unit)
|
||||
if (unit == self.unit) then
|
||||
@ -1310,6 +1311,8 @@ function IceTargetInfo.prototype:BuffOnEnter(type)
|
||||
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT")
|
||||
if (type == "buff") then
|
||||
GameTooltip:SetUnitBuff(self.unit, this.id)
|
||||
elseif (type == "mh" or type == "oh") then
|
||||
GameTooltip:SetInventoryItem("player", type == "mh" and GetInventorySlotInfo("MainHandSlot") or GetInventorySlotInfo("SecondaryHandSlot"))
|
||||
else
|
||||
GameTooltip:SetUnitDebuff(self.unit, this.id)
|
||||
end
|
||||
|
Reference in New Issue
Block a user