diff --git a/Moose Development/Moose/Ops/Auftrag.lua b/Moose Development/Moose/Ops/Auftrag.lua index 7f3ff6337..0abda645a 100644 --- a/Moose Development/Moose/Ops/Auftrag.lua +++ b/Moose Development/Moose/Ops/Auftrag.lua @@ -260,6 +260,10 @@ -- -- Not implemented yet. -- +-- ## Ground Escort +-- +-- An escort mission can be created with the @{#AUFTRAG.NewGROUNDESCORT}() function. +-- -- ## Intercept -- -- An intercept mission can be created with the @{#AUFTRAG.NewINTERCEPT}() function. @@ -407,6 +411,7 @@ _AUFTRAGSNR=0 -- @field #string FAC Forward AirController mission. -- @field #string FACA Forward AirController airborne mission. -- @field #string FERRY Ferry mission. +-- @field #string GROUNDESCORT Ground escort mission. -- @field #string INTERCEPT Intercept mission. -- @field #string ORBIT Orbit mission. -- @field #string GCICAP Similar to CAP but no auto engage targets. @@ -451,6 +456,7 @@ AUFTRAG.Type={ FAC="FAC", FACA="FAC-A", FERRY="Ferry Flight", + GROUNDESCORT="Ground Escort", INTERCEPT="Intercept", ORBIT="Orbit", GCICAP="Ground Controlled CAP", @@ -1741,6 +1747,43 @@ function AUFTRAG:NewBOMBCARPET(Target, Altitude, CarpetLength) return mission end +--- **[AIR/HELO]** Create a GROUNDESCORT (or FOLLOW) mission. Helo will escort a **ground** group and automatically engage certain target types. +-- @param #AUFTRAG self +-- @param Wrapper.Group#GROUP EscortGroup The ground group to escort. +-- @param #number OrbitDistance Orbit to/from the lead unit this many NM. Defaults to 3 NM. +-- @param #table TargetTypes Types of targets to engage automatically. Default is {"Ground vehicles"}, i.e. all enemy ground units. Use an empty set {} for a simple "FOLLOW" mission. +-- @return #AUFTRAG self +function AUFTRAG:NewESCORT(EscortGroup, OrbitDistance, TargetTypes) + + local mission=AUFTRAG:New(AUFTRAG.Type.GROUNDESCORT) + + -- If only a string is passed we set a variable and check later if the group exists. + if type(EscortGroup)=="string" then + mission.escortGroupName=EscortGroup + mission:_TargetFromObject() + else + mission:_TargetFromObject(EscortGroup) + end + + -- DCS task parameters: + mission.orbitDistance=OrbitDistance and UTILS.NMToMeters(OrbitDistance) or UTILS.NMToMeters(3) + --mission.engageMaxDistance=EngageMaxDistance and UTILS.NMToMeters(EngageMaxDistance) or UTILS.NMToMeters(5) + mission.engageTargetTypes=TargetTypes or {"Ground vehicles"} + + -- Mission options: + mission.missionTask=ENUMS.MissionTask.GROUNDESCORT + mission.missionFraction=0.1 + mission.missionAltitude=1000 + mission.optionROE=ENUMS.ROE.OpenFire -- TODO: what's the best ROE here? Make dependent on ESCORT or FOLLOW! + mission.optionROT=ENUMS.ROT.PassiveDefense + + mission.categories={AUFTRAG.Category.HELICOPTER} + + mission.DCStask=mission:GetDCSMissionTask() + + return mission +end + --- **[AIR]** Create an ESCORT (or FOLLOW) mission. Flight will escort another group and automatically engage certain target types. -- @param #AUFTRAG self @@ -5844,10 +5887,20 @@ function AUFTRAG:GetDCSMissionTask() -- ESCORT Mission -- -------------------- - local DCStask=CONTROLLABLE.TaskEscort(nil, self.engageTarget:GetObject(), self.escortVec3, LastWaypointIndex, self.engageMaxDistance, self.engageTargetTypes) + local DCStask=CONTROLLABLE.TaskEscort(nil, self.engageTarget:GetObject(), self.escortVec3, nil, self.engageMaxDistance, self.engageTargetTypes) table.insert(DCStasks, DCStask) + + elseif self.type==AUFTRAG.Type.GROUNDESCORT then + -------------------- + -- GROUNDESCORT Mission -- + -------------------- + + local DCSTask=CONTROLLABLE.TaskGroundEscort(nil,self.engageTarget:GetObject(),nil,self.orbitDistance,self.engageTargetTypes) + + table.insert(DCStasks, DCStask) + elseif self.type==AUFTRAG.Type.FACA then ------------------ @@ -6529,6 +6582,8 @@ function AUFTRAG:GetMissionTaskforMissionType(MissionType) mtask=ENUMS.MissionTask.AFAC elseif MissionType==AUFTRAG.Type.FERRY then mtask=ENUMS.MissionTask.NOTHING + elseif MissionType==AUFTRAG.Type.GROUNDESCORT then + mtask=ENUMS.MissionTask.GROUNDESCORT elseif MissionType==AUFTRAG.Type.INTERCEPT then mtask=ENUMS.MissionTask.INTERCEPT elseif MissionType==AUFTRAG.Type.RECON then diff --git a/Moose Development/Moose/Utilities/Enums.lua b/Moose Development/Moose/Utilities/Enums.lua index 6c47c5216..b00552dcf 100644 --- a/Moose Development/Moose/Utilities/Enums.lua +++ b/Moose Development/Moose/Utilities/Enums.lua @@ -236,6 +236,7 @@ ENUMS.WeaponType.Any={ -- @field #string ESCORT Escort another group. -- @field #string FIGHTERSWEEP Fighter sweep. -- @field #string GROUNDATTACK Ground attack. +-- @field #string GROUNDESCORT Ground escort another group. -- @field #string INTERCEPT Intercept. -- @field #string PINPOINTSTRIKE Pinpoint strike. -- @field #string RECONNAISSANCE Reconnaissance mission. @@ -251,6 +252,7 @@ ENUMS.MissionTask={ CAP="CAP", CAS="CAS", ESCORT="Escort", + GROUNDESCORT="Ground escort", FIGHTERSWEEP="Fighter Sweep", GROUNDATTACK="Ground Attack", INTERCEPT="Intercept",