recurring command updates fix

This commit is contained in:
2025-05-07 18:01:36 +02:00
parent 4de7887c35
commit f08cee4314
5 changed files with 35 additions and 23 deletions
Binary file not shown.
+23 -14
View File
@@ -240,36 +240,45 @@ end
function Stage:CheckAndUpdateSelf()
self._logger:debug("Checking on Stage: " .. self.zoneName)
local activeCount = 0
local dbTables = self:GetStageTables()
local availableMissions = {}
for _, mission in pairs(dbTables.missionsByCode) do
local state = mission:getState()
if state == "ACTIVE" then
activeCount = activeCount + 1
---@return Array<Mission>
local getAvailableMissions = function ()
---@type Array<Mission>
local availableMissions = {}
for _, mission in pairs(dbTables.missionsByCode) do
if mission:getState() == "NEW" then
table.insert(availableMissions, mission)
end
end
return availableMissions
end
if state == "NEW" then
table.insert(availableMissions, mission)
---@return number
local getActiveMissionsCount = function ()
local result = 0
for _, mission in pairs(dbTables.missionsByCode) do
if mission:getState() == "ACTIVE" then
result = result + 1
end
end
return result
end
local max = dbTables.maxMissions
local availableMissionsCount = Spearhead.Util.tableLength(availableMissions)
local availableMissionsCount = Spearhead.Util.tableLength(getAvailableMissions())
local activeCount = getActiveMissionsCount()
if activeCount < max and availableMissionsCount > 0 then
for i = activeCount+1, max do
if availableMissionsCount == 0 then
i = max+1 --exits this loop
else
local index = math.random(1, availableMissionsCount)
---@type Mission
local mission = table.remove(availableMissions, index)
local mission = Spearhead.Util.randomFromList(getAvailableMissions()) --[[@as Mission]]
if mission then
mission:SpawnActive()
activeCount = activeCount + 1;
else
return
end
availableMissionsCount = availableMissionsCount - 1
end
@@ -2,6 +2,7 @@
--- ZoneMission is missions that are defined by zones in the ME
---@class ZoneMission : Mission, OnUnitLostListener
---@field private _state MissionState
---@field private _missionGroups MissionGroups
local ZoneMission = {}
@@ -137,9 +138,6 @@ function ZoneMission:UpdateState(checkHealth, messageIfDone)
if checkHealth == nil then checkHealth = false end
if messageIfDone == false then messageIfDone = true end
if self._state == "COMPLETED" then
return
end
if checkHealth == true then
local function unitAliveState(unitName)
@@ -254,6 +252,11 @@ function ZoneMission:SpawnActive()
self._logger:info("Activating " .. self.name)
if self._state == "COMPLETED" or self._state == "ACTIVE" then
self._logger:debug("Mission already completed, not spawning")
return
end
self._state = "ACTIVE"
for _, group in pairs(self._missionGroups.groups) do
group:Spawn()
@@ -6,10 +6,10 @@
---@field missionType MissionType
---@field missionTypeDisplay string
---@field priority MissionPriority
---@field missionBriefing string
---@field location Vec2?
---@field code string
---@field protected state MissionState
---@field protected _state MissionState
---@field protected _missionBriefing string
---@field getState fun(self: Mission): MissionState @Get the mission state
---@field protected _logger Logger
---@field protected _database Database
@@ -37,10 +37,10 @@ function Mission.newSuper(self, zoneName, missionName, missionType, missionBrief
self.name = missionName
self.missionType = missionType
self.priority = priority
self.state = "NEW"
self._state = "NEW"
self._logger = logger
self._database = database
self.missionBriefing = missionBriefing
self._missionBriefing = missionBriefing
self.code = tostring(database:GetNewMissionCode())
self._completeListeners = {}
@@ -55,7 +55,7 @@ end
---@return MissionState
function Mission:getState()
return self.state
return self._state
end
--region PUBLIC
+1 -1
View File
@@ -52,7 +52,7 @@ SpearheadConfig = {
maxMissionStage = 10,
--Stage starting number
startingStage = 0,
startingStage = 1,
---DEBUG logging. Consider keeping this disabled
debugEnabled = true