Files
OmicronFrames/src/main.lua
2023-03-15 17:13:01 +01:00

88 lines
2.8 KiB
Lua

-- Copyright 2023 <omicron.me@protonmail.com>
--
-- This file is part of Omicron Frames
--
-- Omicron Frames is free software: you can redistribute it and/or modify it
-- under the terms of the GNU General Public License as published by the Free
-- Software Foundation, either version 3 of the License, or (at your option)
-- any later version.
--
-- Omicron Frames is distributed in the hope that it will be useful, but
-- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-- more details.
--
-- You should have received a copy of the GNU General Public License along with
-- Omicron Frames. If not, see <https://www.gnu.org/licenses/>.
local AddonName, omif = ...
omif.events = {} -- event (str) to list of handlers
omif.db = nil
omif.modules = {}
-- Simple function that creates or returns a local module table
function omif.GetModule(name)
if omif.modules[name] == nil then
omif.modules[name] = {}
end
return omif.modules[name]
end
-- Adds a given function to the event handler list for a given event
-- This will later in the addon
function omif.SetEventHandler(event, fn)
if omif.events[event] == nil then
omif.events[event] = {}
end
table.insert(omif.events[event], fn)
end
-- The main handler receives basically every single event we want to listen to
-- and dispatches them to more appropriate handlers
function omif.MainEventHandler(frame, event, ...)
local handlers = omif.events[event]
if handlers ~= nil and next(handlers) ~= nil then
for i, handler in ipairs(handlers) do
handler(...)
end
end
end
-- Create the event frame and register all desired events
function omif.SetupEvents()
local frame = CreateFrame("Frame")
for name, _ in pairs(omif.events) do
if string.sub(name, 1, string.len("OMICRON")) ~= "OMICRON" then
frame:RegisterEvent(name)
end
end
frame:SetScript("OnEvent", omif.MainEventHandler)
end
function omif.OnAddonLoaded(name)
if name ~= AddonName then
return
end
omif.MainEventHandler(nil, "OMICRON_LOADING")
print("Loaded", AddonName)
end
omif.SetEventHandler("ADDON_LOADED", omif.OnAddonLoaded)
-- Fire custom event OMICRON_FULLY_LOADED. This event is fired when the player
-- enters the world for the first time after logging in or reloading UI.
function omif.FireFullyLoadedEvent(initialLogin, reloadUI)
if initialLogin or reloadUI then
omif.MainEventHandler(nil, "OMICRON_FULLY_LOADED")
end
end
omif.SetEventHandler("PLAYER_ENTERING_WORLD", omif.FireFullyLoadedEvent)
function omif.SlashCommand(args)
omif.cli.ToggleShow()
end
function omif.SetupSlashCommands()
_G["SLASH_OMICRON1"] = "/omicronframes"
_G["SLASH_OMICRON2"] = "/omi"
SlashCmdList["OMICRON"] = omif.SlashCommand
end