--PET_WARNING_TIME = 55;
--PET_FLASH_ON_TIME = 0.5;
--PET_FLASH_OFF_TIME = 0.5;
function PetFrame_OnLoad (self)
self.noTextPrefix = true;
UnitFrame_Initialize(self, "pet", PetName, PetPortrait,
PetFrameHealthBar, PetFrameHealthBarText,
PetFrameManaBar, PetFrameManaBarText,
PetFrameFlash, nil, nil,
PetFrameMyHealPredictionBar, PetFrameOtherHealPredictionBar);
self.attackModeCounter = 0;
self.attackModeSign = -1;
--self.flashState = 1;
--self.flashTimer = 0;
CombatFeedback_Initialize(self, PetHitIndicator, 30);
PetFrame_Update(self);
self:RegisterEvent("UNIT_PET");
self:RegisterEvent("PET_ATTACK_START");
self:RegisterEvent("PET_ATTACK_STOP");
self:RegisterEvent("PET_UI_UPDATE");
self:RegisterEvent("PET_RENAMEABLE");
self:RegisterUnitEvent("UNIT_COMBAT", "pet", "player");
self:RegisterUnitEvent("UNIT_AURA", "pet", "player");
local showmenu = function()
ToggleDropDownMenu(1, nil, PetFrameDropDown, "PetFrame", 44, 8);
end
SecureUnitButton_OnLoad(self, "pet", showmenu);
local _, class = UnitClass("player");
if ( class == "DEATHKNIGHT") then --Death Knights need the Pet frame moved down for their Runes and Druids need it moved down for the secondary power bar.
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 60, -75);
elseif ( class == "SHAMAN" or class == "DRUID" ) then
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 60, -100);
elseif ( class == "WARLOCK" ) then
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 60, -90);
elseif ( class == "PALADIN" ) then
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 60, -90);
elseif ( class == "PRIEST" ) then
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 60, -90);
elseif ( class == "MONK" ) then
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 90, -100);
end
end
function PetFrame_Update (self, override)
if ( (not PlayerFrame.animating) or (override) ) then
if ( UnitIsVisible(self.unit) and PetUsesPetFrame() and not PlayerFrame.vehicleHidesPet ) then
if ( self:IsShown() ) then
UnitFrame_Update(self);
else
self:Show();
end
--self.flashState = 1;
--self.flashTimer = PET_FLASH_ON_TIME;
if ( UnitPowerMax(self.unit) == 0 ) then
PetFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-SmallTargetingFrame-NoMana");
PetFrameManaBarText:Hide();
else
PetFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-SmallTargetingFrame");
end
PetAttackModeTexture:Hide();
RefreshDebuffs(self, self.unit, nil, nil, true);
else
self:Hide();
end
end
end
function PetFrame_OnEvent (self, event, ...)
UnitFrame_OnEvent(self, event, ...);
local arg1, arg2, arg3, arg4, arg5 = ...;
if ( (event == "UNIT_PET" and arg1 == "player" ) or event == "PET_UI_UPDATE" ) then
local unit
if ( UnitInVehicle("player") ) then
if ( UnitHasVehiclePlayerFrameUI("player") ) then
unit = "player";
else
return;
end
else
unit = "pet";
end
UnitFrame_SetUnit(self, unit, PetFrameHealthBar, PetFrameManaBar);
PetFrame_Update(self);
elseif ( event == "UNIT_COMBAT" ) then
if ( arg1 == self.unit ) then
CombatFeedback_OnCombatEvent(self, arg2, arg3, arg4, arg5);
end
elseif ( event == "UNIT_AURA" ) then
if ( arg1 == self.unit ) then
RefreshDebuffs(self, self.unit, nil, nil, true);
end
elseif ( event == "PET_ATTACK_START" ) then
PetAttackModeTexture:SetVertexColor(1.0, 1.0, 1.0, 1.0);
PetAttackModeTexture:Show();
elseif ( event == "PET_ATTACK_STOP" ) then
PetAttackModeTexture:Hide();
elseif ( event == "PET_RENAMEABLE" ) then
StaticPopup_Show("RENAME_PET");
end
end
function PetFrame_OnUpdate (self, elapsed)
if ( PetAttackModeTexture:IsShown() ) then
local alpha = 255;
local counter = self.attackModeCounter + elapsed;
local sign = self.attackModeSign;
if ( counter > 0.5 ) then
sign = -sign;
self.attackModeSign = sign;
end
counter = mod(counter, 0.5);
self.attackModeCounter = counter;
if ( sign == 1 ) then
alpha = (55 + (counter * 400)) / 255;
else
alpha = (255 - (counter * 400)) / 255;
end
PetAttackModeTexture:SetVertexColor(1.0, 1.0, 1.0, alpha);
end
CombatFeedback_OnUpdate(self, elapsed);
-- Expiration flash stuff
--local petTimeRemaining = nil;
--if ( GetPetTimeRemaining() ) then
--- if ( self.flashState == 1 ) then
-- self:SetAlpha(this.flashTimer/PET_FLASH_ON_TIME);
-- else
-- self:SetAlpha((PET_FLASH_OFF_TIME - this.flashTimer)/PET_FLASH_OFF_TIME);
-- end
-- petTimeRemaining = GetPetTimeRemaining() / 1000;
--end
--if ( petTimeRemaining and (petTimeRemaining < PET_WARNING_TIME) ) then
-- PetFrame.flashTimer = PetFrame.flashTimer - elapsed;
-- if ( PetFrame.flashTimer <= 0 ) then
-- if ( PetFrame.flashState == 1 ) then
-- PetFrame.flashState = 0;
-- PetFrame.flashTimer = PET_FLASH_OFF_TIME;
-- else
-- PetFrame.flashState = 1;
-- PetFrame.flashTimer = PET_FLASH_ON_TIME;
-- end
-- end
--end
end
function PetFrameDropDown_OnLoad (self)
UIDropDownMenu_Initialize(self, PetFrameDropDown_Initialize, "MENU");
end
function PetFrameDropDown_Initialize ()
if ( UnitExists(PetFrame.unit) ) then
if ( PetFrame.unit == "player" ) then
UnitPopup_ShowMenu(PetFrameDropDown, "SELF", "player");
else
if ( UnitIsUnit("pet", "vehicle") ) then
UnitPopup_ShowMenu(PetFrameDropDown, "VEHICLE", "vehicle");
else
UnitPopup_ShowMenu(PetFrameDropDown, "PET", "pet");
end
end
end
end
function PetCastingBarFrame_OnLoad (self)
CastingBarFrame_OnLoad(self, "pet", false, false);
self:RegisterEvent("UNIT_PET");
self.showCastbar = UnitIsPossessed("pet");
end
function PetCastingBarFrame_OnEvent (self, event, ...)
local arg1 = ...;
if ( event == "UNIT_PET" ) then
if ( arg1 == "player" ) then
self.showCastbar = UnitIsPossessed("pet");
if ( not self.showCastbar ) then
self:Hide();
elseif ( self.casting or self.channeling ) then
self:Show();
end
end
return;
end
CastingBarFrame_OnEvent(self, event, ...);
end