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.
87 lines
2.8 KiB
87 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
|
|
|
|
WIM.lastState = WIM.curState; -- we want to remember our last state.
|
|
|
|
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();
|
|
evaluateState();
|
|
end
|
|
|
|
function WIM:PLAYER_ENTERING_WORLD(...)
|
|
-- check if player is in arena, bg, party or raid.
|
|
evaluateState();
|
|
end
|
|
|
|
|