You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.8 KiB

-- File: StateHandler.lua
-- Author: John Langone (Pazza - Bronzebeard)
-- Description: Always maintain the current state of the player. The term 'state'
-- in this case refers to whether or not the player is, in the battleground(pvp),
-- arena, 5 man instance, raid instance, combat, resting etc. States are utilize
-- by WIM to allow for 'state' based option sets. Plugin authors may retrieve the
-- current state by accessing WIM.curState
local WIM = WIM;
-- we want to know the current state since last login.
-- this information is loaded when WIM is initialized. Check WIM.lua
WIM.db_defaults.lastState = "other";
WIM.curState = "other";
-- available states include: resting, combat, pvp, arena, raid, party, other
-- state flags
local flag_combat = false;
local flag_resting = IsResting();
-- register events directly with main frame in order to preserve correct state when WIM is disabled.
local workerFrame = getglobal("WIM_workerFrame");
-- combat detection
workerFrame:RegisterEvent("PLAYER_REGEN_DISABLED");
workerFrame:RegisterEvent("PLAYER_REGEN_ENABLED");
workerFrame:RegisterEvent("PLAYER_UPDATE_RESTING");
workerFrame:RegisterEvent("PLAYER_ENTERING_WORLD");
-- this function will analyze current flags and set WIM.curState appropriately.
local function evaluateState()
if(select(2, IsInInstance()) == "arena") then
WIM.curState = "arena";
elseif(flag_combat) then
WIM.curState = "combat";
elseif(select(2, IsInInstance()) == "pvp") then
-- inside battleground
WIM.curState = "pvp";
elseif(select(2, IsInInstance()) == "raid") then
-- inside raid isntance
WIM.curState = "raid";
elseif(select(2, IsInInstance()) == "party") then
-- inside 5 man instance
WIM.curState = "party";
elseif(flag_resting) then
WIM.curState = "resting";
else
WIM.curState = "other";
end
4 years ago
WIM.lastState = WIM.curState; -- we want to remember our last state.
4 years ago
WIM.CallModuleFunction("OnStateChange", WIM.curState, flag_combat);
WIM.dPrint("Evaluated State: "..WIM.curState);
end
------------------------------------------
-- Event Triggers --
------------------------------------------
function WIM:PLAYER_REGEN_ENABLED(...)
-- player no longer in combat
flag_combat = false;
evaluateState();
end
function WIM:PLAYER_REGEN_DISABLED(...)
-- player in combat
flag_combat = true;
evaluateState();
end
function WIM:PLAYER_UPDATE_RESTING(...)
-- player has either entered or left resting state
flag_resting = IsResting();
4 years ago
evaluateState();
end
function WIM:PLAYER_ENTERING_WORLD(...)
-- check if player is in arena, bg, party or raid.
evaluateState();
end