Files
moonwell-client/reference/FrameXML/RuneFrame.lua
T

180 lines
4.9 KiB
Lua

--Readability == win
local FirstTime = true;
local RUNETYPE_BLOOD = 1;
local RUNETYPE_UNHOLY = 2;
local RUNETYPE_FROST = 3;
local RUNETYPE_DEATH = 4;
local iconTextures = {};
iconTextures[RUNETYPE_BLOOD] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Blood";
iconTextures[RUNETYPE_UNHOLY] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Unholy";
iconTextures[RUNETYPE_FROST] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Frost";
iconTextures[RUNETYPE_DEATH] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Death";
local runeTextures = {
[RUNETYPE_BLOOD] = "Interface\\PlayerFrame\\UI-PlayerFrame-DeathKnight-Blood-Off.tga",
[RUNETYPE_UNHOLY] = "Interface\\PlayerFrame\\UI-PlayerFrame-DeathKnight-Death-Off.tga",
[RUNETYPE_FROST] = "Interface\\PlayerFrame\\UI-PlayerFrame-DeathKnight-Frost-Off.tga",
[RUNETYPE_DEATH] = "Interface\\PlayerFrame\\UI-PlayerFrame-Deathknight-Chromatic-Off.tga",
}
local runeColors = {
[RUNETYPE_BLOOD] = {1, 0, 0},
[RUNETYPE_UNHOLY] = {0, 0.5, 0},
[RUNETYPE_FROST] = {0, 1, 1},
[RUNETYPE_DEATH] = {0.8, 0.1, 1},
}
runeMapping = {
[1] = "BLOOD",
[2] = "UNHOLY",
[3] = "FROST",
[4] = "DEATH",
}
function RuneButton_OnLoad (self)
RuneFrame_AddRune(RuneFrame, self);
self.rune = _G[self:GetName().."Rune"];
self.fill = _G[self:GetName().."Fill"];
self.shine = _G[self:GetName().."ShineTexture"];
RuneButton_Update(self);
end
function RuneButton_OnUpdate (self, elapsed)
-- Constants that aren't used elsewhere and are actually constant are happiest inside their functions ;)
--local RUNE_HEIGHT = 18;
--local MIN_RUNE_ALPHA = .4
local cooldown = _G[self:GetName().."Cooldown"];
local start, duration, runeReady = GetRuneCooldown(self:GetID());
local displayCooldown = (runeReady and 0) or 1;
CooldownFrame_SetTimer(cooldown, start, duration, displayCooldown);
-- if ( not enable ) then
-- self.fill:SetHeight(RUNE_HEIGHT * ((GetTime() - start)/duration));
-- self.fill:SetTexCoord(0, 1, (1 - ((GetTime() - start)/duration)), 1);
-- self.fill:SetAlpha(math.max(MIN_RUNE_ALPHA, (GetTime() - start)/duration));
-- else
if ( runeReady ) then
-- self.fill:SetHeight(RUNE_HEIGHT);
-- self.fill:SetTexCoord(0, 1, 0, 1);
-- self.fill:SetAlpha(1);
self:SetScript("OnUpdate", nil);
end
end
function RuneButton_Update (self, rune, dontFlash)
rune = rune or self:GetID();
local runeType = GetRuneType(rune);
if ( (not dontFlash) and (runeType) and (runeType ~= self.rune.runeType)) then
self.shine:SetVertexColor(unpack(runeColors[runeType]));
RuneButton_ShineFadeIn(self.shine)
end
if (runeType) then
self.rune:SetTexture(iconTextures[runeType]);
-- self.fill:SetTexture(iconTextures[runeType]);
self.rune:Show();
-- self.fill:Show();
self.rune.runeType = runeType;
self.tooltipText = _G["COMBAT_TEXT_RUNE_"..runeMapping[runeType]];
else
self.rune:Hide();
-- self.fill:Hide();
self.tooltipText = nil;
end
end
function RuneButton_OnEnter(self)
if ( self.tooltipText ) then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:SetText(self.tooltipText);
GameTooltip:Show();
end
end
function RuneButton_OnLeave(self)
GameTooltip:Hide();
end
function RuneFrame_OnLoad (self)
-- Disable rune frame if not a death knight.
local _, class = UnitClass("player");
if ( class ~= "DEATHKNIGHT" ) then
self:Hide();
end
self:RegisterEvent("RUNE_POWER_UPDATE");
self:RegisterEvent("RUNE_TYPE_UPDATE");
self:RegisterEvent("PLAYER_ENTERING_WORLD");
self:SetScript("OnEvent", RuneFrame_OnEvent);
self.runes = {};
end
function RuneFrame_OnEvent (self, event, ...)
if ( event == "PLAYER_ENTERING_WORLD" ) then
if ( FirstTime ) then
RuneFrame_FixRunes(self);
FirstTime = false;
end
for rune in next, self.runes do
RuneButton_Update(self.runes[rune], rune, true);
end
elseif ( event == "RUNE_POWER_UPDATE" ) then
local rune, usable = ...;
if ( not usable and rune and self.runes[rune] ) then
self.runes[rune]:SetScript("OnUpdate", RuneButton_OnUpdate);
elseif ( usable and rune and self.runes[rune] ) then
self.runes[rune].shine:SetVertexColor(1, 1, 1);
RuneButton_ShineFadeIn(self.runes[rune].shine)
end
elseif ( event == "RUNE_TYPE_UPDATE" ) then
local rune = ...;
if ( rune ) then
RuneButton_Update(self.runes[rune], rune);
end
end
end
function RuneFrame_AddRune (runeFrame, rune)
tinsert(runeFrame.runes, rune);
end
function RuneFrame_FixRunes (runeFrame) --We want to swap where frost and unholy appear'
local temp;
temp = runeFrame.runes[3];
runeFrame.runes[3] = runeFrame.runes[5];
runeFrame.runes[5] = temp;
temp = runeFrame.runes[4];
runeFrame.runes[4] = runeFrame.runes[6];
runeFrame.runes[6] = temp;
end
function RuneButton_ShineFadeIn(self)
if self.shining then
return
end
local fadeInfo={
mode = "IN",
timeToFade = 0.5,
finishedFunc = RuneButton_ShineFadeOut,
finishedArg1 = self,
}
self.shining=true;
UIFrameFade(self, fadeInfo);
end
function RuneButton_ShineFadeOut(self)
self.shining=false;
UIFrameFadeOut(self, 0.5);
end