Files

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