- added a rough version of tracking weapon buffs to the player info module

This commit is contained in:
Parnic
2009-04-26 00:39:28 +00:00
parent b9c81c88f6
commit 7a2204d33c
2 changed files with 113 additions and 33 deletions

View File

@ -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()

View File

@ -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