From 2032c2cfbf27be3e4fad410125e8f567bcaa98e9 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Thu, 27 Apr 2023 10:34:17 +0200 Subject: [PATCH 1/2] # AUFTRAG * Bring options for afterburner usage down to AUFTRAG level # OpsGroup (Flightgroup) * Follow setting option for AB usage from mission, if set, generally and for execution phase of the AUFTRAG --- Moose Development/Moose/Ops/Auftrag.lua | 33 +++++++++++++++++++ Moose Development/Moose/Ops/OpsGroup.lua | 40 ++++++++++++++++++++++-- 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/Moose Development/Moose/Ops/Auftrag.lua b/Moose Development/Moose/Ops/Auftrag.lua index eefd9cc2c..9edd38838 100644 --- a/Moose Development/Moose/Ops/Auftrag.lua +++ b/Moose Development/Moose/Ops/Auftrag.lua @@ -3084,6 +3084,39 @@ function AUFTRAG:SetRequiredCarriers(NcarriersMin, NcarriersMax) return self end +--- Set that (jet) aircraft are generally **not** allowed to use afterburner. Default is use of afterburner is allowed. +-- @param #AUFTRAG self +-- @return #AUFTRAG self +function AUFTRAG:SetProhibitAfterburner() + self.prohibitAB = true + return self +end + +--- Set that (jet) aircraft are generally allowed to use afterburner. Default is use of afterburner is allowed. +-- @param #AUFTRAG self +-- @return #AUFTRAG self +function AUFTRAG:SetAllowAfterburner() + self.prohibitAB = false + return self +end + +--- Set that (jet) aircraft are **not** allowed to use afterburner in mission execution phase. Default is use of afterburner is allowed. +-- @param #AUFTRAG self +-- @return #AUFTRAG self +function AUFTRAG:SetProhibitAfterburnerExecutePhase() + self.prohibitABExecute = true + return self +end + +--- Set that (jet) aircraft are allowed to use afterburner in mission execution phase. Default is use of afterburner is allowed. +-- @param #AUFTRAG self +-- @return #AUFTRAG self +function AUFTRAG:SetAllowAfterburnerExecutePhase() + self.prohibitABExecute = false + return self +end + +-- prohibitABExecute --- **[LEGION, COMMANDER, CHIEF]** Assign a legion cohort to the mission. Only these cohorts will be considered for the job. -- @param #AUFTRAG self diff --git a/Moose Development/Moose/Ops/OpsGroup.lua b/Moose Development/Moose/Ops/OpsGroup.lua index ca671eb81..3efa4ecba 100644 --- a/Moose Development/Moose/Ops/OpsGroup.lua +++ b/Moose Development/Moose/Ops/OpsGroup.lua @@ -3339,8 +3339,10 @@ end function OPSGROUP:GetExpectedSpeed() if self:IsHolding() or self:Is("Rearming") or self:IsWaiting() or self:IsRetreated() then + --env.info("GetExpectedSpeed - returning ZERO") return 0 else + --env.info("GetExpectedSpeed - returning self.speedWP = "..self.speedWp) return self.speedWp or 0 end @@ -5344,7 +5346,7 @@ function OPSGROUP:onafterMissionStart(From, Event, To, Mission) --if self.isFlightgroup and Mission.type~=AUFTRAG.Type.ALERT5 then -- FLIGHTGROUP.SetReadyForTakeoff(self, true) --end - + -- Route group to mission zone. if self.speedMax>3.6 or true then @@ -5400,7 +5402,18 @@ function OPSGROUP:onafterMissionExecute(From, Event, To, Mission) if Mission.engagedetectedOn then self:SetEngageDetectedOn(UTILS.MetersToNM(Mission.engagedetectedRmax), Mission.engagedetectedTypes, Mission.engagedetectedEngageZones, Mission.engagedetectedNoEngageZones) end - + + -- Set AB usage for mission execution based on Mission entry, if the option was set in the mission + if self.isFlightgroup then + if Mission.prohibitABExecute == true then + self:SetProhibitAfterburner() + self:I("Set prohibit AB") + elseif Mission.prohibitABExecute == false then + self:SetAllowAfterburner() + self:T2("Set allow AB") + end + end + end --- On after "PauseMission" event. @@ -5697,6 +5710,17 @@ function OPSGROUP:onafterMissionDone(From, Event, To, Mission) return end + -- Set AB usage based on Mission entry, if the option was set in the mission + if self.isFlightgroup then + if Mission.prohibitAB == true then + self:T2("Setting prohibit AB") + self:SetProhibitAfterburner() + elseif Mission.prohibitAB == false then + self:T2("Setting allow AB") + self:SetAllowAfterburner() + end + end + -- Check if group is done. self:_CheckGroupDone(delay) @@ -6116,7 +6140,19 @@ function OPSGROUP:_SetMissionOptions(mission) if mission.icls then self:SwitchICLS(mission.icls.Channel, mission.icls.Morse, mission.icls.UnitName) end + + -- Set AB usage based on Mission entry, if the option was set in the mission + if self.isFlightgroup then + if mission.prohibitAB == true then + self:SetProhibitAfterburner() + self:T2("Set prohibit AB") + elseif mission.prohibitAB == false then + self:SetAllowAfterburner() + self:T2("Set allow AB") + end + end + return self end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- From 8da228c9a25bb457180b0b6e736efb9754d91627 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Fri, 5 May 2023 10:31:00 +0200 Subject: [PATCH 2/2] #COORDINATE * Added `IsInSteepArea()`and `IsInFlatArea()` --- Moose Development/Moose/Core/Point.lua | 49 ++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index 18254b033..772de02bf 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -540,7 +540,7 @@ do -- COORDINATE local gotscenery=false local function EvaluateZone(ZoneObject) - BASE:T({ZoneObject}) + if ZoneObject then -- Get category of scanned object. @@ -3283,7 +3283,52 @@ do -- COORDINATE return self:GetTemperatureText( nil, Settings ) end - + + + --- Function to check if a coordinate is in a steep (>8% elevation) area of the map + -- @param #COORDINATE self + -- @param #number Radius (Optional) Radius to check around the coordinate, defaults to 50m (100m diameter) + -- @param #number Minelevation (Optional) Elevation from which on a area is defined as steep, defaults to 8% (8m height gain across 100 meters) + -- @return #boolen IsSteep If true, area is steep + -- @return #number MaxElevation Elevation in meters measured over 100m + function COORDINATE:IsInSteepArea(Radius,Minelevation) + local steep = false + local elev = Minelevation or 8 + local bdelta = 0 + local h0 = self:GetLandHeight() + local radius = Radius or 50 + local diam = radius * 2 + for i=0,150,30 do + local polar = math.fmod(i+180,360) + local c1 = self:Translate(radius,i,false,false) + local c2 = self:Translate(radius,polar,false,false) + local h1 = c1:GetLandHeight() + local h2 = c2:GetLandHeight() + local d1 = math.abs(h1-h2) + local d2 = math.abs(h0-h1) + local d3 = math.abs(h0-h2) + local dm = d1 > d2 and d1 or d2 + local dm1 = dm > d3 and dm or d3 + bdelta = dm1 > bdelta and dm1 or bdelta + self:T(string.format("d1=%d, d2=%d, d3=%d, max delta=%d",d1,d2,d3,bdelta)) + end + local steepness = bdelta / (radius / 100) + if steepness >= elev then steep = true end + return steep, math.floor(steepness) + end + + --- Function to check if a coordinate is in a flat (<8% elevation) area of the map + -- @param #COORDINATE self + -- @param #number Radius (Optional) Radius to check around the coordinate, defaults to 50m (100m diameter) + -- @param #number Minelevation (Optional) Elevation from which on a area is defined as steep, defaults to 8% (8m height gain across 100 meters) + -- @return #boolen IsFlat If true, area is flat + -- @return #number MaxElevation Elevation in meters measured over 100m + function COORDINATE:IsInFlatArea(Radius,Minelevation) + local steep, elev = self:IsInSteepArea(Radius,Minelevation) + local flat = not steep + return flat, elev + end + end do -- POINT_VEC3