local Logger = require("classes.util.Logger") 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 --[[@as DebugMenu]] 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