Skip to content

Commit

Permalink
- Complete Rewrite of config submodule system to make it more reliable
Browse files Browse the repository at this point in the history
  • Loading branch information
DerpleMQ2 committed Feb 25, 2024
1 parent 5c70527 commit 897311e
Show file tree
Hide file tree
Showing 12 changed files with 145 additions and 54 deletions.
2 changes: 1 addition & 1 deletion extras/version.lua
Original file line number Diff line number Diff line change
@@ -1 +1 @@
return { commitId = '18c91cf 2024-02-25' }
return { commitId = '5c70527 2024-02-25' }
13 changes: 9 additions & 4 deletions init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,15 @@ local function RGMercsGUI()
end
end

for n, s in pairs(RGMercConfig.SubModuleSettings) do
local submoduleSettings = RGMercModules:ExecAll("GetSettings")
local submoduleDefaults = RGMercModules:ExecAll("GetDefaultSettings")
local submoduleCategories = RGMercModules:ExecAll("GetSettingCategories")
for n, s in pairs(submoduleSettings) do
if RGMercModules:ExecModule(n, "ShouldRender") then
ImGui.PushID(n .. "_config_hdr")
if s and s.settings and s.defaults and s.categories then
if s and submoduleDefaults[n] and submoduleCategories[n] then
if ImGui.CollapsingHeader(string.format("%s: Config Options", n), bit32.bor(ImGuiTreeNodeFlags.DefaultOpen, ImGuiTreeNodeFlags.Leaf)) then
s.settings, pressed, _ = RGMercUtils.RenderSettings(s.settings, s.defaults, s.categories, true)
s, pressed, _ = RGMercUtils.RenderSettings(s, submoduleDefaults[n], submoduleCategories[n], true)
if pressed then
RGMercModules:ExecModule(n, "SaveSettings", true)
end
Expand Down Expand Up @@ -273,7 +276,9 @@ local function RGInit(...)
unloadedPlugins = RGMercUtils.UnCheckPlugins({ "MQ2Melee", })

-- complex objects are passed by reference so we can just use these without having to pass them back in for saving.
RGMercConfig:SetSubModules(RGMercModules:ExecAll("Init"))
RGMercModules:ExecAll("Init")
RGMercConfig.Globals.SubmodulesLoaded = true
RGMercConfig:UpdateCommandHandlers()

if not RGMercUtils.GetSetting('DoTwist') then
local unloaded = RGMercUtils.UnCheckPlugins({ "MQ2Twist", })
Expand Down
12 changes: 12 additions & 0 deletions modules/basic.lua
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@ function Module:LoadSettings()
self.settings = RGMercUtils.ResolveDefaults(self.DefaultConfig, self.settings)
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module.New()
local newModule = setmetatable({ settings = {}, }, Module)
return newModule
Expand Down
12 changes: 12 additions & 0 deletions modules/class.lua
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,18 @@ function Module:LoadSettings()
self:RescanLoadout()
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.ClassConfig.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module.New()
local newModule = setmetatable({ settings = {}, }, Module)
return newModule
Expand Down
15 changes: 14 additions & 1 deletion modules/contributors.lua
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
-- Sample Basic Class Module
local mq = require('mq')
local RGMercUtils = require("utils.rgmercs_utils")
local Set = require("mq.Set")

local Module = { _version = '0.1a', _name = "Contributors", _author = 'Derple', }
Module.__index = Module
Module.settings = {}
Module.DefaultConfig = {}
Module.DefaultCategories = {}
Module.DefaultCategories = Set.new({})
Module.Contributors = require("extras.contributors")
Module.ColorWheel = {}
Module.ColorWheelTimer = {}
Expand All @@ -21,6 +22,18 @@ function Module:LoadSettings()
self.settings = RGMercUtils.ResolveDefaults(self.DefaultConfig, self.settings)
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module.New()
local newModule = setmetatable({ settings = {}, }, Module)
return newModule
Expand Down
13 changes: 12 additions & 1 deletion modules/mez.lua
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,18 @@ function Module:LoadSettings()
self.settings = RGMercUtils.ResolveDefaults(self.DefaultConfig, self.settings)
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module.New()
local newModule = setmetatable({ settings = {}, }, Module)
return newModule
Expand Down Expand Up @@ -169,7 +181,6 @@ function Module:HandleMezBroke(mobName, breakerName)
end

function Module:AddImmuneTarget(mobId, mobData)
print(mobId)
if self.TempSettings.MezImmune[mobId] ~= nil then return end

