updated briefings to be shown during spawn (#31)
Publish Release / build (push) Successful in 22s

fixes #26

Reviewed-on: #31
Co-authored-by: dutchie031 <timrorije@gmail.com>
This commit was merged in pull request #31.
This commit is contained in:
2026-08-20 14:06:42 +00:00
committed by dutchie031
parent 970f049440
commit 7c0c5e4a85
11 changed files with 210 additions and 146 deletions
+4
View File
@@ -5,6 +5,10 @@
### New Features
- Issue #26
Possibility to have Stage Overview briefings (which include current missions sorted by distance) to be shown on spawning of a player.
PR #31
### Bug Fixes
- Issue #11
+20 -14
View File
@@ -7,14 +7,16 @@
--- @field startingStage integer
--- @field maxMissionsPerStage integer
--- @field AmountPreactivateStage integer
--- @field briefingOnSpawnEnabled boolean
local StageConfig = {};
StageConfig.__index = StageConfig
local Logger = require("classes.util.Logger")
local _logger = Logger.new("StageConfig", Logger.LogLevel)
---comment
---@return StageConfig
function StageConfig:new()
local function new()
if SpearheadConfig == nil then
_logger:warn("SpearheadConfig is nil, creating default SpearheadConfig")
@@ -26,22 +28,26 @@ function StageConfig:new()
SpearheadConfig.StageConfig = {}
end
---@type StageConfig
local o = {
isEnabled = SpearheadConfig.StageConfig.enabled ~= false,
isDrawStagesEnabled = SpearheadConfig.StageConfig.drawStages ~= false,
isAutoStages = SpearheadConfig.StageConfig.autoStages ~= false,
startingStage = SpearheadConfig.StageConfig.startingStage or 1,
maxMissionsPerStage = SpearheadConfig.StageConfig.maxMissionStage or 10,
isDrawPreActivatedEnabled = SpearheadConfig.StageConfig.drawPreActivated ~= false,
AmountPreactivateStage = SpearheadConfig.StageConfig.preactivateStage or 1,
}
setmetatable(o, { __index = self })
local self = setmetatable({}, StageConfig)
self.isEnabled = SpearheadConfig.StageConfig.enabled ~= false
self.isDrawStagesEnabled = SpearheadConfig.StageConfig.drawStages ~= false
self.isAutoStages = SpearheadConfig.StageConfig.autoStages ~= false
self.startingStage = SpearheadConfig.StageConfig.startingStage or 1
self.maxMissionsPerStage = SpearheadConfig.StageConfig.maxMissionStage or 10
self.isDrawPreActivatedEnabled = SpearheadConfig.StageConfig.drawPreActivated ~= false
self.AmountPreactivateStage = SpearheadConfig.StageConfig.preactivateStage or 1
self.briefingOnSpawnEnabled = SpearheadConfig.StageConfig.briefingOnSpawn ~= false
_logger:info("Successfully created StageConfig Object")
return o;
return self;
end
local config = new();
---@return StageConfig
function StageConfig:getInstance()
return config
end
return StageConfig
+23
View File
@@ -50,6 +50,19 @@ do
table.insert(OnStageNumberChangedHandlers, handler)
end
---@class OnStageNumberChangeCompleteListener
---@field OnStageNumberChangeComplete fun(self:OnStageNumberChangeCompleteListener, number:integer)
local OnStageNumberChangeCompleteListeners = {}
---@param listener OnStageNumberChangeCompleteListener
SpearheadEvents.AddStageNumberChangeCompleteListener = function(listener)
if type(listener) ~= "table" or type(listener.OnStageNumberChangeComplete) ~= "function" then
warn("Event handler not of type table/object with function OnStageNumberChangeComplete(self, number)")
return
end
table.insert(OnStageNumberChangeCompleteListeners, listener)
end
---@param newStageNumber number
SpearheadEvents.PublishStageNumberChanged = function(newStageNumber)
pcall(function ()
@@ -71,6 +84,16 @@ do
logError(err)
end
end
for _, callable in pairs(OnStageNumberChangeCompleteListeners) do
local succ, err = pcall(function()
callable:OnStageNumberChangeComplete(newStageNumber)
end)
if err then
logError(err)
end
end
Logger.new("Events", "INFO"):info("Published stage number changed to: " .. tostring(newStageNumber))
end
end
@@ -1,11 +1,13 @@
local Events = require("classes.spearhead_events")
local Util = require("classes.util.Util")
local DcsUtil = require("classes.util.DcsUtil")
local Logger = require("classes.util.Logger")
local MissionEditorWarnings = require("classes.util.MissionEditorWarnings")
local ExtraStage = require("classes.stageClasses.Stages.ExtraStage")
local PrimaryStage = require("classes.stageClasses.Stages.PrimaryStage")
local WaitingStage = require("classes.stageClasses.Stages.WaitingStage")
local MissionCommandsHelper = require("classes.stageClasses.helpers.MissionCommandsHelper")
local StagesByName = {}
@@ -20,10 +22,11 @@ local WaitingStagesByIndex = {}
local currentStage = -99
---@class GlobalStageManager : StageCompleteListener, OnStageChangedListener
---@class GlobalStageManager : StageCompleteListener, OnStageChangedListener, OnStageNumberChangeCompleteListener
---@field private database Database
---@field private logger Logger
---@field private stageConfig StageConfig
---@field private _missionCommandsHelper MissionCommandsHelper
local GlobalStageManager = {}
GlobalStageManager.__index = GlobalStageManager
@@ -41,6 +44,7 @@ function GlobalStageManager.NewAndStart(database, stageConfig, logLevel, spawnMa
local self = setmetatable({}, GlobalStageManager)
self.database = database
self.stageConfig = stageConfig
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate()
self.logger = logger
if stageConfig.isAutoStages ~= true then
@@ -214,6 +218,23 @@ function GlobalStageManager:OnStageNumberChanged(stageNumber)
self:UpdateDrawings(stageNumber)
end
function GlobalStageManager:OnStageNumberChangeComplete(stageNumber)
self.logger:debug("Stage number change complete to: " .. tostring(stageNumber))
local groups = {}
for _, player in pairs(DcsUtil.getAllPlayerUnits()) do
local group = player:getGroup()
if group then
groups[group:getID()] = group
end
end
for _, group in pairs(groups) do
self._missionCommandsHelper:OverviewToGroup(group:getID())
end
end
---@private
function GlobalStageManager:UpdateDrawings(stageNumber)
self.logger:debug("Updating custom drawings for stage number: " .. tostring(stageNumber))
@@ -43,9 +43,9 @@ function SupplyHub.new(database, logger, zoneName)
self._zone = DcsUtil.getZoneByName(zoneName)
self._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate(logger.LogLevel)
self._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate()
self._inZone = {}
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate(logger.LogLevel)
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate()
self._logger:debug("Creating Supply Hub zone: " .. self._zoneName)
@@ -117,7 +117,7 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
self._activeStage = -99
self._stageConfig = stageConfig or {}
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate(logger.LogLevel)
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate()
local zone = DcsUtil.getZoneByName(self.zoneName)
if zone then
@@ -4,6 +4,7 @@ local Logger = require("classes.util.Logger")
local SpearheadEvents = require("classes.spearhead_events")
local SupplyUnitsTracker = require("classes.stageClasses.helpers.SupplyUnitsTracker")
local SupplyConfigHelper = require("classes.stageClasses.helpers.SupplyConfigHelper")
local StageConfig = require("classes.configuration.StageConfig")
---@class MissionCommandsHelper
@@ -16,6 +17,7 @@ local SupplyConfigHelper = require("classes.stageClasses.helpers.SupplyConfigHel
---@field private _stageBriefings table<string, string> @table of stage briefings by stage name
---@field private _logger Logger @logger instance for logging
---@field private _supplyUnitsTracker SupplyUnitsTracker @supply units tracker instance
---@field private _stageConfig StageConfig
local MissionCommandsHelper = {}
MissionCommandsHelper.__index = MissionCommandsHelper
@@ -23,8 +25,8 @@ MissionCommandsHelper.__index = MissionCommandsHelper
---@param groupPos Vec2
local function sortMissions(list, groupPos)
table.sort(list, function(a, b)
local distA = Util.VectorDistance2d(groupPos, a.location or {x=0, y=0})
local distB = Util.VectorDistance2d(groupPos, b.location or {x=0, y=0})
local distA = Util.VectorDistance2d(groupPos, a.location or { x = 0, y = 0 })
local distB = Util.VectorDistance2d(groupPos, b.location or { x = 0, y = 0 })
return distA < distB;
end)
end
@@ -34,12 +36,11 @@ local id = 0
local instance = nil
---@return MissionCommandsHelper
---@param logLevel string @log level for the logger
function MissionCommandsHelper.getOrCreate(logLevel)
function MissionCommandsHelper.getOrCreate()
if instance == nil then
instance = setmetatable({}, MissionCommandsHelper)
instance._logger = Logger.new("MissionCommandsHelper", logLevel)
instance._logger = Logger.new("MissionCommandsHelper")
instance._logger:info("Creating MissionCommandsHelper instance")
@@ -50,7 +51,9 @@ function MissionCommandsHelper.getOrCreate(logLevel)
instance.lastUpdate = 0
instance._stageBriefings = {}
instance._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate(logLevel)
instance._stageConfig = StageConfig:getInstance()
instance._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate()
instance._supplyUnitsTracker:AddOnSupplyUnitEventListener(
{
@@ -95,7 +98,6 @@ function MissionCommandsHelper.getOrCreate(logLevel)
timer.scheduleFunction(instance.updateContinuous, instance, timer.getTime() + 5)
SpearheadEvents.AddOnPlayerEnterUnitListener(instance)
end
return instance
@@ -124,12 +126,16 @@ function MissionCommandsHelper:RemoveMissionToCommands(mission)
self.updateNeeded = true
end
---@param unit Unit
function MissionCommandsHelper:OnPlayerEntersUnit(unit)
if unit then
local group = unit:getGroup()
if group then self:updateCommandsForGroup(group:getID()) end
if group then
self:updateCommandsForGroup(group:getID())
if self._stageConfig.briefingOnSpawnEnabled == true then
self:OverviewToGroup(group:getID())
end
end
end
end
@@ -164,111 +170,116 @@ local pinMissionCommand = function(args)
end
end
---@param groupID integer
function MissionCommandsHelper:OverviewToGroup(groupID)
local text = "Missions Overview\n\n"
local group = DcsUtil.GetPlayerGroupByGroupID(groupID)
---@type Vec2
local groupPos = { x = 0, y = 0 }
if group then
local pos = group:getUnit(1):getPosition().p
groupPos = { x = pos.x, y = pos.z }
end
---@param mission Mission
---@return string
local function formatLine(mission)
local distanceText = "?"
if group then
local lead = group:getUnit(1)
if lead and lead:isExist() == true then
local pos = lead:getPoint()
local Vec2Pos = { x = pos.x, y = pos.z }
local distance = Util.VectorDistance2d(Vec2Pos, mission.location) / 1852
distanceText = string.format("~%d", math.floor(distance))
end
end
return string.format("[%s]\t%s \t%s \t%s %% \t%s nM\n", mission.code, mission.missionTypeDisplay, mission.name,
mission:PercentageComplete(), distanceText)
end
for _, briefing in pairs(self._stageBriefings) do
text = text .. briefing .. "\n\n"
end
---Primary missions
text = text .. "Primary Missions\n"
---@type Array<Mission>
local primaryMissions = {}
for code, enabled in pairs(self.enabledByCode) do
if enabled == true then
local mission = self.missionsByCode[code]
if mission and mission:getState() == "ACTIVE" and mission.priority == "primary" then
table.insert(primaryMissions, mission)
end
end
end
sortMissions(primaryMissions, groupPos)
for _, mission in pairs(primaryMissions) do
text = text .. formatLine(mission)
end
---Secondary missions
text = text .. "\nSecondary Missions\n"
---@type Array<Mission>
local secondaryMissions = {}
for code, enabled in pairs(self.enabledByCode) do
if enabled == true then
local mission = self.missionsByCode[code]
if mission and mission:getState() == "ACTIVE" and mission.priority == "secondary" then
table.insert(secondaryMissions, mission)
end
end
end
sortMissions(secondaryMissions, groupPos)
for _, mission in pairs(secondaryMissions) do
text = text .. formatLine(mission)
end
trigger.action.outTextForGroup(groupID, text, 20, true)
end
---@private
function MissionCommandsHelper:AddOverviewCommand(groupID)
local MissionsOverviewToGroup = function (id)
local text = "Missions Overview\n\n"
---@class OverviewToGroupCommandArgs
---@field self MissionCommandsHelper @the MissionCommandsHelper instance
---@field groupId integer @the group ID of the player requesting the overview
local group = DcsUtil.GetPlayerGroupByGroupID(id)
---@type Vec2
local groupPos = { x=0, y=0 }
if group then
local pos = group:getUnit(1):getPosition().p
groupPos = { x= pos.x, y=pos.z }
end
---comment
---@param mission Mission
---@return string
local function formatLine(mission)
local distanceText = "?"
if group then
local lead = group:getUnit(1)
if lead and lead:isExist() == true then
local pos = lead:getPoint()
local Vec2Pos = { x= pos.x, y=pos.z }
local distance = Util.VectorDistance2d(Vec2Pos, mission.location) / 1852
distanceText = string.format("~%d", math.floor(distance))
end
end
return string.format("[%s]\t%s \t%s \t%s %% \t%s nM\n", mission.code, mission.missionTypeDisplay, mission.name, mission:PercentageComplete(), distanceText)
end
for _, briefing in pairs(self._stageBriefings) do
text = text .. briefing .. "\n\n"
end
---Primary missions
text = text .. "Primary Missions\n"
---@type Array<Mission>
local primaryMissions = {}
for code, enabled in pairs(self.enabledByCode) do
if enabled == true then
local mission = self.missionsByCode[code]
if mission and mission:getState() == "ACTIVE" and mission.priority == "primary" then
table.insert(primaryMissions, mission)
end
end
end
sortMissions(primaryMissions, groupPos)
for _, mission in pairs(primaryMissions) do
text = text .. formatLine(mission)
end
---Secondary missions
text = text .. "\nSecondary Missions\n"
---@type Array<Mission>
local secondaryMissions = {}
for code, enabled in pairs(self.enabledByCode) do
if enabled == true then
local mission = self.missionsByCode[code]
if mission and mission:getState() == "ACTIVE" and mission.priority == "secondary" then
table.insert(secondaryMissions, mission)
end
end
end
sortMissions(secondaryMissions, groupPos)
for _, mission in pairs(secondaryMissions) do
text = text .. formatLine(mission)
end
trigger.action.outTextForGroup(id, text, 20, true)
---@param args OverviewToGroupCommandArgs
local MissionOverViewToGroup = function(args)
args.self:OverviewToGroup(args.groupId)
end
missionCommands.removeItemForGroup(groupID, { "Overview" } )
missionCommands.addCommandForGroup(groupID, "Overview", nil, MissionsOverviewToGroup, groupID)
---@type OverviewToGroupCommandArgs
local overviewToGroupCommandArgs = { self = self, groupId = groupID }
missionCommands.removeItemForGroup(groupID, { "Overview" })
missionCommands.addCommandForGroup(groupID, "Overview", nil, MissionOverViewToGroup, overviewToGroupCommandArgs)
end
---@private
---@param groupID number
function MissionCommandsHelper:AddPinnedMission(groupID)
local pinndedMission = self.pinnedByGroup[tostring(groupID)]
missionCommands.removeItemForGroup(groupID, { "Pinned Mission" })
if pinndedMission and self.enabledByCode[tostring(pinndedMission.code)] == true then
missionCommands.addCommandForGroup(groupID, "Pinned Mission", nil, missionBriefingRequested, { groupId = groupID, mission = pinndedMission })
missionCommands.addCommandForGroup(groupID, "Pinned Mission", nil, missionBriefingRequested,
{ groupId = groupID, mission = pinndedMission })
end
end
---@param groupID number
function MissionCommandsHelper:updateCommandsForGroup(groupID)
self._logger:debug("Updating commands for group: " .. tostring(groupID))
self:AddPinnedMission(groupID)
@@ -286,15 +297,14 @@ function MissionCommandsHelper:updateCommandsForGroup(groupID)
trigger.action.outTextForGroup(id, "clearing...", 1, true)
end
missionCommands.removeItemForGroup(groupID, { "Clear View" } )
missionCommands.removeItemForGroup(groupID, { "Clear View" })
missionCommands.addCommandForGroup(groupID, "Clear View", nil, clearView, groupID)
missionCommands.removeItemForGroup(groupID, { "Refresh Missions" } )
missionCommands.removeItemForGroup(groupID, { "Refresh Missions" })
missionCommands.addCommandForGroup(groupID, "Refresh Missions", nil, function(refresh_mission_id)
self._logger:debug("Manual refresh of missions for group: " .. tostring(refresh_mission_id))
self:updateCommandsForGroup(refresh_mission_id)
end, groupID)
end
local folderNames = {
@@ -317,17 +327,16 @@ function MissionCommandsHelper:PinMission(mission, groupID)
end
function MissionCommandsHelper:AddAllMissionCommandsToGroup(groupID)
local perFolder = 9
local group = DcsUtil.GetPlayerGroupByGroupID(groupID)
---@type Vec2
local groupPos = { x=0, y=0 }
local groupPos = { x = 0, y = 0 }
if group then
local pos = group:getUnit(1):getPosition().p
groupPos = { x= pos.x, y=pos.z }
groupPos = { x = pos.x, y = pos.z }
end
do --- primary missions
local count = 0
local path = { [1] = folderNames.primary }
@@ -353,7 +362,7 @@ function MissionCommandsHelper:AddAllMissionCommandsToGroup(groupID)
else
local name = "Next Menu ..."
missionCommands.addSubMenuForGroup(groupID, name, path)
path[#path+1] = name
path[#path + 1] = name
count = 0
end
end
@@ -382,7 +391,7 @@ function MissionCommandsHelper:AddAllMissionCommandsToGroup(groupID)
else
local name = "Next Menu ..."
missionCommands.addSubMenuForGroup(groupID, name, path)
path[#path+1] = name
path[#path + 1] = name
count = 0
end
end
@@ -395,28 +404,28 @@ end
---@param path Array<string>
---@param mission Mission
function MissionCommandsHelper:addMissionCommands(groupId, path, mission)
if path then
local group = DcsUtil.GetPlayerGroupByGroupID(groupId)
local distance = "[?]"
if group then
local lead = group:getUnit(1)
if lead and lead:isExist() == true then
local pos = lead:getPoint()
local Vec2Pos = { x= pos.x, y=pos.z }
local Vec2Pos = { x = pos.x, y = pos.z }
local dist = Util.VectorDistance2d(Vec2Pos, mission.location) / 1852
distance = "[" .. string.format("~%dnM", math.floor(dist)) .. "]"
end
end
local missionFolderName = "[" .. mission.code .. "]" .. distance .. mission.name .. "( " .. mission.missionTypeDisplay .. " )"
local missionFolderName = "[" ..
mission.code .. "]" .. distance .. mission.name .. "( " .. mission.missionTypeDisplay .. " )"
missionCommands.addSubMenuForGroup(groupId, missionFolderName, path)
table.insert(path, missionFolderName)
---@type MissionBriefingRequestedArgs
local missionBriefingRequestedArgs = { groupId = groupId, mission = mission }
missionCommands.addCommandForGroup(groupId, "Briefing", path, missionBriefingRequested,missionBriefingRequestedArgs)
missionCommands.addCommandForGroup(groupId, "Briefing", path, missionBriefingRequested,
missionBriefingRequestedArgs)
---@type PinMissionCommandArgs
local pinMissionCommandArgs = { self = self, groupId = groupId, mission = mission }
@@ -427,7 +436,6 @@ end
---@private
---@param groupID integer
function MissionCommandsHelper:AddSupplyHubCommandsIfApplicable(groupID)
if self._supplyUnitsTracker:IsGroupLeadInSupplyHub(groupID) ~= true then return end
self._logger:debug("Adding supply hub commands for group: " .. tostring(groupID))
@@ -458,28 +466,32 @@ function MissionCommandsHelper:AddSupplyHubCommandsIfApplicable(groupID)
local path = { [1] = folderNames.supplyHub }
---@type LoadCargoCommandParams
local farpParams1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_1000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
local farpParams1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_1000", supplyUnitsTracker =
self._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Load FARP Crate (1000)", path, loadCargoCommand, farpParams1000)
---@type LoadCargoCommandParams
local farpParams2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
local farpParams2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_2000", supplyUnitsTracker =
self._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Load FARP Crate (2000)", path, loadCargoCommand, farpParams2000)
---@type LoadCargoCommandParams
local samParms1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
local samParms1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker =
self._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Load SAM Crate (1000)", path, loadCargoCommand, samParms1000)
---@type LoadCargoCommandParams
local samParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
local samParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker =
self._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Load SAM Crate (2000)", path, loadCargoCommand, samParms2000)
---@type LoadCargoCommandParams
local airbaseParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "AIRBASE_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
local airbaseParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "AIRBASE_CRATE_2000", supplyUnitsTracker =
self._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Airbase Crate (2000)", path, loadCargoCommand, airbaseParms2000)
end
function MissionCommandsHelper:AddCargoCommands(groupID)
local group = DcsUtil.GetPlayerGroupByGroupID(groupID)
if group == nil then return end
@@ -509,20 +521,19 @@ function MissionCommandsHelper:AddCargoCommands(groupID)
for i = 1, amount do
local path = { [1] = folderNames.cargo }
---@type UnloadCargoCommandParams
local params = { unitID = unit:getID(), crateType = cargoType, supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Unload " .. cargoConfig.displayName, path, unloadCargoCommand, params)
local params = { unitID = unit:getID(), crateType = cargoType, supplyUnitsTracker = self
._supplyUnitsTracker, commandHelper = self }
missionCommands.addCommandForGroup(groupID, "Unload " .. cargoConfig.displayName, path,
unloadCargoCommand, params)
end
end
end
end
end
---@private
---@param groupId integer
function MissionCommandsHelper:addMissionFolders(groupId)
missionCommands.addSubMenuForGroup(groupId, folderNames.primary)
missionCommands.addSubMenuForGroup(groupId, folderNames.secondary)
@@ -26,13 +26,12 @@ SupplyUnitsTracker.__index = SupplyUnitsTracker
local singleton = nil
---comment
---@param logLevel LogLevel
---@return SupplyUnitsTracker
function SupplyUnitsTracker.getOrCreate(logLevel)
function SupplyUnitsTracker.getOrCreate()
if singleton == nil then
singleton = setmetatable({}, SupplyUnitsTracker)
singleton._logger = Logger.new("SupplyUnitsTracker", logLevel)
singleton._logger = Logger.new("SupplyUnitsTracker")
singleton._unitPositions = {}
singleton._cargoInUnits = {}
singleton._supplyUnitsByName = {}
@@ -78,7 +78,7 @@ function BuildableMission.new(database, logger, targetZone, noLandingZone, requi
self._onCrateDroppedOfListeners = {}
self._completeListeners = {}
self._markIDsPerGroup = {}
self._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate(logger.LogLevel)
self._supplyUnitsTracker = SupplyUnitsTracker.getOrCreate()
self._state = "NEW"
@@ -89,7 +89,7 @@ function BuildableMission.new(database, logger, targetZone, noLandingZone, requi
self.priority = "secondary"
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate(self._logger.LogLevel)
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate()
self._crateType = requiredCrateType
@@ -52,7 +52,7 @@ function Mission.newSuper(self, zoneName, missionName, missionType, missionBrief
self.location = database:GetLocationForMissionZone(zoneName)
self.missionTypeDisplay = self.missionType
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate(logger.LogLevel)
self._missionCommandsHelper = MissionCommandsHelper.getOrCreate()
return true, "success"
end
+2 -2
View File
@@ -28,10 +28,10 @@ SpearheadEvents.Init(defaultLogLevel)
local dbLogger = Logger.new("database", defaultLogLevel)
local standardLogger = Logger.new("", defaultLogLevel)
local databaseManager = Database.New(dbLogger)
MissionCommandsHelper.getOrCreate(defaultLogLevel) -- initiate
MissionCommandsHelper.getOrCreate() -- initiate
local capConfig = CapConfig:new();
local stageConfig = StageConfig:new();
local stageConfig = StageConfig:getInstance();
local startingStage = stageConfig.startingStage or 1
if SpearheadConfig and SpearheadConfig.Persistence and SpearheadConfig.Persistence.enabled == true then