295 lines
8.2 KiB
Lua
295 lines
8.2 KiB
Lua
BONUSACTIONBAR_SLIDETIME = 0.15;
|
|
BONUSACTIONBAR_YPOS = 43;
|
|
BONUSACTIONBAR_XPOS = 4;
|
|
NUM_BONUS_ACTION_SLOTS = 12;
|
|
NUM_SHAPESHIFT_SLOTS = 10;
|
|
NUM_POSSESS_SLOTS = 2;
|
|
POSSESS_CANCEL_SLOT = 2;
|
|
|
|
function BonusActionBar_OnLoad (self)
|
|
self:RegisterEvent("UPDATE_BONUS_ACTIONBAR");
|
|
self:SetFrameLevel(self:GetFrameLevel() + 2);
|
|
self.mode = "none";
|
|
self.completed = 1;
|
|
self.lastBonusBar = 1;
|
|
if ( GetBonusBarOffset() > 0 and GetActionBarPage() == 1 ) then
|
|
ShowBonusActionBar();
|
|
end
|
|
end
|
|
|
|
function BonusActionBar_OnEvent (self, event, ...)
|
|
if ( event == "UPDATE_BONUS_ACTIONBAR" ) then
|
|
if ( GetBonusBarOffset() > 0 ) then
|
|
self.lastBonusBar = GetBonusBarOffset();
|
|
ShowBonusActionBar();
|
|
else
|
|
HideBonusActionBar();
|
|
end
|
|
end
|
|
end
|
|
|
|
function BonusActionBar_OnUpdate(self, elapsed)
|
|
local yPos;
|
|
if ( self.slideTimer and (self.slideTimer < self.timeToSlide) ) then
|
|
-- Animating
|
|
self.completed = nil;
|
|
if ( self.mode == "show" ) then
|
|
yPos = (self.slideTimer/self.timeToSlide) * BONUSACTIONBAR_YPOS;
|
|
self:SetPoint("TOPLEFT", self:GetParent(), "BOTTOMLEFT", BONUSACTIONBAR_XPOS, yPos);
|
|
self.state = "showing";
|
|
self:Show();
|
|
elseif ( self.mode == "hide" ) then
|
|
yPos = (1 - (self.slideTimer/self.timeToSlide)) * BONUSACTIONBAR_YPOS;
|
|
self:SetPoint("TOPLEFT", self:GetParent(), "BOTTOMLEFT", BONUSACTIONBAR_XPOS, yPos);
|
|
self.state = "hiding";
|
|
end
|
|
self.slideTimer = self.slideTimer + elapsed;
|
|
else
|
|
-- Animation complete
|
|
if ( self.completed == 1 ) then
|
|
return;
|
|
else
|
|
self.completed = 1;
|
|
end
|
|
if ( self.mode == "show" ) then
|
|
self:SetPoint("TOPLEFT", self:GetParent(), "BOTTOMLEFT", BONUSACTIONBAR_XPOS, BONUSACTIONBAR_YPOS);
|
|
self.state = "top";
|
|
PlaySound("igBonusBarOpen");
|
|
elseif ( self.mode == "hide" ) then
|
|
self:SetPoint("TOPLEFT", self:GetParent(), "BOTTOMLEFT", BONUSACTIONBAR_XPOS, 0);
|
|
self.state = "bottom";
|
|
self:Hide();
|
|
end
|
|
self.mode = "none";
|
|
end
|
|
end
|
|
|
|
function ShowBonusActionBar (override)
|
|
if (( (not MainMenuBar.busy) and (not UnitHasVehicleUI("player")) ) or override) then --Don't change while we're animating out MainMenuBar for vehicle UI
|
|
if ( (BonusActionBarFrame.mode ~= "show" and BonusActionBarFrame.state ~= "top") or (not UIParent:IsShown())) then
|
|
BonusActionBarFrame:Show();
|
|
if ( BonusActionBarFrame.completed ) then
|
|
BonusActionBarFrame.slideTimer = 0;
|
|
end
|
|
BonusActionBarFrame.timeToSlide = BONUSACTIONBAR_SLIDETIME;
|
|
BonusActionBarFrame.mode = "show";
|
|
end
|
|
end
|
|
end
|
|
|
|
function HideBonusActionBar (override)
|
|
if (( (not MainMenuBar.busy) and (not UnitHasVehicleUI("player")) ) or override) then --Don't change while we're animating out MainMenuBar for vehicle UI
|
|
if ( (BonusActionBarFrame:IsShown()) or (not UIParent:IsShown())) then
|
|
if ( BonusActionBarFrame.completed ) then
|
|
BonusActionBarFrame.slideTimer = 0;
|
|
end
|
|
BonusActionBarFrame.timeToSlide = BONUSACTIONBAR_SLIDETIME;
|
|
BonusActionBarFrame.mode = "hide";
|
|
end
|
|
end
|
|
end
|
|
|
|
function BonusActionButtonUp (id)
|
|
PetActionButtonUp(id);
|
|
end
|
|
|
|
function BonusActionButtonDown (id)
|
|
PetActionButtonDown(id);
|
|
end
|
|
|
|
function ShapeshiftBar_OnLoad (self)
|
|
ShapeshiftBar_Update();
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
self:RegisterEvent("UPDATE_SHAPESHIFT_FORMS");
|
|
self:RegisterEvent("UPDATE_SHAPESHIFT_USABLE");
|
|
self:RegisterEvent("UPDATE_SHAPESHIFT_COOLDOWN");
|
|
self:RegisterEvent("UPDATE_SHAPESHIFT_FORM");
|
|
self:RegisterEvent("UPDATE_INVENTORY_ALERTS"); -- Wha?? Still Wha...
|
|
self:RegisterEvent("ACTIONBAR_PAGE_CHANGED");
|
|
end
|
|
|
|
function ShapeshiftBar_OnEvent (self, event, ...)
|
|
if ( event == "PLAYER_ENTERING_WORLD" or event == "UPDATE_SHAPESHIFT_FORMS" ) then
|
|
ShapeshiftBar_Update();
|
|
elseif ( event == "ACTIONBAR_PAGE_CHANGED" ) then
|
|
if ( GetBonusBarOffset() > 0 ) then
|
|
ShowBonusActionBar();
|
|
else
|
|
HideBonusActionBar();
|
|
end
|
|
else
|
|
ShapeshiftBar_UpdateState();
|
|
end
|
|
end
|
|
|
|
function ShapeshiftBar_Update ()
|
|
local numForms = GetNumShapeshiftForms();
|
|
if ( numForms > 0 ) then
|
|
--Setup the shapeshift bar to display the appropriate number of slots
|
|
if ( numForms == 1 ) then
|
|
ShapeshiftBarMiddle:Hide();
|
|
ShapeshiftBarRight:SetPoint("LEFT", "ShapeshiftBarLeft", "LEFT", 12, 0);
|
|
ShapeshiftButton1:SetPoint("BOTTOMLEFT", "ShapeshiftBarFrame", "BOTTOMLEFT", 12, 3);
|
|
elseif ( numForms == 2 ) then
|
|
ShapeshiftBarMiddle:Hide();
|
|
ShapeshiftBarRight:SetPoint("LEFT", "ShapeshiftBarLeft", "RIGHT", 0, 0);
|
|
else
|
|
ShapeshiftBarMiddle:Show();
|
|
ShapeshiftBarMiddle:SetPoint("LEFT", "ShapeshiftBarLeft", "RIGHT", 0, 0);
|
|
ShapeshiftBarMiddle:SetWidth(37 * (numForms-2));
|
|
ShapeshiftBarMiddle:SetTexCoord(0, numForms-2, 0, 1);
|
|
ShapeshiftBarRight:SetPoint("LEFT", "ShapeshiftBarMiddle", "RIGHT", 0, 0);
|
|
end
|
|
|
|
ShapeshiftBarFrame:Show();
|
|
else
|
|
ShapeshiftBarFrame:Hide();
|
|
end
|
|
ShapeshiftBar_UpdateState();
|
|
UIParent_ManageFramePositions();
|
|
end
|
|
|
|
function ShapeshiftBar_UpdateState ()
|
|
local numForms = GetNumShapeshiftForms();
|
|
local texture, name, isActive, isCastable;
|
|
local button, icon, cooldown;
|
|
local start, duration, enable;
|
|
for i=1, NUM_SHAPESHIFT_SLOTS do
|
|
button = _G["ShapeshiftButton"..i];
|
|
icon = _G["ShapeshiftButton"..i.."Icon"];
|
|
if ( i <= numForms ) then
|
|
texture, name, isActive, isCastable = GetShapeshiftFormInfo(i);
|
|
icon:SetTexture(texture);
|
|
|
|
--Cooldown stuffs
|
|
cooldown = _G["ShapeshiftButton"..i.."Cooldown"];
|
|
if ( texture ) then
|
|
cooldown:Show();
|
|
else
|
|
cooldown:Hide();
|
|
end
|
|
start, duration, enable = GetShapeshiftFormCooldown(i);
|
|
CooldownFrame_SetTimer(cooldown, start, duration, enable);
|
|
|
|
if ( isActive ) then
|
|
ShapeshiftBarFrame.lastSelected = button:GetID();
|
|
button:SetChecked(1);
|
|
else
|
|
button:SetChecked(0);
|
|
end
|
|
|
|
if ( isCastable ) then
|
|
icon:SetVertexColor(1.0, 1.0, 1.0);
|
|
else
|
|
icon:SetVertexColor(0.4, 0.4, 0.4);
|
|
end
|
|
|
|
button:Show();
|
|
else
|
|
button:Hide();
|
|
end
|
|
end
|
|
end
|
|
|
|
function ShapeshiftBar_ChangeForm (id)
|
|
ShapeshiftBarFrame.lastSelected = id;
|
|
CastShapeshiftForm(id);
|
|
end
|
|
|
|
function PossessBar_OnLoad (self)
|
|
PossessBar_Update();
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
self:RegisterEvent("UPDATE_BONUS_ACTIONBAR");
|
|
self:RegisterEvent("UNIT_AURA");
|
|
self:RegisterEvent("ACTIONBAR_PAGE_CHANGED");
|
|
end
|
|
|
|
function PossessBar_OnEvent (self, event, ...)
|
|
if ( event == "PLAYER_ENTERING_WORLD" or event == "UPDATE_BONUS_ACTIONBAR" ) then
|
|
PossessBar_Update();
|
|
elseif ( event == "ACTIONBAR_PAGE_CHANGED" ) then
|
|
if ( GetBonusBarOffset() > 0 ) then
|
|
ShowBonusActionBar();
|
|
else
|
|
HideBonusActionBar();
|
|
end
|
|
end
|
|
end
|
|
|
|
function PossessBar_Update (override)
|
|
if ( (not MainMenuBar.busy and not UnitHasVehicleUI("player")) or override ) then --Don't change while we're animating out MainMenuBar for vehicle UI
|
|
if ( IsPossessBarVisible() ) then
|
|
PossessBarFrame:Show();
|
|
ShapeshiftBarFrame:Hide();
|
|
ShowPetActionBar(true);
|
|
else
|
|
PossessBarFrame:Hide();
|
|
if(GetNumShapeshiftForms() > 0) then
|
|
ShapeshiftBarFrame:Show();
|
|
ShowPetActionBar(true);
|
|
end
|
|
end
|
|
PossessBar_UpdateState();
|
|
UIParent_ManageFramePositions();
|
|
end
|
|
end
|
|
|
|
function PossessBar_UpdateState ()
|
|
local texture, name, enabled;
|
|
local button, background, icon, cooldown;
|
|
|
|
for i=1, NUM_POSSESS_SLOTS do
|
|
-- Possess Icon
|
|
button = _G["PossessButton"..i];
|
|
background = _G["PossessBackground"..i];
|
|
icon = _G["PossessButton"..i.."Icon"];
|
|
texture, name, enabled = GetPossessInfo(i);
|
|
icon:SetTexture(texture);
|
|
|
|
--Cooldown stuffs
|
|
cooldown = _G["PossessButton"..i.."Cooldown"];
|
|
cooldown:Hide();
|
|
|
|
button:SetChecked(nil);
|
|
icon:SetVertexColor(1.0, 1.0, 1.0);
|
|
|
|
if ( enabled ) then
|
|
button:Show();
|
|
background:Show();
|
|
else
|
|
button:Hide();
|
|
background:Hide();
|
|
end
|
|
end
|
|
end
|
|
|
|
function PossessButton_OnClick (self)
|
|
self:SetChecked(nil);
|
|
|
|
local id = self:GetID();
|
|
if ( id == POSSESS_CANCEL_SLOT ) then
|
|
if ( UnitControllingVehicle("player") and CanExitVehicle() ) then
|
|
VehicleExit();
|
|
else
|
|
local texture, name = GetPossessInfo(id);
|
|
CancelUnitBuff("player", name);
|
|
end
|
|
end
|
|
end
|
|
|
|
function PossessButton_OnEnter (self)
|
|
local id = self:GetID();
|
|
|
|
if ( GetCVar("UberTooltips") == "1" ) then
|
|
GameTooltip_SetDefaultAnchor(GameTooltip, self);
|
|
else
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
end
|
|
|
|
if ( id == POSSESS_CANCEL_SLOT ) then
|
|
GameTooltip:SetText(CANCEL);
|
|
else
|
|
GameTooltip:SetPossession(id);
|
|
end
|
|
end
|