205 lines
6.0 KiB
Lua
205 lines
6.0 KiB
Lua
--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);
|
|
|
|
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("UNIT_COMBAT");
|
|
self:RegisterEvent("UNIT_AURA");
|
|
self:RegisterEvent("PET_ATTACK_START");
|
|
self:RegisterEvent("PET_ATTACK_STOP");
|
|
self:RegisterEvent("UNIT_HAPPINESS");
|
|
self:RegisterEvent("PET_UI_UPDATE");
|
|
self:RegisterEvent("PET_RENAMEABLE");
|
|
local showmenu = function()
|
|
ToggleDropDownMenu(1, nil, PetFrameDropDown, "PetFrame", 44, 8);
|
|
end
|
|
SecureUnitButton_OnLoad(self, "pet", showmenu);
|
|
|
|
local _, class = UnitClass("player");
|
|
if ( class == "DEATHKNIGHT" or class == "DRUID" ) 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" ) then
|
|
self:SetPoint("TOPLEFT", PlayerFrame, "TOPLEFT", 60, -100);
|
|
end
|
|
end
|
|
|
|
function PetFrame_Update (self, override)
|
|
if ( (not PlayerFrame.animating) or (override) ) then
|
|
if ( UnitIsVisible(self.unit) ) 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();
|
|
|
|
PetFrame_SetHappiness(self);
|
|
RefreshDebuffs(self, self.unit);
|
|
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") and UnitHasVehicleUI("player") ) then
|
|
unit = "player";
|
|
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);
|
|
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 == "UNIT_HAPPINESS" ) then
|
|
PetFrame_SetHappiness(self);
|
|
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 PetFrame_SetHappiness ()
|
|
local happiness, damagePercentage = GetPetHappiness();
|
|
local hasPetUI, isHunterPet = HasPetUI();
|
|
if ( not happiness or not isHunterPet ) then
|
|
PetFrameHappiness:Hide();
|
|
return;
|
|
end
|
|
PetFrameHappiness:Show();
|
|
if ( happiness == 1 ) then
|
|
PetFrameHappinessTexture:SetTexCoord(0.375, 0.5625, 0, 0.359375);
|
|
elseif ( happiness == 2 ) then
|
|
PetFrameHappinessTexture:SetTexCoord(0.1875, 0.375, 0, 0.359375);
|
|
elseif ( happiness == 3 ) then
|
|
PetFrameHappinessTexture:SetTexCoord(0, 0.1875, 0, 0.359375);
|
|
end
|
|
PetFrameHappiness.tooltip = _G["PET_HAPPINESS"..happiness];
|
|
PetFrameHappiness.tooltipDamage = format(PET_DAMAGE_PERCENTAGE, damagePercentage);
|
|
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
|