From c10c743fe8a50fdc87d928bcec3ecaa171025af2 Mon Sep 17 00:00:00 2001 From: dutchie031 Date: Sun, 30 Aug 2026 14:13:05 +0200 Subject: [PATCH] wip --- .../configuration/PersistenceConfig.lua | 31 +++++++ src/classes/debug/DebugMenu.lua | 80 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 src/classes/configuration/PersistenceConfig.lua create mode 100644 src/classes/debug/DebugMenu.lua diff --git a/src/classes/configuration/PersistenceConfig.lua b/src/classes/configuration/PersistenceConfig.lua new file mode 100644 index 0000000..67c722d --- /dev/null +++ b/src/classes/configuration/PersistenceConfig.lua @@ -0,0 +1,31 @@ + +---@class PersistenceConfig +---@field private _enabled boolean +---@field private directory string? +---@field private fileName string? +local PersistenceConfig = {} + +function PersistenceConfig.new() + local self = setmetatable({}, { __index = PersistenceConfig }) + + if not SpearheadConfig then SpearheadConfig = {} end + if not SpearheadConfig.Persistence then SpearheadConfig.Persistence = {} end + self._enabled = SpearheadConfig.Persistence.enabled == true + self.directory = SpearheadConfig.Persistence.directory + self.fileName = SpearheadConfig.Persistence.fileName + return self +end + +function PersistenceConfig:isEnabled() + return self._enabled == true +end + +function PersistenceConfig:getDirectory() + return self.directory +end + +function PersistenceConfig:getFileName() + return self.fileName +end + +return PersistenceConfig \ No newline at end of file diff --git a/src/classes/debug/DebugMenu.lua b/src/classes/debug/DebugMenu.lua new file mode 100644 index 0000000..564679d --- /dev/null +++ b/src/classes/debug/DebugMenu.lua @@ -0,0 +1,80 @@ +local Logger = require("classes.util.Logger") +local Util = require("classes.util.Util") +local StageRepository = require("classes.stageClasses.StageRepository") + +---@class DebugMenu +---@field private _logger Logger +---@field private _stageRepository StageRepository +local DebugMenu = {} +DebugMenu.__index = DebugMenu + +function DebugMenu.new() + local self = setmetatable({}, DebugMenu) + self._logger = Logger.new("DebugMenu") + self._stageRepository = StageRepository.getInstance() + return self +end + +local menuName = "Spearhead Debug" +local debugMenuPath = { [1] = menuName } +function DebugMenu:RegisterMenus() + + missionCommands.addSubMenu(menuName, {}) + + local refresh = function(params) + local selfA = params.self + selfA:RefreshMenu() + end + missionCommands.addCommand("Refresh Menu", debugMenuPath, refresh, { self = self }) + + self:AddStageOptions() + +end + +function DebugMenu:RefreshMenu() + + missionCommands.removeItem(debugMenuPath) + self:RegisterMenus() +end + +function DebugMenu:AddStageOptions() + local stageMenuTable = missionCommands.addSubMenu("Stages", debugMenuPath) + + local stageLanes = self._stageRepository:getAllStageLanes() + for _, stageLane in pairs(stageLanes) do + + local stages = stageLane:GetStagesAtIndex(stageLane:GetActiveStageIndex()) + if stages then + for _, stage in pairs(stages) do + local stageLaneId = stageLane:GetStageLaneIdentifier() or "" + local stageIndex = stage:GetStageIndex() + local stageName = stage:GetStageName() + + local stageMenuName = stageLaneId .. stageIndex .. "_" .. stageName + local currentStageMenuTable = missionCommands.addSubMenu(stageMenuName, stageMenuTable) + + ---@class CompleteStageParams + ---@field self DebugMenu + ---@field stage Stage + + ---@param params CompleteStageParams + local completeStage = function(params) + local stageA = params.stage + local missions = stageA:GetMissions() + for _, mission in pairs(missions) do + mission:ForceMissionComplete() + end + end + + ---@type CompleteStageParams + local params = { self = self, stage = stage } + missionCommands.addCommand("Complete Stage", currentStageMenuTable, completeStage, params) + + end + else + self._logger:info("No stages found for lane: " .. (stageLane:GetStageLaneIdentifier() or "default") .. " at index: " .. (stageLane:GetActiveStageIndex() or "nil")) + end + end +end + +return DebugMenu \ No newline at end of file