режим предателя + UI референсы и DragonUI
This commit is contained in:
@@ -0,0 +1,340 @@
|
||||
CASTING_BAR_ALPHA_STEP = 0.05;
|
||||
CASTING_BAR_FLASH_STEP = 0.2;
|
||||
CASTING_BAR_HOLD_TIME = 1;
|
||||
|
||||
function CastingBarFrame_OnLoad (self, unit, showTradeSkills, showShield)
|
||||
self:RegisterEvent("UNIT_SPELLCAST_START");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_STOP");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_FAILED");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_DELAYED");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE");
|
||||
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE");
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
||||
|
||||
self.unit = unit;
|
||||
self.showTradeSkills = showTradeSkills;
|
||||
self.showShield = showShield;
|
||||
self.casting = nil;
|
||||
self.channeling = nil;
|
||||
self.holdTime = 0;
|
||||
self.showCastbar = true;
|
||||
|
||||
local barIcon = _G[self:GetName().."Icon"];
|
||||
if ( barIcon ) then
|
||||
barIcon:Hide();
|
||||
end
|
||||
end
|
||||
|
||||
function CastingBarFrame_OnShow (self)
|
||||
if ( self.casting ) then
|
||||
local _, _, _, _, startTime = UnitCastingInfo(self.unit);
|
||||
if ( startTime ) then
|
||||
self.value = (GetTime() - (startTime / 1000));
|
||||
end
|
||||
else
|
||||
local _, _, _, _, _, endTime = UnitChannelInfo(self.unit);
|
||||
if ( endTime ) then
|
||||
self.value = ((endTime / 1000) - GetTime());
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function CastingBarFrame_OnEvent (self, event, ...)
|
||||
local arg1 = ...;
|
||||
|
||||
local unit = self.unit;
|
||||
if ( event == "PLAYER_ENTERING_WORLD" ) then
|
||||
local nameChannel = UnitChannelInfo(unit);
|
||||
local nameSpell = UnitCastingInfo(unit);
|
||||
if ( nameChannel ) then
|
||||
event = "UNIT_SPELLCAST_CHANNEL_START";
|
||||
arg1 = unit;
|
||||
elseif ( nameSpell ) then
|
||||
event = "UNIT_SPELLCAST_START";
|
||||
arg1 = unit;
|
||||
else
|
||||
CastingBarFrame_FinishSpell(self);
|
||||
end
|
||||
end
|
||||
|
||||
if ( arg1 ~= unit ) then
|
||||
return;
|
||||
end
|
||||
|
||||
local selfName = self:GetName();
|
||||
local barSpark = _G[selfName.."Spark"];
|
||||
local barText = _G[selfName.."Text"];
|
||||
local barFlash = _G[selfName.."Flash"];
|
||||
local barIcon = _G[selfName.."Icon"];
|
||||
local barBorder = _G[selfName.."Border"];
|
||||
local barBorderShield = _G[selfName.."BorderShield"];
|
||||
if ( event == "UNIT_SPELLCAST_START" ) then
|
||||
local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible = UnitCastingInfo(unit);
|
||||
if ( not name or (not self.showTradeSkills and isTradeSkill)) then
|
||||
self:Hide();
|
||||
return;
|
||||
end
|
||||
|
||||
self:SetStatusBarColor(1.0, 0.7, 0.0);
|
||||
if ( barSpark ) then
|
||||
barSpark:Show();
|
||||
end
|
||||
self.value = (GetTime() - (startTime / 1000));
|
||||
self.maxValue = (endTime - startTime) / 1000;
|
||||
self:SetMinMaxValues(0, self.maxValue);
|
||||
self:SetValue(self.value);
|
||||
if ( barText ) then
|
||||
barText:SetText(text);
|
||||
end
|
||||
if ( barIcon ) then
|
||||
barIcon:SetTexture(texture);
|
||||
end
|
||||
self:SetAlpha(1.0);
|
||||
self.holdTime = 0;
|
||||
self.casting = 1;
|
||||
self.castID = castID;
|
||||
self.channeling = nil;
|
||||
self.fadeOut = nil;
|
||||
if ( barBorderShield ) then
|
||||
if ( self.showShield and notInterruptible ) then
|
||||
barBorderShield:Show();
|
||||
if ( barBorder ) then
|
||||
barBorder:Hide();
|
||||
end
|
||||
else
|
||||
barBorderShield:Hide();
|
||||
if ( barBorder ) then
|
||||
barBorder:Show();
|
||||
end
|
||||
end
|
||||
end
|
||||
if ( self.showCastbar ) then
|
||||
self:Show();
|
||||
end
|
||||
|
||||
elseif ( event == "UNIT_SPELLCAST_STOP" or event == "UNIT_SPELLCAST_CHANNEL_STOP") then
|
||||
if ( not self:IsVisible() ) then
|
||||
self:Hide();
|
||||
end
|
||||
if ( (self.casting and event == "UNIT_SPELLCAST_STOP" and select(4, ...) == self.castID) or
|
||||
(self.channeling and event == "UNIT_SPELLCAST_CHANNEL_STOP") ) then
|
||||
if ( barSpark ) then
|
||||
barSpark:Hide();
|
||||
end
|
||||
if ( barFlash ) then
|
||||
barFlash:SetAlpha(0.0);
|
||||
barFlash:Show();
|
||||
end
|
||||
self:SetValue(self.maxValue);
|
||||
if ( event == "UNIT_SPELLCAST_STOP" ) then
|
||||
self.casting = nil;
|
||||
self:SetStatusBarColor(0.0, 1.0, 0.0);
|
||||
else
|
||||
self.channeling = nil;
|
||||
end
|
||||
self.flash = 1;
|
||||
self.fadeOut = 1;
|
||||
self.holdTime = 0;
|
||||
end
|
||||
elseif ( event == "UNIT_SPELLCAST_FAILED" or event == "UNIT_SPELLCAST_INTERRUPTED" ) then
|
||||
if ( self:IsShown() and
|
||||
(self.casting and select(4, ...) == self.castID) and not self.fadeOut ) then
|
||||
self:SetValue(self.maxValue);
|
||||
self:SetStatusBarColor(1.0, 0.0, 0.0);
|
||||
if ( barSpark ) then
|
||||
barSpark:Hide();
|
||||
end
|
||||
if ( barText ) then
|
||||
if ( event == "UNIT_SPELLCAST_FAILED" ) then
|
||||
barText:SetText(FAILED);
|
||||
else
|
||||
barText:SetText(INTERRUPTED);
|
||||
end
|
||||
end
|
||||
self.casting = nil;
|
||||
self.channeling = nil;
|
||||
self.fadeOut = 1;
|
||||
self.holdTime = GetTime() + CASTING_BAR_HOLD_TIME;
|
||||
end
|
||||
elseif ( event == "UNIT_SPELLCAST_DELAYED" ) then
|
||||
if ( self:IsShown() ) then
|
||||
local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(unit);
|
||||
if ( not name or (not self.showTradeSkills and isTradeSkill)) then
|
||||
-- if there is no name, there is no bar
|
||||
self:Hide();
|
||||
return;
|
||||
end
|
||||
self.value = (GetTime() - (startTime / 1000));
|
||||
self.maxValue = (endTime - startTime) / 1000;
|
||||
self:SetMinMaxValues(0, self.maxValue);
|
||||
if ( not self.casting ) then
|
||||
self:SetStatusBarColor(1.0, 0.7, 0.0);
|
||||
if ( barSpark ) then
|
||||
barSpark:Show();
|
||||
end
|
||||
if ( barFlash ) then
|
||||
barFlash:SetAlpha(0.0);
|
||||
barFlash:Hide();
|
||||
end
|
||||
self.casting = 1;
|
||||
self.channeling = nil;
|
||||
self.flash = 0;
|
||||
self.fadeOut = 0;
|
||||
end
|
||||
end
|
||||
elseif ( event == "UNIT_SPELLCAST_CHANNEL_START" ) then
|
||||
local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill, notInterruptible = UnitChannelInfo(unit);
|
||||
if ( not name or (not self.showTradeSkills and isTradeSkill)) then
|
||||
-- if there is no name, there is no bar
|
||||
self:Hide();
|
||||
return;
|
||||
end
|
||||
|
||||
self:SetStatusBarColor(0.0, 1.0, 0.0);
|
||||
self.value = ((endTime / 1000) - GetTime());
|
||||
self.maxValue = (endTime - startTime) / 1000;
|
||||
self:SetMinMaxValues(0, self.maxValue);
|
||||
self:SetValue(self.value);
|
||||
if ( barText ) then
|
||||
barText:SetText(text);
|
||||
end
|
||||
if ( barIcon ) then
|
||||
barIcon:SetTexture(texture);
|
||||
end
|
||||
if ( barSpark ) then
|
||||
barSpark:Hide();
|
||||
end
|
||||
self:SetAlpha(1.0);
|
||||
self.holdTime = 0;
|
||||
self.casting = nil;
|
||||
self.channeling = 1;
|
||||
self.fadeOut = nil;
|
||||
if ( barBorderShield ) then
|
||||
if ( self.showShield and notInterruptible ) then
|
||||
barBorderShield:Show();
|
||||
if ( barBorder ) then
|
||||
barBorder:Hide();
|
||||
end
|
||||
else
|
||||
barBorderShield:Hide();
|
||||
if ( barBorder ) then
|
||||
barBorder:Show();
|
||||
end
|
||||
end
|
||||
end
|
||||
if ( self.showCastbar ) then
|
||||
self:Show();
|
||||
end
|
||||
elseif ( event == "UNIT_SPELLCAST_CHANNEL_UPDATE" ) then
|
||||
if ( self:IsShown() ) then
|
||||
local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(unit);
|
||||
if ( not name or (not self.showTradeSkills and isTradeSkill)) then
|
||||
-- if there is no name, there is no bar
|
||||
self:Hide();
|
||||
return;
|
||||
end
|
||||
self.value = ((endTime / 1000) - GetTime());
|
||||
self.maxValue = (endTime - startTime) / 1000;
|
||||
self:SetMinMaxValues(0, self.maxValue);
|
||||
self:SetValue(self.value);
|
||||
end
|
||||
elseif ( self.showShield and event == "UNIT_SPELLCAST_INTERRUPTIBLE" ) then
|
||||
if ( barBorderShield ) then
|
||||
barBorderShield:Hide();
|
||||
if ( barBorder ) then
|
||||
barBorder:Show();
|
||||
end
|
||||
end
|
||||
elseif ( self.showShield and event == "UNIT_SPELLCAST_NOT_INTERRUPTIBLE" ) then
|
||||
if ( barBorderShield ) then
|
||||
barBorderShield:Show();
|
||||
if ( barBorder ) then
|
||||
barBorder:Hide();
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function CastingBarFrame_OnUpdate (self, elapsed)
|
||||
local barSpark = _G[self:GetName().."Spark"];
|
||||
local barFlash = _G[self:GetName().."Flash"];
|
||||
|
||||
if ( self.casting ) then
|
||||
self.value = self.value + elapsed;
|
||||
if ( self.value >= self.maxValue ) then
|
||||
self:SetValue(self.maxValue);
|
||||
CastingBarFrame_FinishSpell(self, barSpark, barFlash);
|
||||
return;
|
||||
end
|
||||
self:SetValue(self.value);
|
||||
if ( barFlash ) then
|
||||
barFlash:Hide();
|
||||
end
|
||||
if ( barSpark ) then
|
||||
local sparkPosition = (self.value / self.maxValue) * self:GetWidth();
|
||||
barSpark:SetPoint("CENTER", self, "LEFT", sparkPosition, 2);
|
||||
end
|
||||
elseif ( self.channeling ) then
|
||||
self.value = self.value - elapsed;
|
||||
if ( self.value <= 0 ) then
|
||||
CastingBarFrame_FinishSpell(self, barSpark, barFlash);
|
||||
return;
|
||||
end
|
||||
self:SetValue(self.value);
|
||||
if ( barFlash ) then
|
||||
barFlash:Hide();
|
||||
end
|
||||
elseif ( GetTime() < self.holdTime ) then
|
||||
return;
|
||||
elseif ( self.flash ) then
|
||||
local alpha = 0;
|
||||
if ( barFlash ) then
|
||||
alpha = barFlash:GetAlpha() + CASTING_BAR_FLASH_STEP;
|
||||
end
|
||||
if ( alpha < 1 ) then
|
||||
if ( barFlash ) then
|
||||
barFlash:SetAlpha(alpha);
|
||||
end
|
||||
else
|
||||
if ( barFlash ) then
|
||||
barFlash:SetAlpha(1.0);
|
||||
end
|
||||
self.flash = nil;
|
||||
end
|
||||
elseif ( self.fadeOut ) then
|
||||
local alpha = self:GetAlpha() - CASTING_BAR_ALPHA_STEP;
|
||||
if ( alpha > 0 ) then
|
||||
self:SetAlpha(alpha);
|
||||
else
|
||||
self.fadeOut = nil;
|
||||
self:Hide();
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function CastingBarFrame_FinishSpell (self, barSpark, barFlash)
|
||||
self:SetStatusBarColor(0.0, 1.0, 0.0);
|
||||
if ( barSpark ) then
|
||||
barSpark:Hide();
|
||||
end
|
||||
if ( barFlash ) then
|
||||
barFlash:SetAlpha(0.0);
|
||||
barFlash:Show();
|
||||
end
|
||||
self.flash = 1;
|
||||
self.fadeOut = 1;
|
||||
self.casting = nil;
|
||||
self.channeling = nil;
|
||||
end
|
||||
|
||||
function CastingBarFrame_UpdateIsShown(self)
|
||||
if ( self.casting and self.showCastbar ) then
|
||||
CastingBarFrame_OnEvent(self, "PLAYER_ENTERING_WORLD")
|
||||
else
|
||||
self:Hide();
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user