180 lines
4.9 KiB
Lua
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 |