134 lines
3.6 KiB
Lua
134 lines
3.6 KiB
Lua
|
|
function TotemFrame_OnLoad(self)
|
|
self:RegisterEvent("PLAYER_TOTEM_UPDATE");
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
|
|
local _, class = UnitClass("player");
|
|
if ( class == "DEATHKNIGHT" ) then
|
|
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 65, -55);
|
|
end
|
|
end
|
|
|
|
function TotemFrame_Update()
|
|
local _, class = UnitClass("player");
|
|
if ( PetFrame and PetFrame:IsShown() ) then
|
|
if ( class == "DEATHKNIGHT" ) then
|
|
TotemFrame:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 28, -75);
|
|
elseif ( class == "SHAMAN" ) then
|
|
--Nothing!
|
|
else
|
|
TotemFrame:Hide();
|
|
return;
|
|
end
|
|
elseif ( class == "DEATHKNIGHT" ) then
|
|
TotemFrame:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 65, -55);
|
|
end
|
|
|
|
local haveTotem, name, startTime, duration, icon;
|
|
local slot;
|
|
local button;
|
|
local buttonIndex = 1;
|
|
TotemFrame.activeTotems = 0;
|
|
for i=1, MAX_TOTEMS do
|
|
slot = TOTEM_PRIORITIES[i];
|
|
haveTotem, name, startTime, duration, icon = GetTotemInfo(slot);
|
|
if ( haveTotem ) then
|
|
button = _G["TotemFrameTotem"..buttonIndex];
|
|
button.slot = slot;
|
|
TotemButton_Update(button, startTime, duration, icon);
|
|
|
|
if ( button:IsShown() ) then
|
|
TotemFrame.activeTotems = TotemFrame.activeTotems + 1;
|
|
end
|
|
|
|
buttonIndex = buttonIndex + 1;
|
|
else
|
|
button = _G["TotemFrameTotem"..MAX_TOTEMS - i + buttonIndex];
|
|
button.slot = 0;
|
|
button:Hide();
|
|
end
|
|
end
|
|
if ( TotemFrame.activeTotems > 0 ) then
|
|
TotemFrame:Show();
|
|
else
|
|
TotemFrame:Hide();
|
|
end
|
|
end
|
|
|
|
function TotemFrame_OnEvent(self, event, ...)
|
|
if ( event == "PLAYER_ENTERING_WORLD" ) then
|
|
TotemFrame_Update();
|
|
elseif ( event == "PLAYER_TOTEM_UPDATE" ) then
|
|
local slot = ...;
|
|
local haveTotem, name, startTime, duration, icon = GetTotemInfo(slot);
|
|
local button;
|
|
for i=1, MAX_TOTEMS do
|
|
button = _G["TotemFrameTotem"..i];
|
|
if ( button.slot == slot ) then
|
|
local previouslyShown = button:IsShown();
|
|
TotemButton_Update(button, startTime, duration, icon);
|
|
-- if we have no active totems then we need to hide the whole frame, otherwise show it
|
|
if ( previouslyShown ) then
|
|
if ( not button:IsShown() ) then
|
|
self.activeTotems = self.activeTotems - 1;
|
|
end
|
|
else
|
|
if ( button:IsShown() ) then
|
|
self.activeTotems = self.activeTotems + 1;
|
|
end
|
|
end
|
|
if ( self.activeTotems > 0 ) then
|
|
self:Show();
|
|
else
|
|
self:Hide();
|
|
end
|
|
return;
|
|
end
|
|
end
|
|
|
|
-- The assumption is that we have gained a totem that we did not previously have
|
|
-- so the totem buttons have to be reordered. It's easier to just do a full update
|
|
-- rather than sorting the buttons since there aren't that many.
|
|
TotemFrame_Update();
|
|
end
|
|
end
|
|
|
|
function TotemButton_OnClick(self, mouseButton)
|
|
if ( mouseButton == "RightButton" ) then
|
|
DestroyTotem(self.slot);
|
|
end
|
|
end
|
|
|
|
function TotemButton_OnLoad(self)
|
|
self:RegisterForClicks("RightButtonUp");
|
|
end
|
|
|
|
function TotemButton_OnUpdate(button, elapsed)
|
|
AuraButton_UpdateDuration(button, GetTotemTimeLeft(button.slot));
|
|
if ( GameTooltip:IsOwned(button) ) then
|
|
GameTooltip:SetTotem(button.slot);
|
|
end
|
|
end
|
|
|
|
function TotemButton_Update(button, startTime, duration, icon)
|
|
local buttonName = button:GetName();
|
|
local buttonIcon = _G[buttonName.."IconTexture"];
|
|
local buttonDuration = _G[buttonName.."Duration"];
|
|
local buttonCooldown = _G[buttonName.."IconCooldown"];
|
|
|
|
if ( duration > 0 ) then
|
|
buttonIcon:SetTexture(icon);
|
|
buttonIcon:Show();
|
|
CooldownFrame_SetTimer(buttonCooldown, startTime, duration, 1);
|
|
buttonCooldown:Show();
|
|
button:SetScript("OnUpdate", TotemButton_OnUpdate);
|
|
button:Show();
|
|
else
|
|
buttonIcon:Hide();
|
|
buttonDuration:Hide();
|
|
buttonCooldown:Hide();
|
|
button:SetScript("OnUpdate", nil);
|
|
button:Hide();
|
|
end
|
|
end
|