From 5fd070fb6813e65a4d3399283148ec16ccde8547 Mon Sep 17 00:00:00 2001 From: dutchie031 Date: Fri, 11 Oct 2024 16:42:48 +0200 Subject: [PATCH] cap config implemented in cap groups and bases --- classes/capClasses/CapAirbase.lua | 15 ------------ classes/capClasses/CapGroup.lua | 32 +++++++------------------ classes/configuration/CapConfig.lua | 37 +++++++++++++++++++---------- config.lua | 29 +++++++++++++++------- main.lua | 18 ++------------ 5 files changed, 57 insertions(+), 74 deletions(-) diff --git a/classes/capClasses/CapAirbase.lua b/classes/capClasses/CapAirbase.lua index cdf473a..fcb4546 100644 --- a/classes/capClasses/CapAirbase.lua +++ b/classes/capClasses/CapAirbase.lua @@ -18,21 +18,6 @@ function CapBase:new(airbaseId, database, logger, capConfig, stageConfig) o.logger = logger o.activeStage = 0 o.capConfig = capConfig - - if capConfig == nil then - capConfig = {} - table.insert(Spearhead.MissionEditingWarnings,"CapConfig is nil") - else - if capConfig.minSpeed == nil then Spearhead.MissionEditingWarnings("CapConfig.minSpeed is nil") end - if capConfig.maxSpeed == nil then Spearhead.MissionEditingWarnings("CapConfig.maxSpeed is nil") end - if capConfig.minAlt == nil then Spearhead.MissionEditingWarnings("CapConfig.minAlt is nil") end - if capConfig.maxAlt == nil then Spearhead.MissionEditingWarnings("CapConfig.maxAlt is nil") end - if capConfig.minDurationOnStation == nil then Spearhead.MissionEditingWarnings("CapConfig.minDurationOnStation is nil") end - if capConfig.maxDurationOnStation == nil then Spearhead.MissionEditingWarnings("CapConfig.maxDurationOnStation is nil") end - if capConfig.rearmDelay == nil then Spearhead.MissionEditingWarnings("CapConfig.rearmDelay is nil") end - if capConfig.deathDelay == nil then Spearhead.MissionEditingWarnings("CapConfig.deathDelay is nil") end - end - o.activeCapStages = (stageConfig or {}).capActiveStages or 10 o.lastStatesByName = {} diff --git a/classes/capClasses/CapGroup.lua b/classes/capClasses/CapGroup.lua index 80660b3..12c4788 100644 --- a/classes/capClasses/CapGroup.lua +++ b/classes/capClasses/CapGroup.lua @@ -140,17 +140,7 @@ function CapGroup:new(groupName, airbaseId, logger, database, capConfig) o.markedForDespawn = false --config - o.capConfig = {} - - if not capConfig then capConfig = {} end - o.capConfig.maxDeviationRange = capConfig.maxDeviationRange - o.capConfig.minSpeed = (capConfig.minSpeed or 400) * 0.514444 - o.capConfig.maxSpeed = (capConfig.maxSpeed or 500) * 0.514444 - o.capConfig.minAlt = (capConfig.minAlt or 8000) * 0.3048 - o.capConfig.maxAlt = (capConfig.maxAlt or 27000) * 0.3048 - o.capConfig.minDurationOnStation = capConfig.minDurationOnStation or 600 - o.capConfig.maxDurationOnstation = capConfig.maxDurationOnStation or 1800 - o.capConfig.rearmDelay = capConfig.rearmDelay or 300 + o.capConfig = capConfig ---comment ---@param self table @@ -168,7 +158,7 @@ function CapGroup:new(groupName, airbaseId, logger, database, capConfig) o.StartRearm = function(self) self:SpawnOnTheRamp() self:SetState(CapGroup.GroupState.REARMING) - timer.scheduleFunction(SetReadyOnRampAsync, self, timer.getTime() + self.capConfig.rearmDelay - RESPAWN_AFTER_TOUCHDOWN_SECONDS) + timer.scheduleFunction(SetReadyOnRampAsync, self, timer.getTime() + self.capConfig:getRearmDelay() - RESPAWN_AFTER_TOUCHDOWN_SECONDS) end o.SpawnOnTheRamp = function(self) @@ -203,7 +193,7 @@ function CapGroup:new(groupName, airbaseId, logger, database, capConfig) o.SendRTB = function(self) local group = Group.getByName(self.groupName) if group and group:isExist() then - local speed = math.random(self.capConfig.minSpeed, self.capConfig.maxSpeed) + local speed = math.random(self.capConfig:getMinSpeed(), self.capConfig:getMaxSpeed()) local rtbTask, errormessage = Spearhead.RouteUtil.CreateRTBMission(self.groupName, self.airbaseId, speed) if rtbTask then timer.scheduleFunction(setTaskAsync, { task = rtbTask, groupName = self.groupName, logger = self.logger }, timer.getTime() + 3) @@ -236,21 +226,17 @@ function CapGroup:new(groupName, airbaseId, logger, database, capConfig) local controller = group:getController() local capPoints = database:getCapRouteInZone(stageZoneNumber, self.airbaseId) - local altitude = math.random(self.capConfig.minAlt, self.capConfig.maxAlt) - local speed = math.random(self.capConfig.minSpeed, self.capConfig.maxSpeed) + local altitude = math.random(self.capConfig:getMinAlt(), self.capConfig:getMaxAlt()) + local speed = math.random(self.capConfig:getMinSpeed(), self.capConfig:getMaxSpeed()) local attackHelos = false - local deviationDistance = self.capConfig.maxDeviationRange + local deviationDistance = self.capConfig:getMaxDeviationRange() local capTask if self.state == CapGroup.GroupState.ONRAMP or self.onStationSince == 0 then controller:setCommand({ id = 'Start', params = {} }) - local duration = math.random(self.capConfig.minDurationOnStation, self.capConfig - .maxDurationOnstation) - self.logger:debug("random schedule min: " .. - tostring(self.capConfig.minDurationOnStation or "nil") .. - " max: " .. tostring(self.capConfig.maxDurationOnstation or "nil") .. " actual " .. duration) + local duration = math.random(self.capConfig:getMinDurationOnStation(), self.capConfig:getmaxDurationOnStation()) self.currentCapTaskingDuration = duration @@ -273,7 +259,7 @@ function CapGroup:new(groupName, airbaseId, logger, database, capConfig) ---@param airdomeId any o.SendToAirbase = function(self, airdomeId) self.airbaseId = airdomeId - local speed = math.random(self.capConfig.minSpeed, self.capConfig.maxSpeed) + local speed = math.random(self.capConfig:getMinSpeed(), self.capConfig:getMaxSpeed()) local rtbTask = Spearhead.RouteUtil.CreateRTBMission(self.groupName, airdomeId, speed) local group = Group.getByName(self.groupName) local controller = group:getController() @@ -345,7 +331,7 @@ function CapGroup:new(groupName, airbaseId, logger, database, capConfig) if self.markedForDespawn == true then self:Despawn() else - local delay = self.capConfig.deathDelay - self.capConfig.rearmDelay + RESPAWN_AFTER_TOUCHDOWN_SECONDS + local delay = self.capConfig:getDeathDelay() - self.capConfig:getRearmDelay() + RESPAWN_AFTER_TOUCHDOWN_SECONDS timer.scheduleFunction(DelayedStartRearm, { self = self }, timer.getTime() + delay) end end diff --git a/classes/configuration/CapConfig.lua b/classes/configuration/CapConfig.lua index be34256..97c3a0e 100644 --- a/classes/configuration/CapConfig.lua +++ b/classes/configuration/CapConfig.lua @@ -10,32 +10,45 @@ function CapConfig:new() local enabled = SpearheadConfig.CapConfig.enabled or true ---@return boolean - o.isEnabled = function() return enabled == true end + o.isEnabled = function(self) return enabled == true end - local minSpeed = tonumber(SpearheadConfig.CapConfig.minSpeed) or 400 + local minSpeed = (tonumber(SpearheadConfig.CapConfig.minSpeed) or 400) * 0.514444 ---@return number - o.getMinSpeed = function() return minSpeed end + o.getMinSpeed = function(self) return minSpeed end - local maxSpeed = tonumber(SpearheadConfig.CapConfig.maxSpeed) or 400 + local maxSpeed = (tonumber(SpearheadConfig.CapConfig.maxSpeed) or 400) * 0.514444 ---@return number - o.getMaxSpeed = function() return maxSpeed end + o.getMaxSpeed = function(self) return maxSpeed end - local minAlt = tonumber(SpearheadConfig.CapConfig.minAlt) or 18000 + local minAlt = (tonumber(SpearheadConfig.CapConfig.minAlt) or 18000) * 0.3048 ---@return number - o.getMinAlt = function() return minAlt end + o.getMinAlt = function(self) return minAlt end - local maxAlt = tonumber(SpearheadConfig.CapConfig.maxAlt) or 28000 + local maxAlt = (tonumber(SpearheadConfig.CapConfig.maxAlt) or 28000) * 0.3048 ---@return number - o.getMaxAlt = function() return maxAlt end + o.getMaxAlt = function(self) return maxAlt end + + local minDurationOnStation = 1200 + ---@return number + o.getMinDurationOnStation = function(self) return minDurationOnStation end + + local maxDurationOnStation = 2700 + ---@return number + o.getmaxDurationOnStation = function(self) return maxDurationOnStation end + + local maxDeviationRange = 20 * 1852; + ---@return number + o.getMaxDeviationRange = function(self) return maxDeviationRange end local rearmDelay = tonumber(SpearheadConfig.CapConfig.rearmDelay) or 600 ---@return number - o.getRearmDelay = function() return rearmDelay end + o.getRearmDelay = function(self) return rearmDelay end local deathDelay = tonumber(SpearheadConfig.CapConfig.deathDelay) or 1800 ---@return number - o.getDeathDelay = function() return deathDelay end - + o.getDeathDelay = function(self) return deathDelay end + o.logLevel = Spearhead.LoggerTemplate.LogLevelOptions.INFO + return o; end Spearhead.internal.configuration.CapConfig = CapConfig; \ No newline at end of file diff --git a/config.lua b/config.lua index 968a166..01b1cbf 100644 --- a/config.lua +++ b/config.lua @@ -4,37 +4,50 @@ SpearheadConfig = { CapConfig = { --quickly enable of disable the entire CAP Logic --(you can also just rename all units to not be named "CAP_") - enabled = true, + enabled = true, -- default true --min ground speed for CAP aircraft during patrol -- unit: knots - minSpeed = 400, + minSpeed = 400, -- default 400 --max speed for CAP aircraft during patrol -- unit: knots - maxSpeed = 500, + maxSpeed = 500, -- default 500 --minAlt for aircraft on patrol -- unit: feet - minAlt = 18000, + minAlt = 18000, -- default 18000 --maxAlt for aircraft on patrol -- unit: feet - maxAlt = 28000, + maxAlt = 28000, -- default 28000 --Delay for aircraft from touchdown to off the chocks. -- unit: seconds - rearmDelay = 600, + rearmDelay = 600, -- default 600 --Delay for aircraft from death to takeoff. --When the seconds remaining is the same at the rearmDelay it will be spawned on the ramp and follow the rearm logic. -- !! Can not be lower than rearmDelay -- unit: seconds - deathDelay = 1800, + deathDelay = 1800, -- default 1800 }, StageConfig = { - -- currently no configurable options + + -- management of stages and its missions. + -- This is not related to CAP managers which will continue to work even if stage management is disabled + enabled = true, -- default true + + --Will draw the active and the next stage + drawStages = true, -- default true + + --AutoStages will continue to the next stage automatically on completion of the missions within the stage. + -- If you want to make it so the next stage triggers only when you want to disable it here and manually implement the actions needed. + --[[ + TODO: Add manual stage transition documentation + ]] + autoStages = true --default true } } diff --git a/main.lua b/main.lua index 11881ff..b2ce92d 100644 --- a/main.lua +++ b/main.lua @@ -2,22 +2,8 @@ local dbLogger = Spearhead.LoggerTemplate:new("database", Spearhead.LoggerTemplate.LogLevelOptions.INFO) local databaseManager = Spearhead.DB:new(dbLogger) -local capConfig = { - maxDeviationRange = 32186, --20NM -- sets max deviation before flight starts pulling back, - minSpeed = 400, - maxSpeed = 500, - minAlt = 18000, - maxAlt = 28000, - minDurationOnStation = 1800, - maxDurationOnStation = 2700, - rearmDelay = 600, - deathDelay = 1800, - logLevel = Spearhead.LoggerTemplate.LogLevelOptions.INFO -} - -local stageConfig = { - logLevel = Spearhead.LoggerTemplate.LogLevelOptions.INFO -} +local capConfig = Spearhead.internal.configuration.CapConfig:new(); +local stageConfig = Spearhead.internal.configuration.StageConfig:new(); Spearhead.internal.GlobalCapManager.start(databaseManager, capConfig, stageConfig) Spearhead.internal.GlobalStageManager.start(databaseManager, stageConfig)