Zone configuration (#62)

* wip

* updates on trigger zone labels, mgrs fix, mission briefings

---------

Co-authored-by: ex61wi <tim.rorije@ing.com>
Co-authored-by: dutchie032 <dutchie032>
This commit is contained in:
2025-09-03 11:58:48 +02:00
committed by GitHub
co-authored by ex61wi dutchie032 <dutchie032>
parent 1d4c0a8313
commit bd023b46ac
10 changed files with 195 additions and 184 deletions
@@ -54,7 +54,7 @@ function SpearheadGroup:Spawn(lateStart)
---@type SpawnOverrides
local overrides = {
uncontrolled = lateStart or false,
uncontrolled = lateStart,
}
local spawnedObject, isStatic = self._spawnManager:SpawnGroup(self._groupName, overrides, self._isPersistent)
@@ -59,6 +59,7 @@ function FarpZone.New(database, logger, zoneName, spawnManager)
local zone = Spearhead.DcsUtil.getZoneByName(zoneName)
if zone then
self._logger:debug("Creating Buildable zone: " .. zoneName .. " with " .. (farpData.buildingKilos or "nil") .. " kilos")
Spearhead.classes.stageClasses.SpecialZones.abstract.BuildableZone.New(self, zone, farpData.buildingKilos or 0, "FARP_CRATE", self._groups, logger, database)
end
end
@@ -28,6 +28,7 @@ function BuildableZone:New(targetZone, kilosRequired, crateType, buildableGroup
self._receivedBuildingKilos = 0
local persistedKilos = Spearhead.classes.persistence.Persistence.GetZoneDeliveredKilos(targetZone.name)
if persistedKilos and persistedKilos > 0 then
self._buildableLogger:debug("Zone " .. targetZone.name .. " already has " .. persistedKilos .. " kilos delivered")
self._receivedBuildingKilos = persistedKilos
---@param params UnpackCrateParam
@@ -5,6 +5,7 @@
---| "GRAY"
--- @class StageData
--- @field stageBriefing string?
--- @field missionsByCode table<string, Mission>
--- @field missionsByName table<string, Mission>
--- @field missions Array<ZoneMission>
@@ -29,6 +30,7 @@
--- @field zoneName string
--- @field stageName string?
--- @field stageNumber number
--- @field protected _missionCommandsHelper MissionCommandsHelper
--- @field protected _isActive boolean
--- @field protected _isComplete boolean
--- @field protected _missionPriority MissionPriority
@@ -83,6 +85,7 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
self._database = database
self._logger = logger
self._db = {
stageBriefing = nil,
missionsByCode = {},
missions = {},
sams ={},
@@ -98,6 +101,7 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
self._activeStage = -99
self._preActivated = false
self._stageConfig = stageConfig or {}
self._missionCommandsHelper = Spearhead.classes.stageClasses.helpers.MissionCommandsHelper.getOrCreate(logger.LogLevel)
local zone = Spearhead.DcsUtil.getZoneByName(self.zoneName)
if zone then
@@ -120,6 +124,7 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
table.insert(self._db.supplyHubs, supplyHub)
end
self._db.stageBriefing = database:getStageBriefingForStage(self.zoneName)
self._logger:info("Initiating new Stage with name: " .. self.zoneName)
---comment
@@ -238,7 +243,7 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
end
Spearhead.Events.AddStageNumberChangedListener(self)
return self
end
@@ -453,6 +458,10 @@ function Stage:OnStageNumberChanged(number)
if number == self.stageNumber then
self:ActivateStage()
if self._db and self._db.stageBriefing then
self._missionCommandsHelper:AddStageBriefing(self.zoneName, self._db.stageBriefing)
end
end
if previousActive <= self.stageNumber then
@@ -460,6 +469,10 @@ function Stage:OnStageNumberChanged(number)
self:ActivateBlueStage()
end
end
if number > self.stageNumber then
self._missionCommandsHelper:RemoveStageBriefing(self.zoneName)
end
end
function Stage:GetBriefing()
@@ -6,6 +6,7 @@
---@field lastUpdate number @last update time
---@field updateContinuous fun(self: MissionCommandsHelper, time: number): number @function to update commands continuously
---@field pinnedByGroup table<string, Mission> @table of pinned missions by group ID
---@field private _stageBriefings table<string, string> @table of stage briefings by stage name
---@field private _supplyHubGroups table<string, boolean> @table of supply hub groups by their ID
---@field private _logger Logger @logger instance for logging
---@field private _supplyUnitsTracker SupplyUnitsTracker @supply units tracker instance
@@ -32,6 +33,7 @@ function MissionCommandsHelper.getOrCreate(logLevel)
instance.pinnedByGroup = {}
instance.lastUpdate = 0
instance._supplyHubGroups = {}
instance._stageBriefings = {}
instance._supplyUnitsTracker = Spearhead.classes.stageClasses.helpers.SupplyUnitsTracker.getOrCreate(logLevel)
@@ -66,6 +68,14 @@ function MissionCommandsHelper.getOrCreate(logLevel)
return instance
end
function MissionCommandsHelper:AddStageBriefing(stageName, briefing)
self._stageBriefings[stageName] = briefing
end
function MissionCommandsHelper:RemoveStageBriefing(stageName)
self._stageBriefings[stageName] = nil
end
---@param mission Mission
function MissionCommandsHelper:AddMissionToCommands(mission)
self._logger:debug("Adding mission to commands: [" .. mission.code .. "]" .. mission.name)
@@ -174,6 +184,10 @@ function MissionCommandsHelper:AddOverviewCommand(groupID)
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"
for code, enabled in pairs(self.enabledByCode) do
+18 -19
View File
@@ -81,7 +81,10 @@ function ZoneMission.new(zoneName, priority, database, logger, parentStage, spaw
return nil
end
local missionBriefing = database:getMissionBriefingForMissionZone(zoneName) or "no briefing provided"
local missionData = database:getMissionDataForZone(zoneName)
if not missionData then return end
local missionBriefing = missionData.description or "No briefing available"
local success, error = Mission.newSuper(self, zoneName, parsed.missionName, parsed.type, missionBriefing, priority,
database, logger)
@@ -109,26 +112,22 @@ function ZoneMission.new(zoneName, priority, database, logger, parentStage, spaw
self._parentStage = parentStage
self._dependencies = {}
local dependencies = database:getMissionDependencies(zoneName)
for _, dependency in pairs(dependencies) do
self._dependencies[dependency] = false
end
local completeAtIndex = database:getMissionCompleteAt(zoneName)
if completeAtIndex == nil and self.missionType == "BAI" or self.missionType == "CAS" then
self._completeAtIndex = 0.8
elseif completeAtIndex == nil then
self._completeAtIndex = 1
else
self._completeAtIndex = completeAtIndex
end
self._logger:debug("Complete at index " .. self.zoneName .. ": " .. self._completeAtIndex)
local SpearheadGroup = Spearhead.classes.stageClasses.Groups.SpearheadGroup
local missionData = database:getMissionDataForZone(zoneName)
if not missionData then return end
if missionData.dependsOn then
for _, dependency in pairs(missionData.dependsOn) do
self._dependencies[dependency] = false
end
end
if missionData.completeAt == nil and (self.missionType == "BAI" or self.missionType == "CAS") then
self._completeAtIndex = 0.8
elseif missionData.completeAt == nil then
self._completeAtIndex = 1
else
self._completeAtIndex = missionData.completeAt
end
self._missionGroups.sceneryTargets = missionData.SceneryTargets or {}
if Spearhead.Util.tableLength(self._missionGroups.sceneryTargets) > 0 then
self._missionGroups.hasTargets = true