Updated pending totem logic

Pending totem logic was only storing the latest pending totem. Refactored it to have a pending totem for each element type so that they do not overwrite when using throwset.
This commit is contained in:
MDGitHubRepo
2024-12-14 14:04:16 -05:00
parent 8f135ba494
commit 8d904ad02d
5 changed files with 1305 additions and 1161 deletions
+6
View File
@@ -47,6 +47,12 @@ COE.TotemsAvailable["Air"] = 0;
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["ActiveTotems"] = {Earth = nil, Fire = nil, Water = nil, Air = nil}; COE["ActiveTotems"] = {Earth = nil, Fire = nil, Water = nil, Air = nil};
COE["TotemPending"] = {Totem = nil, UseRank = 0, Timeout = 0.75}; COE["TotemPending"] = {Totem = nil, UseRank = 0, Timeout = 0.75};
COE["PendingTotems"] = {
Earth = {Totem = nil, Rank = 0, TimeoutStartMS = 0},
Fire = {Totem = nil, Rank = 0, TimeoutStartMS = 0},
Water = {Totem = nil, Rank = 0, TimeoutStartMS = 0},
Air = {Totem = nil, Rank = 0, TimeoutStartMS = 0}
};
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.CleansingTotems stores pointers to the buttons and totems COE.CleansingTotems stores pointers to the buttons and totems
+196 -26
View File
@@ -49,7 +49,8 @@ end
PURPOSE: Throws the totem with the specified named id PURPOSE: Throws the totem with the specified named id
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:ThrowTotem(element, id) function COE_Totem:ThrowTotem(element, id)
COE:DebugMessage(
"COE_Totem:ThrowTotem element and id: " .. element .. " " .. id);
if (not COE.Initialized) then return; end if (not COE.Initialized) then return; end
-- get associated button -- get associated button
@@ -57,6 +58,7 @@ function COE_Totem:ThrowTotem(element, id)
local button = getglobal("COETotem" .. element .. id); local button = getglobal("COETotem" .. element .. id);
if (button == nil) then if (button == nil) then
COE:Message("Invalid Totem"); COE:Message("Invalid Totem");
return; return;
end end
@@ -538,6 +540,7 @@ end
yet thrown yet thrown
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:ThrowSet() function COE_Totem:ThrowSet()
COE:DebugMessage("Method Executing: ThrowSet");
if (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1) then if (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1) then
@@ -545,14 +548,19 @@ function COE_Totem:ThrowSet()
-- check which totem to throw -- check which totem to throw
-- ======================================================================= -- =======================================================================
local activeset = COE_Config:GetSaved(COEOPT_ACTIVESET); local activeset = COE_Config:GetSaved(COEOPT_ACTIVESET);
COE:DebugMessage("ThrowSet activeset value: " .. activeset);
local k;
for k = 1, 4 do for k = 1, 4 do
COE:DebugMessage("ThrowSet k value: " .. k);
local element = COE:LocalizedElement( local element = COE:LocalizedElement(
COE.TotemSets[activeset].CastOrder[k]); COE.TotemSets[activeset].CastOrder[k]);
COE:DebugMessage("ThrowSet element value: " .. element);
local totem = COE.TotemSets[activeset][element]; local totem = COE.TotemSets[activeset][element];
COE:DebugMessage("ThrowSet COE.SetCycle[element] value: " ..
tostring(COE.SetCycle[element]));
if (COE.SetCycle[element] == false and totem) then if (COE.SetCycle[element] == false and totem) then
if (totem.isTrinket) then if (totem.isTrinket) then
@@ -570,15 +578,24 @@ function COE_Totem:ThrowSet()
end end
else else
COE:DebugMessage("ThrowSet casting totem: " .. element);
-- first check if the totem is already usable -- first check if the totem is already usable
-- ------------------------------------------- -- -------------------------------------------
local start, duration = GetSpellCooldown( local start, duration = GetSpellCooldown(
totem.Ranks[totem.MaxRank] totem.Ranks[totem.MaxRank]
.SpellID, BOOKTYPE_SPELL); .SpellID, BOOKTYPE_SPELL);
COE:DebugMessage("ThrowSet spell cooldown duration: " ..
duration);
if (start == 0 and duration == 0) then if (start == 0 and duration == 0) then
COE:DebugMessage(
"ThrowSet casting spell: " ..
COE.TotemSets[activeset][element].SpellName);
CastSpellByName(COE.TotemSets[activeset][element] CastSpellByName(COE.TotemSets[activeset][element]
.SpellName); .SpellName);
-- COE_Totem:SetPendingTotem(totem, totem.MaxRank);
return; return;
end end
end end
@@ -611,29 +628,38 @@ end
PURPOSE: Sets up or clears a pending totem PURPOSE: Sets up or clears a pending totem
The pending totem's timer is activated on the next The pending totem's timer is activated on the next
successful SPELLCAST_STOP or removed if it times out first successful SPELLCAST_STOP or removed if it times out first
PURPOSE: Sets up or clears a pending totem. The pending totem's
timer is activated when the spell is identified as cast. If
the spell is not identified as cast within 1 seconds, then
the pending status is removed.
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:SetPendingTotem(totem, rank) function COE_Totem:SetPendingTotem(totem, rank)
COE:DebugMessage("Method Executing: SetPendingTotem");
if (totem) then if (totem) then
COE:DebugMessage("Setting pending totem: " .. totem.SpellName ..
" with rank: " .. rank);
COE.TotemPending.Totem = totem;
COE.TotemPending.UseRank = rank;
-- get the current lag -- Set PendingTotems for the given totem element type
COE:DebugMessage("SetPendingTotem PendingTotems being set: " ..
totem.SpellName .. " with rank: " .. rank);
COE.PendingTotems[totem.Element].Totem = totem;
COE.PendingTotems[totem.Element].Rank = rank;
-- COE.PendingTotems[totem.Element].TimeoutStartMS = GetTime();
-- get the current lag - Not used but saving if needed
-- -------------------- -- --------------------
local _, _, lag = GetNetStats(); -- local _, _, lag = GetNetStats();
local timeout = lag / 1000 + COE.TotemPending.Timeout; -- local timeout = lag / 1000 + COE.TotemPending.Timeout;
local timeoutSec = 1;
-- use lag + 0.5 seconds as pending timeout -- use lag + 0.5 seconds as pending timeout
-- ----------------------------------------- -- -----------------------------------------
COE:DebugMessage("Setting pending timeout to: " .. timeout .. " msec"); COE:DebugMessage("SetPendingTotem Setting pending timeout to: " ..
timeoutSec .. " seconds");
Chronos.scheduleByName("COE_Pending", timeoutSec,
COESched_CheckPendingTotem, totem.Element);
Chronos.scheduleByName("COE_Pending", timeout,
COESched_CheckPendingTotem);
else
COE.TotemPending.Totem = nil;
COE.TotemPending.UseRank = 0;
end end
end end
@@ -642,20 +668,160 @@ end
METHOD: COESched_CheckPendingTotem METHOD: COESched_CheckPendingTotem
PURPOSE: Clears the pending totem if it is still active PURPOSE: Clears the pending totem if it is still active
-------------------------------------------------------------------]]
function COESched_CheckPendingTotem()
-- if there is still a pending totem it has timed out PURPOSE: Clears the pending totem if it is still pending.
-- --------------------------------------------------- -------------------------------------------------------------------]]
if (COE.TotemPending.Totem) then function COESched_CheckPendingTotem(element)
COE:DebugMessage("Pending totem has timed out: " .. COE:DebugMessage("Executing Method: COESched_CheckPendingTotem");
COE.TotemPending.Totem.SpellName);
COE_Totem:SetPendingTotem(nil); if (element) then
COE:DebugMessage("COESched_CheckPendingTotem for element: " .. element);
COE_Totem:ClearPendingTotem(COE.PendingTotems[element]);
end end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: ClearPendingTotem
PURPOSE: Clears the pending totem.
-------------------------------------------------------------------]]
function COE_Totem:ClearPendingTotem(pendingTotem)
COE:DebugMessage("Executing Method: ClearPendingTotem");
if (pendingTotem) then
pendingTotem.Totem = nil;
pendingTotem.Rank = nil;
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:GetTotemFromText
PURPOSE: Identifies a totem from the text value passed in. Can
return a nil totem.
-------------------------------------------------------------------]]
function COE_Totem:GetTotemFromText(text)
local totem;
COE:DebugMessage("GetTotemFromText for text value: " .. text);
-- find the totem
for k = 1, COE.TotemCount do
if (string.find(text, COE.TotemData[k].SpellName)) then
-- use existing totem object
-- --------------------------
totem = COE.TotemData[k];
COE:DebugMessage("GetTotemFromText found totem: " .. totem.SpellName);
break
end
end
return totem;
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:ActivateTotem
PURPOSE: Activates the totem timer and deactivates a
still active timer of the same element
-------------------------------------------------------------------]]
function COE_Totem:ActivateTotem(totem)
COE:DebugMessage("Method Executing: ActivateTotem with totem parameter " ..
totem.SpellName);
local pendingTotemObj = COE.PendingTotems[totem.Element];
if (pendingTotemObj and pendingTotemObj.Totem) then
COE:DebugMessage("ActivateTotem identified pending totem : " ..
pendingTotemObj.Totem.SpellName);
-- deactivate still active totem of the same element
-- --------------------------------------------------
local active = COE.ActiveTotems[totem.Element];
if (active) then COE_Totem:DeactivateTimer(active); end
local pendingTotem = pendingTotemObj.Totem;
local pendingTotemRank = pendingTotemObj.Rank;
-- activate timer
-- ---------------
Chronos.startTimer("COE" .. totem.SpellName);
totem.CurDuration = pendingTotem.Ranks[pendingTotemRank].Duration;
totem.CurHealth = pendingTotem.Ranks[pendingTotemRank].Health;
-- activate cooldown timer if this totem has a cooldown
-- -----------------------------------------------------
if (pendingTotem.Ranks[pendingTotemRank].Cooldown > 0) then
totem.CurCooldown = pendingTotem.Ranks[pendingTotemRank].Cooldown;
Chronos.startTimer("COECooldown" .. totem.SpellName);
Chronos.scheduleByName("COECooldownSwitch" .. totem.SpellName,
totem.CurCooldown, COESched_CooldownEnd,
totem);
end
-- activate warning timers
-- ------------------------
if (totem.CurDuration >= 10) then
Chronos.scheduleByName("COEWarn10" .. totem.SpellName,
totem.CurDuration - 10,
COESched_ExpirationWarning, 10, totem);
end
Chronos.scheduleByName("COEWarn5" .. totem.SpellName,
totem.CurDuration - 5,
COESched_ExpirationWarning, 5, totem);
Chronos.scheduleByName("COEWarn0" .. totem.SpellName, totem.CurDuration,
COESched_ExpirationWarning, 0, totem);
-- mark totem as active
-- ---------------------
COE.ActiveTotems[pendingTotem.Element] = totem;
totem.isActive = true;
-- set totem in timer frame
-- -------------------------
if (COE_Config:GetSaved(COEOPT_TIMERFRAME) == 1) then
getglobal("COETimer" .. pendingTotem.Element).totem = totem;
COETimerFrame:Show();
end
-- mark totem as thrown if in current set
-- ---------------------------------------
local activeset = COE_Config:GetSaved(COEOPT_ACTIVESET);
if (COE.TotemSets[activeset][totem.Element] and
COE.TotemSets[activeset][totem.Element].SpellName == totem.SpellName) then
COE:DebugMessage("ActivateTotem Element " .. totem.Element ..
" in current cycle: SET");
COE.SetCycle[totem.Element] = true;
end
-- clear pending totem
-- --------------------
COE_Totem:ClearPendingTotem(pendingTotemObj);
-- if in timers only mode, reconfigure the totem bar
-- --------------------------------------------------
if (COE_Config:GetSaved(COEOPT_DISPLAYMODE) == COEMODE_TIMERSONLY) then
COE_Totem:Invalidate(getglobal("COE" .. totem.Element .. "Frame"),
true, true, true);
COETotemFrame.Reconfigure = true;
else
-- otherwise just invalidate the dynamic buttons
-- ----------------------------------------------
COE_Totem:Invalidate(getglobal("COE" .. totem.Element .. "Frame"),
false, false, true);
end
end
end
--[[ ----------------------------------------------------------------
DEPRECATED: Use ActivateTotem
METHOD: COE_Totem:ActivatePendingTotem METHOD: COE_Totem:ActivatePendingTotem
PURPOSE: Activates the pending totem timer and deactivates a PURPOSE: Activates the pending totem timer and deactivates a
@@ -669,7 +835,7 @@ function COE_Totem:ActivatePendingTotem(totem)
-- deactivate still active totem of the same element -- deactivate still active totem of the same element
-- -------------------------------------------------- -- --------------------------------------------------
COE:DebugMessage( COE:DebugMessage(
"Method Executing: ActivatePendingTotem - identifying active totems of type" .. "ActivatePendingTotem - identifying active totems of type" ..
COE.TotemPending.Totem.Element); COE.TotemPending.Totem.Element);
local active = COE.ActiveTotems[COE.TotemPending.Totem.Element]; local active = COE.ActiveTotems[COE.TotemPending.Totem.Element];
if (active) then COE_Totem:DeactivateTimer(active); end if (active) then COE_Totem:DeactivateTimer(active); end
@@ -783,7 +949,7 @@ function COE_Totem:DeactivateTimer(totem)
if (COE.TotemSets[activeset][totem.Element] and if (COE.TotemSets[activeset][totem.Element] and
COE.TotemSets[activeset][totem.Element].SpellName == totem.SpellName) then COE.TotemSets[activeset][totem.Element].SpellName == totem.SpellName) then
COE:DebugMessage("Element " .. totem.Element .. COE:DebugMessage("DeactivateTimer Element " .. totem.Element ..
" in current cycle: UNSET"); " in current cycle: UNSET");
COE.SetCycle[totem.Element] = false; COE.SetCycle[totem.Element] = false;
end end
@@ -975,6 +1141,7 @@ end
original function afterwards original function afterwards
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:SetupTimerHooks() function COE_Totem:SetupTimerHooks()
COE:DebugMessage("Method Executing: SetupTimerHooks");
COE_Totem.TimerHooks["UseAction"] = UseAction; COE_Totem.TimerHooks["UseAction"] = UseAction;
UseAction = function(id, book, onself) UseAction = function(id, book, onself)
@@ -1009,7 +1176,7 @@ end
a totem a totem
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:HookUseAction(id, book) function COE_Totem:HookUseAction(id, book)
COE:DebugMessage("Method Executing: HookUseAction");
-- use only when timers are enabled -- use only when timers are enabled
-- --------------------------------- -- ---------------------------------
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end
@@ -1074,6 +1241,7 @@ end
a totem a totem
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:HookCastSpell(id, book) function COE_Totem:HookCastSpell(id, book)
COE:DebugMessage("Method Executing: HookCastSpell");
-- use only when timers are enabled -- use only when timers are enabled
-- --------------------------------- -- ---------------------------------
@@ -1107,6 +1275,7 @@ end
a totem a totem
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:HookCastSpellByName(SpellName) function COE_Totem:HookCastSpellByName(SpellName)
COE:DebugMessage("Method Executing: HookCastSpellByName");
-- use only when timers are enabled -- use only when timers are enabled
-- --------------------------------- -- ---------------------------------
@@ -1149,6 +1318,7 @@ end
a totem a totem
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:HookUseInventoryItem(slotid) function COE_Totem:HookUseInventoryItem(slotid)
COE:DebugMessage("Method Executing: HookUseInventoryItem");
-- use only when timers are enabled -- use only when timers are enabled
-- --------------------------------- -- ---------------------------------
+148 -192
View File
@@ -8,18 +8,18 @@
Totem Module / Visual Totem Module / Visual
]] ]] if (not COE_Totem) then COE_Totem = {}; end
if( not COE_Totem ) then
COE_Totem = {};
end
COEUI_BUTTONGAP = 4; COEUI_BUTTONGAP = 4;
COE_Totem.FlexTime = 0.3; COE_Totem.FlexTime = 0.3;
COEFramePositions = { Earth = { x = 0, y = 0 }, Fire = { x = 0, y = 0 }, COEFramePositions = {
Water = { x = 0, y = 0 }, Air = { x = 0, y = 0 } } Earth = {x = 0, y = 0},
Fire = {x = 0, y = 0},
Water = {x = 0, y = 0},
Air = {x = 0, y = 0}
}
COEDynamic = {n = 7, nil, nil, nil, nil, nil, nil, nil}; COEDynamic = {n = 7, nil, nil, nil, nil, nil, nil, nil};
@@ -46,9 +46,7 @@ COEDynamic = { n = 7, nil, nil, nil, nil, nil, nil, nil };
function COE_Totem:InitMainFrame() function COE_Totem:InitMainFrame()
-- addon loaded? -- addon loaded?
-- -------------- -- --------------
if( not COE.Initialized ) then if (not COE.Initialized) then return; end
return;
end
-- init frame properties -- init frame properties
-- ---------------------- -- ----------------------
@@ -73,7 +71,6 @@ function COE_Totem:InitMainFrame()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:OnMainFrameEvent METHOD: COE_Totem:OnMainFrameEvent
@@ -94,7 +91,8 @@ function COE_Totem:OnMainFrameEvent( event )
-- start advisor schedule -- start advisor schedule
-- ----------------------- -- -----------------------
if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1) then if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1) then
Chronos.scheduleByName( "COEAdvise", COE.AdvisorInterval, COESched_RunAdvisor ); Chronos.scheduleByName("COEAdvise", COE.AdvisorInterval,
COESched_RunAdvisor);
end end
-- get current element frame coordinates -- get current element frame coordinates
@@ -108,9 +106,7 @@ function COE_Totem:OnMainFrameEvent( event )
elseif (event == "PLAYER_TARGET_CHANGED") then elseif (event == "PLAYER_TARGET_CHANGED") then
if( COE_Config:GetSaved( COEOPT_ENABLETOTEMBAR ) == 0 ) then if (COE_Config:GetSaved(COEOPT_ENABLETOTEMBAR) == 0) then return; end
return;
end
-- Switch to named set if appropriate -- Switch to named set if appropriate
-- ----------------------------------- -- -----------------------------------
@@ -126,14 +122,12 @@ function COE_Totem:OnMainFrameEvent( event )
-- ---------------------------- -- ----------------------------
COE_Totem:ResetTimers(); COE_Totem:ResetTimers();
elseif ( event == "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE" or elseif (event == "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE" or event ==
event == "CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS" or "CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS" or event ==
event == "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE" or "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE" or event ==
event == "CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS" ) then "CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS") then
if( COE_Config:GetSaved( COEOPT_ENABLETOTEMBAR ) == 0 ) then if (COE_Config:GetSaved(COEOPT_ENABLETOTEMBAR) == 0) then return; end
return;
end
-- Assign totem damage -- Assign totem damage
-- -------------------- -- --------------------
@@ -142,7 +136,6 @@ function COE_Totem:OnMainFrameEvent( event )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:ConfigureTotemButtons METHOD: COE_Totem:ConfigureTotemButtons
@@ -153,9 +146,7 @@ function COE_Totem:ConfigureTotemButtons()
-- reconfiguration necessary? -- reconfiguration necessary?
-- --------------------------- -- ---------------------------
if( not COETotemFrame.Reconfigure ) then if (not COETotemFrame.Reconfigure) then return; end
return;
end
local i; local i;
local buttons = {Earth = 0, Fire = 0, Water = 0, Air = 0}; local buttons = {Earth = 0, Fire = 0, Water = 0, Air = 0};
@@ -213,7 +204,9 @@ function COE_Totem:ConfigureTotemButtons()
-- check if this totem's order is before or after -- check if this totem's order is before or after
-- the normal order of this element's active totem -- the normal order of this element's active totem
-- ------------------------------------------------ -- ------------------------------------------------
local activeorder = COE_DisplayedTotems[COE.ActiveTotems[totem.Element].SpellName].Order; local activeorder =
COE_DisplayedTotems[COE.ActiveTotems[totem.Element]
.SpellName].Order;
if (order < activeorder) then if (order < activeorder) then
order = order + 1; order = order + 1;
end end
@@ -238,10 +231,10 @@ function COE_Totem:ConfigureTotemButtons()
-- check if this totem's order is before or after -- check if this totem's order is before or after
-- the normal order of this set's element totem -- the normal order of this set's element totem
-- ----------------------------------------------- -- -----------------------------------------------
local activeorder = COE_DisplayedTotems[COE.TotemSets[activeset][totem.Element].SpellName].Order; local activeorder =
if( order < activeorder ) then COE_DisplayedTotems[COE.TotemSets[activeset][totem.Element]
order = order + 1; .SpellName].Order;
end if (order < activeorder) then order = order + 1; end
button = getglobal("COETotem" .. totem.Element .. order); button = getglobal("COETotem" .. totem.Element .. order);
else else
@@ -285,7 +278,6 @@ function COE_Totem:ConfigureTotemButtons()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateAllFrames METHOD: COE_Totem:UpdateAllFrames
@@ -327,7 +319,6 @@ function COE_Totem:UpdateAllFrames()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:ResetFrames METHOD: COE_Totem:ResetFrames
@@ -348,7 +339,6 @@ function COE_Totem:ResetFrames()
end end
--[[ ============================================================================================= --[[ =============================================================================================
F R A M E F R A M E
@@ -379,7 +369,6 @@ end
------------------------------------------------------------------------------------------------]] ------------------------------------------------------------------------------------------------]]
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:InitFrame METHOD: COE_Totem:InitFrame
@@ -388,9 +377,7 @@ end
function COE_Totem:InitFrame() function COE_Totem:InitFrame()
-- addon loaded? -- addon loaded?
-- -------------- -- --------------
if( not COE.Initialized ) then if (not COE.Initialized) then return; end
return;
end
-- init update timer -- init update timer
-- ------------------ -- ------------------
@@ -410,7 +397,6 @@ function COE_Totem:InitFrame()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:OnFrameEvent METHOD: COE_Totem:OnFrameEvent
@@ -436,7 +422,6 @@ function COE_Totem:OnFrameEvent( event )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:Invalidate METHOD: COE_Totem:Invalidate
@@ -449,21 +434,14 @@ function COE_Totem:Invalidate( frame, Anchor, Static, Dynamic )
-- a previous call to Invaldiate with a true parameter -- a previous call to Invaldiate with a true parameter
-- ---------------------------------------------------- -- ----------------------------------------------------
if( Anchor ) then if (Anchor) then frame.Updates.Anchor = true; end
frame.Updates.Anchor = true;
end
if( Static ) then if (Static) then frame.Updates.Static = true; end
frame.Updates.Static = true;
end
if( Dynamic ) then if (Dynamic) then frame.Updates.Dynamic = true; end
frame.Updates.Dynamic = true;
end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateFrame METHOD: COE_Totem:UpdateFrame
@@ -474,9 +452,7 @@ function COE_Totem:UpdateFrame( elapsed )
-- check if visual update is necessary -- check if visual update is necessary
-- ------------------------------------ -- ------------------------------------
this.UpdateTime = this.UpdateTime + elapsed; this.UpdateTime = this.UpdateTime + elapsed;
if( this.UpdateTime <= COE.UpdateInterval ) then if (this.UpdateTime <= COE.UpdateInterval) then return; end
return;
end
-- show frame? -- show frame?
-- ------------ -- ------------
@@ -494,9 +470,7 @@ function COE_Totem:UpdateFrame( elapsed )
-- invalidate all if moving -- invalidate all if moving
-- ------------------------- -- -------------------------
if( this.isMoving ) then if (this.isMoving) then COE_Totem:Invalidate(this, true, true, true); end
COE_Totem:Invalidate( this, true, true, true );
end
-- configure buttons for this frame -- configure buttons for this frame
-- --------------------------------- -- ---------------------------------
@@ -504,9 +478,7 @@ function COE_Totem:UpdateFrame( elapsed )
-- configure anchor button -- configure anchor button
-- ------------------------ -- ------------------------
if( this.Updates.Anchor ) then if (this.Updates.Anchor) then COE_Totem:UpdateAnchorButton(); end
COE_Totem:UpdateAnchorButton();
end
-- only update if at least the anchor -- only update if at least the anchor
-- totem button has a totem assigned -- totem button has a totem assigned
@@ -516,24 +488,18 @@ function COE_Totem:UpdateFrame( elapsed )
-- update the static flex-totems -- update the static flex-totems
-- ------------------------------ -- ------------------------------
if( this.Updates.Static ) then if (this.Updates.Static) then COE_Totem:UpdateStatic(); end
COE_Totem:UpdateStatic();
end
-- update the dynamic flex-totems -- update the dynamic flex-totems
-- ------------------------------- -- -------------------------------
if( this.Updates.Dynamic ) then if (this.Updates.Dynamic) then COE_Totem:UpdateDynamic(); end
COE_Totem:UpdateDynamic();
end
else else
this.AnchorTotem:Hide(); this.AnchorTotem:Hide();
end end
-- adjust other frames when dragging -- adjust other frames when dragging
-- ---------------------------------- -- ----------------------------------
if( this.IsMoving ) then if (this.IsMoving) then COE_Totem:AdjustDraggedFrames(); end
COE_Totem:AdjustDraggedFrames();
end
-- reset invalidation flags -- reset invalidation flags
-- ------------------------- -- -------------------------
@@ -547,7 +513,6 @@ function COE_Totem:UpdateFrame( elapsed )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateAnchorButton METHOD: COE_Totem:UpdateAnchorButton
@@ -563,7 +528,8 @@ function COE_Totem:UpdateAnchorButton()
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1"); this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1");
elseif (mode == COEMODE_TIMERSONLY) then elseif (mode == COEMODE_TIMERSONLY) then
if( COE.ActiveTotems[this.Element] or COE_TotemBars[this.Element].Mode == "Open" ) then if (COE.ActiveTotems[this.Element] or COE_TotemBars[this.Element].Mode ==
"Open") then
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1"); this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1");
else else
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "None"); this.AnchorTotem = getglobal("COETotem" .. this.Element .. "None");
@@ -571,7 +537,8 @@ function COE_Totem:UpdateAnchorButton()
end end
else else
if( COE.TotemSets[activeset][this.Element] or COE_TotemBars[this.Element].Mode == "Open" ) then if (COE.TotemSets[activeset][this.Element] or
COE_TotemBars[this.Element].Mode == "Open") then
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1"); this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1");
else else
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "None"); this.AnchorTotem = getglobal("COETotem" .. this.Element .. "None");
@@ -589,7 +556,6 @@ function COE_Totem:UpdateAnchorButton()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateStatic METHOD: COE_Totem:UpdateStatic
@@ -597,7 +563,8 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:UpdateStatic() function COE_Totem:UpdateStatic()
local inConfig = COE.ConfigureBarMode or COE.ConfigureOrderMode or COE.ConfigureSetsMode; local inConfig = COE.ConfigureBarMode or COE.ConfigureOrderMode or
COE.ConfigureSetsMode;
if (this.Mode == "Closed" and not COE.ConfigureBarMode and if (this.Mode == "Closed" and not COE.ConfigureBarMode and
not COE.ConfigureOrderMode and not COE.ConfigureSetsMode) then not COE.ConfigureOrderMode and not COE.ConfigureSetsMode) then
@@ -632,8 +599,10 @@ function COE_Totem:UpdateStatic()
-- only show button if it has a totem -- only show button if it has a totem
-- ----------------------------------- -- -----------------------------------
if( button.totem and (COE_DisplayedTotems[button.totem.SpellName].Visible or inConfig) ) then if (button.totem and
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); (COE_DisplayedTotems[button.totem.SpellName].Visible or inConfig)) then
button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
else else
@@ -643,7 +612,6 @@ function COE_Totem:UpdateStatic()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateDynamic METHOD: COE_Totem:UpdateDynamic
@@ -665,13 +633,15 @@ function COE_Totem:UpdateDynamic()
if (this.AnchorTotem.totem == COE.NoTotem) then if (this.AnchorTotem.totem == COE.NoTotem) then
if (this.FlexCount > 1) then if (this.FlexCount > 1) then
lastvisible = getglobal( "COETotem" .. this.Element .. this.FlexCount - 1 ); lastvisible = getglobal("COETotem" .. this.Element ..
this.FlexCount - 1);
else else
lastvisible = getglobal("COETotem" .. this.Element .. "None"); lastvisible = getglobal("COETotem" .. this.Element .. "None");
end end
start = this.FlexCount; start = this.FlexCount;
else else
lastvisible = getglobal( "COETotem" .. this.Element .. this.FlexCount ); lastvisible =
getglobal("COETotem" .. this.Element .. this.FlexCount);
start = this.FlexCount + 1; start = this.FlexCount + 1;
end end
@@ -684,12 +654,15 @@ function COE_Totem:UpdateDynamic()
button = getglobal("COETotem" .. this.Element .. i); button = getglobal("COETotem" .. this.Element .. i);
button:ClearAllPoints(); button:ClearAllPoints();
if( button.totem and COE_DisplayedTotems[button.totem.SpellName].Visible ) then if (button.totem and
if( COE.ActiveTotems[this.Element] == button.totem and COE_Totem:IsTimerActive( button.totem ) ) then COE_DisplayedTotems[button.totem.SpellName].Visible) then
if (COE.ActiveTotems[this.Element] == button.totem and
COE_Totem:IsTimerActive(button.totem)) then
-- show button if it is active -- show button if it is active
-- ---------------------------- -- ----------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -697,7 +670,8 @@ function COE_Totem:UpdateDynamic()
-- show button if it has a running cooldown -- show button if it has a running cooldown
-- ----------------------------------------- -- -----------------------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -705,7 +679,8 @@ function COE_Totem:UpdateDynamic()
-- show button if it is advised -- show button if it is advised
-- ----------------------------- -- -----------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -732,7 +707,8 @@ function COE_Totem:UpdateDynamic()
-- show button if it has a totem and the bar is expanded -- show button if it has a totem and the bar is expanded
-- ------------------------------------------------------ -- ------------------------------------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -759,7 +735,8 @@ function COE_Totem:UpdateDynamic()
-- show button if it is active -- show button if it is active
-- ---------------------------- -- ----------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -767,7 +744,8 @@ function COE_Totem:UpdateDynamic()
-- show button if it has a running cooldown -- show button if it has a running cooldown
-- ----------------------------------------- -- -----------------------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -775,7 +753,8 @@ function COE_Totem:UpdateDynamic()
-- show button if it isa advised -- show button if it isa advised
-- ------------------------------ -- ------------------------------
button:SetScale(0.8); button:SetScale(0.8);
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing ); button:SetPoint(this.Point, lastvisible, this.RelPoint,
this.XSpacing, this.YSpacing);
button:Show(); button:Show();
lastvisible = button; lastvisible = button;
@@ -789,7 +768,6 @@ function COE_Totem:UpdateDynamic()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:COESched_HideDynamicButtons METHOD: COE_Totem:COESched_HideDynamicButtons
@@ -803,7 +781,6 @@ function COESched_HideDynamicButtons( frame )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:SetFrameDirection METHOD: COE_Totem:SetFrameDirection
@@ -848,7 +825,6 @@ function COE_Totem:SetFrameDirection( frame, direction )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:AdjustDraggedFrames METHOD: COE_Totem:AdjustDraggedFrames
@@ -858,9 +834,7 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:AdjustDraggedFrames() function COE_Totem:AdjustDraggedFrames()
if( COE_Config:GetSaved( COEOPT_GROUPBARS ) == 0 ) then if (COE_Config:GetSaved(COEOPT_GROUPBARS) == 0) then return; end
return;
end
local x, y, k, dx, dy; local x, y, k, dx, dy;
@@ -884,7 +858,8 @@ function COE_Totem:AdjustDraggedFrames()
-- the relative position to the frame being dragged -- the relative position to the frame being dragged
-- ------------------------------------------------- -- -------------------------------------------------
frame:ClearAllPoints(); frame:ClearAllPoints();
frame:SetPoint( "TOPLEFT", UIParent, "BOTTOMLEFT", COEFramePositions[frame.Element].x + dx, frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT",
COEFramePositions[frame.Element].x + dx,
COEFramePositions[frame.Element].y + dy); COEFramePositions[frame.Element].y + dy);
-- invalidate all parts -- invalidate all parts
@@ -896,7 +871,6 @@ function COE_Totem:AdjustDraggedFrames()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateFrameCoordinates METHOD: COE_Totem:UpdateFrameCoordinates
@@ -918,7 +892,6 @@ function COE_Totem:UpdateFrameCoordinates()
end end
--[[ ============================================================================================= --[[ =============================================================================================
B U T T O N B U T T O N
@@ -943,9 +916,7 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:OnTotemButtonLoad() function COE_Totem:OnTotemButtonLoad()
if( not COE.Initialized ) then if (not COE.Initialized) then return; end
return;
end
-- init properties -- init properties
-- ---------------- -- ----------------
@@ -970,7 +941,6 @@ function COE_Totem:OnTotemButtonLoad()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:OnTotemButtonEvent METHOD: COE_Totem:OnTotemButtonEvent
@@ -984,19 +954,13 @@ function COE_Totem:OnTotemButtonEvent( event )
end end
elseif (event == "ACTIONBAR_UPDATE_USABLE") then elseif (event == "ACTIONBAR_UPDATE_USABLE") then
if( this.totem ) then if (this.totem) then COE_Totem:UpdateTotemButtonIsUsable(); end
COE_Totem:UpdateTotemButtonIsUsable();
end
elseif (event == "ACTIONBAR_UPDATE_COOLDOWN") then elseif (event == "ACTIONBAR_UPDATE_COOLDOWN") then
if( this.totem ) then if (this.totem) then COE_Totem:UpdateTotemButtonCooldown(); end
COE_Totem:UpdateTotemButtonCooldown();
end
elseif (event == "UNIT_MANA" and arg1 == "player") then elseif (event == "UNIT_MANA" and arg1 == "player") then
if( this.totem ) then if (this.totem) then COE_Totem:UpdateTotemButtonIsUsable(); end
COE_Totem:UpdateTotemButtonIsUsable();
end
elseif (event == "UNIT_INVENTORY_CHANGED" or event == "BAG_UPDATE") then elseif (event == "UNIT_INVENTORY_CHANGED" or event == "BAG_UPDATE") then
-- check for presence of totem tools -- check for presence of totem tools
@@ -1008,13 +972,16 @@ function COE_Totem:OnTotemButtonEvent( event )
local slot; local slot;
totem.ToolPresent, slot = COE:IsTrinketPresent(); totem.ToolPresent, slot = COE:IsTrinketPresent();
if( slot and slot ~= totem.TrinketSlot and totem.CurCooldown < 30 ) then if (slot and slot ~= totem.TrinketSlot and totem.CurCooldown <
30) then
-- trinket has been (re-)equipped -- trinket has been (re-)equipped
-- start item cooldown -- start item cooldown
-- ------------------------------- -- -------------------------------
totem.CurCooldown = 30; totem.CurCooldown = 30;
Chronos.startTimer("COECooldown" .. totem.SpellName); Chronos.startTimer("COECooldown" .. totem.SpellName);
Chronos.scheduleByName( "COECooldownSwitch" .. totem.SpellName, totem.CurCooldown, COESched_CooldownEnd, totem ); Chronos.scheduleByName(
"COECooldownSwitch" .. totem.SpellName,
totem.CurCooldown, COESched_CooldownEnd, totem);
end end
@@ -1025,23 +992,21 @@ function COE_Totem:OnTotemButtonEvent( event )
end end
elseif (event == "UPDATE_BINDINGS") then elseif (event == "UPDATE_BINDINGS") then
if( this.totem ) then if (this.totem) then COE_Totem:UpdateTotemButtonHotKey(); end
COE_Totem:UpdateTotemButtonHotKey();
end
elseif( event == "SPELLCAST_STOP" ) then -- UPDATED single totem pending logic to handle multiple pending and fire when totem cast is reported from event
-- activate timer if totem is pending -- elseif (event == "SPELLCAST_STOP") then
-- ----------------------------------- -- -- activate timer if totem is pending
if( COE_Config:GetSaved( COEOPT_ENABLETIMERS ) == 1 and -- -- -----------------------------------
this.totem and this.totem == COE.TotemPending.Totem ) then -- if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 1 and this.totem and
COE_Totem:ActivatePendingTotem( this.totem ); -- this.totem == COE.TotemPending.Totem) then
end -- COE_Totem:ActivatePendingTotem(this.totem);
-- end
end end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateTotemButton METHOD: COE_Totem:UpdateTotemButton
@@ -1052,9 +1017,7 @@ function COE_Totem:UpdateTotemButton( elapsed )
-- check if visual update is necessary -- check if visual update is necessary
-- ------------------------------------ -- ------------------------------------
this.UpdateTime = this.UpdateTime + elapsed; this.UpdateTime = this.UpdateTime + elapsed;
if( this.UpdateTime <= COE.UpdateInterval ) then if (this.UpdateTime <= COE.UpdateInterval) then return; end
return;
end
if (this.totem == nil) then if (this.totem == nil) then
this:Hide(); this:Hide();
@@ -1107,7 +1070,8 @@ function COE_Totem:UpdateTotemButton( elapsed )
end end
elseif (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1 and elseif (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1 and
COE.TotemSets[COE_Config:GetSaved( COEOPT_ACTIVESET )][this.totem.Element] == this.totem ) then COE.TotemSets[COE_Config:GetSaved(COEOPT_ACTIVESET)][this.totem
.Element] == this.totem) then
-- set a red border when this totem -- set a red border when this totem
-- belongs to the current totem set -- belongs to the current totem set
@@ -1129,7 +1093,6 @@ function COE_Totem:UpdateTotemButton( elapsed )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateTotemButtonCooldown METHOD: COE_Totem:UpdateTotemButtonCooldown
@@ -1137,9 +1100,7 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:UpdateTotemButtonCooldown() function COE_Totem:UpdateTotemButtonCooldown()
if( this.totem == COE.NoTotem ) then if (this.totem == COE.NoTotem) then return; end
return;
end;
local cooldown = getglobal(this:GetName() .. "Cooldown"); local cooldown = getglobal(this:GetName() .. "Cooldown");
@@ -1151,7 +1112,8 @@ function COE_Totem:UpdateTotemButtonCooldown()
if (this.totem.isTrinket) then if (this.totem.isTrinket) then
if (this.totem.ToolPresent) then if (this.totem.ToolPresent) then
start, duration, enable = GetInventoryItemCooldown( "player", this.totem.TrinketSlot ); start, duration, enable =
GetInventoryItemCooldown("player", this.totem.TrinketSlot);
else else
cooldown:Hide(); cooldown:Hide();
return; return;
@@ -1168,7 +1130,6 @@ function COE_Totem:UpdateTotemButtonCooldown()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateTotemButtonIsUsable METHOD: COE_Totem:UpdateTotemButtonIsUsable
@@ -1179,9 +1140,7 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:UpdateTotemButtonIsUsable() function COE_Totem:UpdateTotemButtonIsUsable()
if( this.totem == COE.NoTotem ) then if (this.totem == COE.NoTotem) then return; end
return;
end;
local icon = getglobal(this:GetName() .. "Icon"); local icon = getglobal(this:GetName() .. "Icon");
local normalTexture = getglobal(this:GetName() .. "NormalTexture"); local normalTexture = getglobal(this:GetName() .. "NormalTexture");
@@ -1216,7 +1175,6 @@ function COE_Totem:UpdateTotemButtonIsUsable()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateTotemButtonHotKey METHOD: COE_Totem:UpdateTotemButtonHotKey
@@ -1224,14 +1182,14 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:UpdateTotemButtonHotKey() function COE_Totem:UpdateTotemButtonHotKey()
if( this.totem == COE.NoTotem ) then if (this.totem == COE.NoTotem) then return; end
return;
end;
-- get the binding name -- get the binding name
-- --------------------- -- ---------------------
local binding = "TOTEM" .. string.upper(this.totem.Element); local binding = "TOTEM" .. string.upper(this.totem.Element);
local id = this:GetID() - getglobal( "COETotem" .. this.totem.Element .. "1" ):GetID() + 1; local id = this:GetID() -
getglobal("COETotem" .. this.totem.Element .. "1"):GetID() +
1;
binding = binding .. id; binding = binding .. id;
-- get the binding text -- get the binding text
@@ -1252,7 +1210,6 @@ function COE_Totem:UpdateTotemButtonHotKey()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateTotemButtonFlash METHOD: COE_Totem:UpdateTotemButtonFlash
@@ -1261,14 +1218,15 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:UpdateTotemButtonFlash(elapsed) function COE_Totem:UpdateTotemButtonFlash(elapsed)
if( (this.totem == COE.NoTotem) or this.totem.isTrinket ) then if ((this.totem == COE.NoTotem) or this.totem.isTrinket) then return; end
return;
end;
if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1) then if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1) then
if( (this == COE.CleansingTotems.Tremor.Button and COE.CleansingTotems.Tremor.Warn) or if ((this == COE.CleansingTotems.Tremor.Button and
(this == COE.CleansingTotems.Disease.Button and COE.CleansingTotems.Disease.Warn) or COE.CleansingTotems.Tremor.Warn) or
(this == COE.CleansingTotems.Poison.Button and COE.CleansingTotems.Poison.Warn) ) then (this == COE.CleansingTotems.Disease.Button and
COE.CleansingTotems.Disease.Warn) or
(this == COE.CleansingTotems.Poison.Button and
COE.CleansingTotems.Poison.Warn)) then
this.Flashtime = this.Flashtime - elapsed; this.Flashtime = this.Flashtime - elapsed;
if (this.Flashtime <= 0) then if (this.Flashtime <= 0) then
@@ -1294,7 +1252,6 @@ function COE_Totem:UpdateTotemButtonFlash( elapsed )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:OnEnterTotemButton METHOD: COE_Totem:OnEnterTotemButton
@@ -1308,7 +1265,8 @@ function COE_Totem:OnEnterTotemButton()
if (COEUI_TTALIGN[COE_Config:GetSaved(COEOPT_TTALIGNMENT)][1] ~= "DISABLED" and if (COEUI_TTALIGN[COE_Config:GetSaved(COEOPT_TTALIGNMENT)][1] ~= "DISABLED" and
this.totem ~= COE.NoTotem) then this.totem ~= COE.NoTotem) then
GameTooltip:SetOwner( this, COEUI_TTALIGN[COE_Config:GetSaved( COEOPT_TTALIGNMENT )][1] ); GameTooltip:SetOwner(this, COEUI_TTALIGN[COE_Config:GetSaved(
COEOPT_TTALIGNMENT)][1]);
if (this.totem.isTrinket) then if (this.totem.isTrinket) then
-- show item tooltip if equipped -- show item tooltip if equipped
@@ -1337,7 +1295,6 @@ function COE_Totem:OnEnterTotemButton()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:OnLeaveTotemButton METHOD: COE_Totem:OnLeaveTotemButton
@@ -1354,11 +1311,12 @@ function COE_Totem:OnLeaveTotemButton()
-- schedule hiding of the dynamic buttons -- schedule hiding of the dynamic buttons
-- --------------------------------------- -- ---------------------------------------
if (this.ElementFrame.Mode == "Flex") then if (this.ElementFrame.Mode == "Flex") then
Chronos.scheduleByName( "COEFlex" .. this.ElementFrame.Element, COE_Totem.FlexTime, COESched_HideDynamicButtons, this.ElementFrame ); Chronos.scheduleByName("COEFlex" .. this.ElementFrame.Element,
COE_Totem.FlexTime, COESched_HideDynamicButtons,
this.ElementFrame);
end end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:OnTotemButtonClick METHOD: COE_Totem:OnTotemButtonClick
@@ -1367,9 +1325,7 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:OnTotemButtonClick() function COE_Totem:OnTotemButtonClick()
if( this.totem == COE.NoTotem ) then if (this.totem == COE.NoTotem) then return; end
return;
end;
if (COE.ConfigureBarMode) then if (COE.ConfigureBarMode) then
@@ -1398,13 +1354,15 @@ function COE_Totem:OnTotemButtonClick()
else else
-- swap this totem with the first one -- swap this totem with the first one
-- ----------------------------------- -- -----------------------------------
local swap = COE_DisplayedTotems[COE_Config.ConfigureOrderTotem.SpellName].Order; local swap = COE_DisplayedTotems[COE_Config.ConfigureOrderTotem
COE_DisplayedTotems[COE_Config.ConfigureOrderTotem.SpellName].Order = COE_DisplayedTotems[this.totem.SpellName].Order; .SpellName].Order;
COE_DisplayedTotems[COE_Config.ConfigureOrderTotem.SpellName].Order =
COE_DisplayedTotems[this.totem.SpellName].Order;
COE_DisplayedTotems[this.totem.SpellName].Order = swap; COE_DisplayedTotems[this.totem.SpellName].Order = swap;
COE_Config.ConfigureOrderTotem = nil; COE_Config.ConfigureOrderTotem = nil;
end; end
-- reconfigure totem bar -- reconfigure totem bar
-- ---------------------- -- ----------------------
@@ -1420,16 +1378,19 @@ function COE_Totem:OnTotemButtonClick()
if (activeset <= COESET_DEFAULT) then if (activeset <= COESET_DEFAULT) then
COE_SavedTotemSets[activeset][this.totem.Element] = ""; COE_SavedTotemSets[activeset][this.totem.Element] = "";
else else
COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem.Element] = ""; COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem
.Element] = "";
end end
else else
-- store in set -- store in set
-- ------------- -- -------------
COE.TotemSets[activeset][this.totem.Element] = this.totem; COE.TotemSets[activeset][this.totem.Element] = this.totem;
if (activeset <= COESET_DEFAULT) then if (activeset <= COESET_DEFAULT) then
COE_SavedTotemSets[activeset][this.totem.Element] = this.totem.SpellName; COE_SavedTotemSets[activeset][this.totem.Element] = this.totem
.SpellName;
else else
COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem.Element] = this.totem.SpellName; COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem
.Element] = this.totem.SpellName;
end end
end end
@@ -1441,9 +1402,7 @@ function COE_Totem:OnTotemButtonClick()
-- if the ctrl key is down, make this totem the anchor totem -- if the ctrl key is down, make this totem the anchor totem
-- ---------------------------------------------------------- -- ----------------------------------------------------------
if( IsControlKeyDown() ) then if (IsControlKeyDown()) then COE_Totem:MakeAnchorTotem(this); end
COE_Totem:MakeAnchorTotem( this );
end
if (this.totem.isTrinket) then if (this.totem.isTrinket) then
@@ -1469,7 +1428,6 @@ function COE_Totem:OnTotemButtonClick()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:ButtonStartDrag METHOD: COE_Totem:ButtonStartDrag
@@ -1484,7 +1442,8 @@ function COE_Totem:ButtonStartDrag()
-- Additionally holding the control key while doing so -- Additionally holding the control key while doing so
-- picks up Rank 1. -- picks up Rank 1.
--------------------------------------------------------- ---------------------------------------------------------
elseif( (this.totem ~= COE.NoTotem) and (not this.totem.isTrinket) and IsShiftKeyDown() ) then elseif ((this.totem ~= COE.NoTotem) and (not this.totem.isTrinket) and
IsShiftKeyDown()) then
local rank; local rank;
if (IsControlKeyDown()) then if (IsControlKeyDown()) then
rank = 1; rank = 1;
@@ -1495,14 +1454,14 @@ function COE_Totem:ButtonStartDrag()
local SpellID = this.totem.Ranks[rank].SpellID; local SpellID = this.totem.Ranks[rank].SpellID;
PickupSpell(SpellID, BOOKTYPE_SPELL); PickupSpell(SpellID, BOOKTYPE_SPELL);
elseif( COE_Config:GetSaved( COEOPT_FIXBAR ) == 0 and this == this.ElementFrame.AnchorTotem ) then elseif (COE_Config:GetSaved(COEOPT_FIXBAR) == 0 and this ==
this.ElementFrame.AnchorTotem) then
this:GetParent():StartMoving(); this:GetParent():StartMoving();
this:GetParent().IsMoving = true; this:GetParent().IsMoving = true;
end end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:ButtonStopDrag METHOD: COE_Totem:ButtonStopDrag
@@ -1519,7 +1478,6 @@ function COE_Totem:ButtonStopDrag()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:MakeAnchorTotem METHOD: COE_Totem:MakeAnchorTotem
@@ -1539,13 +1497,15 @@ function COE_Totem:MakeAnchorTotem( button )
-- swap this totem with the anchor totem -- swap this totem with the anchor totem
-- -------------------------------------- -- --------------------------------------
local swap = COE_DisplayedTotems[anchor.SpellName].Order; local swap = COE_DisplayedTotems[anchor.SpellName].Order;
COE_DisplayedTotems[anchor.SpellName].Order = COE_DisplayedTotems[totem.SpellName].Order; COE_DisplayedTotems[anchor.SpellName].Order =
COE_DisplayedTotems[totem.SpellName].Order;
COE_DisplayedTotems[totem.SpellName].Order = swap; COE_DisplayedTotems[totem.SpellName].Order = swap;
elseif (mode == COEMODE_ACTIVESET) then elseif (mode == COEMODE_ACTIVESET) then
-- replace the set totem with this one -- replace the set totem with this one
-- ------------------------------------ -- ------------------------------------
COE.TotemSets[COE_Config:GetSaved( COEOPT_ACTIVESET )][totem.Element] = totem; COE.TotemSets[COE_Config:GetSaved(COEOPT_ACTIVESET)][totem.Element] =
totem;
end end
COE_Totem:Invalidate(button.ElementFrame, true, true, true); COE_Totem:Invalidate(button.ElementFrame, true, true, true);
@@ -1554,7 +1514,6 @@ function COE_Totem:MakeAnchorTotem( button )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:SetTimerText METHOD: COE_Totem:SetTimerText
@@ -1562,21 +1521,19 @@ end
associated totem has an active timer associated totem has an active timer
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE_Totem:SetTimerText() function COE_Totem:SetTimerText()
if( this.totem == COE.NoTotem ) then if (this.totem == COE.NoTotem) then return; end
return;
end;
local timertext = getglobal(this:GetName() .. "Text"); local timertext = getglobal(this:GetName() .. "Text");
local overlaytex = getglobal(this:GetName() .. "OverlayTex"); local overlaytex = getglobal(this:GetName() .. "OverlayTex");
-- show timers only in timerframe and this is a bar button? -- show timers only in timerframe and this is a bar button?
-- --------------------------------------------------------- -- ---------------------------------------------------------
if( COE_Config:GetSaved( COEOPT_FRAMETIMERSONLY ) == 1 and if (COE_Config:GetSaved(COEOPT_FRAMETIMERSONLY) == 1 and this:GetParent() ~=
this:GetParent() ~= COETimerFrame ) then COETimerFrame) then
timertext:Hide(); timertext:Hide();
overlaytex:Hide(); overlaytex:Hide();
return; return;
end; end
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 1) then if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 1) then
if (COE_Totem:IsTimerActive(this.totem)) then if (COE_Totem:IsTimerActive(this.totem)) then
@@ -1654,7 +1611,6 @@ function COE_Totem:SetTimerText()
end end
--[[ ============================================================================================= --[[ =============================================================================================
T I M E R F R A M E T I M E R F R A M E
@@ -1669,15 +1625,12 @@ end
function COE_Totem:InitTimerFrame() function COE_Totem:InitTimerFrame()
-- addon loaded? -- addon loaded?
-- -------------- -- --------------
if( not COE.Initialized ) then if (not COE.Initialized) then return; end
return;
end
this.UpdateTime = 0; this.UpdateTime = 0;
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE_Totem:UpdateTimerFrame METHOD: COE_Totem:UpdateTimerFrame
@@ -1688,15 +1641,12 @@ function COE_Totem:UpdateTimerFrame( elapsed )
-- check if visual update is necessary -- check if visual update is necessary
-- ------------------------------------ -- ------------------------------------
this.UpdateTime = this.UpdateTime + elapsed; this.UpdateTime = this.UpdateTime + elapsed;
if( this.UpdateTime <= COE.UpdateInterval ) then if (this.UpdateTime <= COE.UpdateInterval) then return; end
return;
end
-- set scaling -- set scaling
-- ------------ -- ------------
this:SetScale(COE_Config:GetSaved(COEOPT_SCALING)); this:SetScale(COE_Config:GetSaved(COEOPT_SCALING));
local k; local k;
local lastbutton = nil; local lastbutton = nil;
local count = 0; local count = 0;
@@ -1710,17 +1660,23 @@ function COE_Totem:UpdateTimerFrame( elapsed )
if (lastbutton) then if (lastbutton) then
if (COE_Config:GetSaved(COEOPT_DISPLAYALIGN) == COEMODE_BOX) then if (COE_Config:GetSaved(COEOPT_DISPLAYALIGN) == COEMODE_BOX) then
if (count == 2) then if (count == 2) then
button:SetPoint( "TOPRIGHT", lastbutton:GetName(), "BOTTOMLEFT", -COEUI_BUTTONGAP, -COEUI_BUTTONGAP ); button:SetPoint("TOPRIGHT", lastbutton:GetName(),
"BOTTOMLEFT", -COEUI_BUTTONGAP,
-COEUI_BUTTONGAP);
lastbutton = button; lastbutton = button;
else else
button:SetPoint( "TOPLEFT", lastbutton:GetName(), "TOPRIGHT", COEUI_BUTTONGAP, 0 ); button:SetPoint("TOPLEFT", lastbutton:GetName(),
"TOPRIGHT", COEUI_BUTTONGAP, 0);
lastbutton = button; lastbutton = button;
end end
elseif( COE_Config:GetSaved( COEOPT_DISPLAYALIGN ) == COEMODE_VERTICAL ) then elseif (COE_Config:GetSaved(COEOPT_DISPLAYALIGN) ==
button:SetPoint( "TOPLEFT", lastbutton:GetName(), "BOTTOMLEFT", 0, -COEUI_BUTTONGAP ); COEMODE_VERTICAL) then
button:SetPoint("TOPLEFT", lastbutton:GetName(),
"BOTTOMLEFT", 0, -COEUI_BUTTONGAP);
lastbutton = button; lastbutton = button;
else else
button:SetPoint( "TOPLEFT", lastbutton:GetName(), "TOPRIGHT", COEUI_BUTTONGAP, 0 ); button:SetPoint("TOPLEFT", lastbutton:GetName(), "TOPRIGHT",
COEUI_BUTTONGAP, 0);
lastbutton = button; lastbutton = button;
end end
else else
+15 -5
View File
@@ -96,6 +96,10 @@ end
PURPOSE: Handles frame events PURPOSE: Handles frame events
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:OnEvent(event) function COE:OnEvent(event)
if (COE.EventPrintMode) then
COE:DebugMessage("Event: " .. event);
if (arg1) then COE:DebugMessage("arg1: " .. arg1); end
end
if (event == "VARIABLES_LOADED") then if (event == "VARIABLES_LOADED") then
-- fix saved variables if this update has to do so -- fix saved variables if this update has to do so
@@ -103,14 +107,16 @@ function COE:OnEvent(event)
COE:FixSavedVariables(); COE:FixSavedVariables();
elseif (event == "CHAT_MSG_SPELL_SELF_BUFF") then elseif (event == "CHAT_MSG_SPELL_SELF_BUFF") then
-- resolve Totemic Recall event
if (string.find(arg1, "Mana from Totemic Recall")) then if (string.find(arg1, "Mana from Totemic Recall")) then
COE:DebugMessage("Totemic Recall initiating reset of timers."); COE:DebugMessage("Totemic Recall initiating reset of timers.");
COE_Totem:ResetTimers(); COE_Totem:ResetTimers();
-- Resolve Totem cast event
elseif (string.find(arg1, "Totem")) then
local totem = COE_Totem:GetTotemFromText(arg1);
if (totem) then COE_Totem:ActivateTotem(totem); end
end end
elseif (COE.EventPrintMode) then
COE:DebugMessage(event);
end end
end end
@@ -190,9 +196,12 @@ function COEProcessShellCommand(msg)
if (msg == "" or msg == "config") then if (msg == "" or msg == "config") then
COE:ToggleConfigFrame(); COE:ToggleConfigFrame();
elseif (msg == "list") then elseif (msg == "list" or msg == "help") then
COE:DisplayShellCommands(); COE:DisplayShellCommands();
elseif (msg == "debug") then
COE["DebugMode"] = not COE.DebugMode;
COE:Message(tostring(COE.DebugMode));
elseif (msg == "nextset") then elseif (msg == "nextset") then
COE_Totem:SwitchToNextSet(); COE_Totem:SwitchToNextSet();
@@ -255,6 +264,7 @@ function COE:DisplayShellCommands()
COE:Message(COESHELL_MACRONOTE); COE:Message(COESHELL_MACRONOTE);
COE:Message(COESHELL_THROWSET); COE:Message(COESHELL_THROWSET);
COE:Message(COESHELL_ADVISED); COE:Message(COESHELL_ADVISED);
COE:Message(COESHELL_DEBUG);
end end
+3 -1
View File
@@ -218,7 +218,7 @@ COEMODIFIER_NUMPAD_SHORT = "NP";
-- --------------- -- ---------------
COESHELL_INTRO = "Available shell commands for Call Of Elements:"; COESHELL_INTRO = "Available shell commands for Call Of Elements:";
COESHELL_CONFIG = "'/coe' or '/coe config' - Shows the configuration dialog"; COESHELL_CONFIG = "'/coe' or '/coe config' - Shows the configuration dialog";
COESHELL_LIST = "'/coe list' - Shows this list"; COESHELL_LIST = "'/coe list' or '/coe help' - Shows this list";
COESHELL_NEXTSET = COESHELL_NEXTSET =
"'/coe nexset' - Switches to the next custom totem set or the default set"; "'/coe nexset' - Switches to the next custom totem set or the default set";
COESHELL_PRIORSET = COESHELL_PRIORSET =
@@ -237,3 +237,5 @@ COESHELL_MACRONOTE =
"The following commands only work as macros dragged to your action bars:"; "The following commands only work as macros dragged to your action bars:";
COESHELL_THROWSET = "'/coe throwset' - Throws the active totem set"; COESHELL_THROWSET = "'/coe throwset' - Throws the active totem set";
COESHELL_ADVISED = "'/coe advised' - Throws the next advised totem"; COESHELL_ADVISED = "'/coe advised' - Throws the next advised totem";
COESHELL_DEBUG =
"'/coe debug' - Toggles debug message printing (disable by default)";