self.TempSettings.MezImmune[mobId] = mobData
Expand Down
12 changes: 12 additions & 0 deletions modules/movement.lua
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,18 @@ function Module:LoadSettings()
self.settings = RGMercUtils.ResolveDefaults(self.DefaultConfig, self.settings)
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module.New()
local newModule = setmetatable({ settings = {}, }, Module)
return newModule
Expand Down
12 changes: 12 additions & 0 deletions modules/performance.lua
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,18 @@ function Module:LoadSettings()
self.SettingsLoaded = true
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module.New()
local newModule = setmetatable({ settings = {}, }, Module)
return newModule
Expand Down
31 changes: 21 additions & 10 deletions modules/pull.lua
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,18 @@ function Module:LoadSettings()
self.settings = RGMercUtils.ResolveDefaults(self.DefaultConfig, self.settings)
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

---@param id number
---@return string
function Module:getPullAbilityDisplayName(id)
Expand Down Expand Up @@ -754,17 +766,16 @@ function Module:CheckGroupForPull(classes, resourceStartPct, resourceStopPct, ca
return false, string.format("%s Out of Zone", member.CleanName())
end

--if (member.Distance() or 0) > math.max(RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius, 80) then
if returnToCamp then
if RGMercUtils.GetDistance(member.X(), member.Y(), campData.AutoCampX, campData.AutoCampY) > math.max(RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius, 50) then
if RGMercUtils.GetDistance(member.X(), member.Y(), campData.AutoCampX, campData.AutoCampY) > math.max(RGMercUtils.GetSetting('AutoCampRadius'), 50) then
RGMercUtils.PrintGroupMessage("%s is too far away - Holding pulls!", member.CleanName())
return false,
string.format("%s Too Far (%d) (%d,%d) (%d,%d)", member.CleanName(),
RGMercUtils.GetDistance(member.X(), member.Y(), campData.AutoCampX, campData.AutoCampY), member.X(), member.Y(), campData.AutoCampX,
campData.AutoCampY)
end
else
if (member.Distance() or 0) > math.max(RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius, 80) then
if (member.Distance() or 0) > math.max(RGMercUtils.GetSetting('AutoCampRadius'), 80) then
RGMercUtils.PrintGroupMessage("%s is too far away - Holding pulls!", member.CleanName())
return false,
string.format("%s Too Far (%d) (%d,%d) (%d,%d)", member.CleanName(),
Expand All @@ -775,15 +786,15 @@ function Module:CheckGroupForPull(classes, resourceStartPct, resourceStopPct, ca

if self.Constants.PullModes[self.settings.PullMode] == "Chain" then
if member.ID() == RGMercUtils.GetMainAssistId() then
if returnToCamp and RGMercUtils.GetDistance(member.X(), member.Y(), campData.AutoCampX, campData.AutoCampY) > RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius then
if returnToCamp and RGMercUtils.GetDistance(member.X(), member.Y(), campData.AutoCampX, campData.AutoCampY) > RGMercUtils.GetSetting('AutoCampRadius') then
RGMercUtils.PrintGroupMessage("%s (assist target) is beyond AutoCampRadius from %d, %d, %d : %d. Holding pulls.", member.CleanName(), campData.AutoCampY,
campData.AutoCampX, campData.AutoCampZ, RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius)
campData.AutoCampX, campData.AutoCampZ, RGMercUtils.GetSetting('AutoCampRadius'))
return false, string.format("%s Beyond AutoCampRadius", member.CleanName())
end
else
if RGMercUtils.GetDistance(member.X(), member.Y(), mq.TLO.Me.X(), mq.TLO.Me.Y()) > RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius then
if RGMercUtils.GetDistance(member.X(), member.Y(), mq.TLO.Me.X(), mq.TLO.Me.Y()) > RGMercUtils.GetSetting('AutoCampRadius') then
RGMercUtils.PrintGroupMessage("%s (assist target) is beyond AutoCampRadius from me : %d. Holding pulls.", member.CleanName(),
RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius)
RGMercUtils.GetSetting('AutoCampRadius'))
return false, string.format("%s Beyond AutoCampRadius", member.CleanName())
end
end
Expand All @@ -807,9 +818,9 @@ function Module:FixPullerMerc()
local merc = mq.TLO.Group.Member(i)

if merc and merc() and merc.Type() == "Mercenary" and merc.Owner.DisplayName() == mq.TLO.Group.Puller() then
if (merc.Distance() or 0) > RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius and (merc.Owner.Distance() or 0) < RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius then
if (merc.Distance() or 0) > RGMercUtils.GetSetting('AutoCampRadius') and (merc.Owner.Distance() or 0) < RGMercUtils.GetSetting('AutoCampRadius') then
RGMercUtils.DoCmd("/grouproles unset %s 3", mq.TLO.Me.DisplayName())
mq.delay("10s", function() return (merc.Distance() or 0) < RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius end)
mq.delay("10s", function() return (merc.Distance() or 0) < RGMercUtils.GetSetting('AutoCampRadius') end)
RGMercUtils.DoCmd("/grouproles set %s 3", mq.TLO.Me.DisplayName())
end
end
Expand Down Expand Up @@ -1438,7 +1449,7 @@ function Module:GiveTime(combat_state)
-- give the mob 2 mins to get to us.
local maxPullWait = 1000 * 120 -- 2 mins
-- wait for the mob to reach us.
while mq.TLO.Target.ID() == self.TempSettings.PullID and RGMercUtils.GetTargetDistance() > RGMercConfig.SubModuleSettings.Movement.settings.AutoCampRadius and maxPullWait > 0 do
while mq.TLO.Target.ID() == self.TempSettings.PullID and RGMercUtils.GetTargetDistance() > RGMercUtils.GetSetting('AutoCampRadius') and maxPullWait > 0 do
self:SetPullState(PullStates.PULL_WAITING_ON_MOB, self:GetPullStateTargetInfo())
mq.delay(100)
if mq.TLO.Me.Pet.Combat() then
Expand Down
12 changes: 12 additions & 0 deletions modules/travel.lua
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,18 @@ function Module:LoadSettings()
end
end

function Module:GetSettings()
return self.settings
end

function Module:GetDefaultSettings()
return self.DefaultConfig
end

function Module:GetSettingCategories()
return self.DefaultCategories
end

function Module:TravelerUpdate(newData)
if newData then
RGMercsLogger.log_debug("\agGot new Traveler update from: \am%s", newData.Name)
Expand Down
37 changes: 13 additions & 24 deletions utils/rgmercs_config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ Config.Constants.ConColors = {
Config.Constants.ConColorsNameToId = {}
for i, v in ipairs(Config.Constants.ConColors) do Config.Constants.ConColorsNameToId[v:upper()] = i end

Config.SubModuleSettings = {}

-- Defaults
Config.DefaultConfig = {
-- [ UTILITIES ] --
Expand Down Expand Up @@ -276,33 +274,29 @@ function Config:LoadSettings()
self:SaveSettings(false)
end

self:UpdateCommandHandlers()

return true
end

function Config:UpdateCommandHandlers()
self.CommandHandlers = {}

local allConfigs = {
["Core"] = { settings = self.settings, defaults = Config.DefaultConfig, },
}
local submoduleSettings = RGMercModules:ExecAll("GetSettings")
local submoduleDefaults = RGMercModules:ExecAll("GetDefaultSettings")

for name, data in pairs(RGMercConfig.SubModuleSettings) do
allConfigs[name] = { settings = data.settings, defaults = data.defaults, }
end
submoduleSettings["Core"] = self.settings
submoduleDefaults["Core"] = Config.DefaultConfig

for moduleName, moduleData in pairs(allConfigs) do
for config, configData in pairs(moduleData.defaults or {}) do
local handled, usageString = self:GetUsageText(config, true, moduleData.defaults)
for moduleName, moduleSettings in pairs(submoduleSettings) do
for setting, _ in pairs(moduleSettings or {}) do
local handled, usageString = self:GetUsageText(setting, true, submoduleDefaults[moduleName])

if handled then
self.CommandHandlers[config:lower()] = {
name = config,
self.CommandHandlers[setting:lower()] = {
name = setting,
usage = usageString,
subModule = moduleName,
category = configData.Category,
about = configData.Tooltip,
category = submoduleDefaults[moduleName][setting].Category,
about = submoduleDefaults[moduleName][setting].Tooltip,
}
end
end
Expand Down Expand Up @@ -348,12 +342,6 @@ function Config:GetUsageText(config, showUsageText, defaults)
return handledType, usageString
end

function Config:SetSubModules(subModules)
self.SubModuleSettings = subModules
self:UpdateCommandHandlers()
self.Globals.SubmodulesLoaded = true
end

function Config:GetSettings()
return self.settings
end
Expand All @@ -380,7 +368,8 @@ function Config:HandleBind(config, value)
self:UpdateCommandHandlers()

local allModules = {}
for name, _ in pairs(RGMercConfig.SubModuleSettings) do
local submoduleSettings = RGMercModules:ExecAll("GetSettings")
for name, _ in pairs(submoduleSettings) do
table.insert(allModules, name)
end
table.sort(allModules)
Expand Down

0 comments on commit 897311e

Please sign in to comment.