diff --git a/Moose Development/Moose/Ops/Auftrag.lua b/Moose Development/Moose/Ops/Auftrag.lua index ad5002038..a8cf8dc54 100644 --- a/Moose Development/Moose/Ops/Auftrag.lua +++ b/Moose Development/Moose/Ops/Auftrag.lua @@ -676,7 +676,7 @@ AUFTRAG.Category={ --- AUFTRAG class version. -- @field #string version -AUFTRAG.version="1.4.1" +AUFTRAG.version="1.4.2" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list @@ -1366,7 +1366,7 @@ end --- **[AIR]** Create a AWACS mission. -- @param #AUFTRAG self --- @param Core.Point#COORDINATE Coordinate Where to orbit. Altitude is also taken from the coordinate. +-- @param Core.Point#COORDINATE Coordinate Where to orbit. Altitude is also taken from the coordinate. Can also be a UNIT object, *e.g.* a carrier. -- @param #number Altitude (Optional) Orbit altitude in feet. Default is y component of `Coordinate`. -- @param #number Speed (Optional) Orbit speed in knots. Default 350 kts. -- @param #number Heading (Optional) Heading of race-track pattern in degrees. Default 270 (East to West). @@ -1375,7 +1375,20 @@ end function AUFTRAG:NewAWACS(Coordinate, Altitude, Speed, Heading, Leg) -- Create ORBIT first. - local mission=AUFTRAG:NewORBIT_RACETRACK(Coordinate, Altitude, Speed, Heading, Leg) + local mission=nil --Ops.Auftrag#AUFTRAG + + if BASE:IsInstanceOf("COORDINATE") then + -- Racetrack at a given coordinate + mission=AUFTRAG:NewORBIT_RACETRACK(Coordinate, Altitude, Speed, Heading, Leg) + elseif BASE:IsInstanceOf("UNIT") then + -- Racetrack wrt a given (moving) unit (e.g. a carrier) + local OffsetVec2={r=6, phi=180} + mission=AUFTRAG:NewORBIT_GROUP(Coordinate, Altitude, Speed, Leg, Heading, OffsetVec2) + else + -- Error! + BASE:E("ERROR in AUFTRAG:NewAWACS: You must pass a COORDINATE or UNIT object!") + return nil + end -- Mission type AWACS. mission.type=AUFTRAG.Type.AWACS @@ -1394,7 +1407,51 @@ function AUFTRAG:NewAWACS(Coordinate, Altitude, Speed, Heading, Leg) return mission end +--- **[AIRPANE]** Create a RECOVERY TANKER mission. +-- @param #AUFTRAG self +-- @param Wrapper.Unit#UNIT Carrier The carrier unit. +-- @param #number Altitude (Optional) Orbit altitude in feet. Default is 6,000 ft. +-- @param #number Speed (Optional) Orbit speed in knots. Default 250 KIAS. +-- @param #number Leg (Optional) Length of race-track in NM. Default 14 NM. +-- @param #number RelHeading (Optional) Relative heading [0, 360) of race-track pattern in degrees wrt heading of the carrier. Default is heading of the carrier. +-- @param #number OffsetDist (Optional) Relative distance of the first race-track point wrt to the carrier. Default 6 NM. +-- @param #number OffsetAngle (Optional) Relative angle of the first race-track point wrt. to the carrier. Default 180 (behind the boat). +-- @param #number UpdateDistance (Optional) Threshold distance in NM before orbit pattern is updated. Default 5 NM. +-- @return #AUFTRAG self +function AUFTRAG:NewRECOVERYTANKER(Carrier, Altitude, Speed, Leg, RelHeading, OffsetDist, OffsetAngle, UpdateDistance) + + -- Six NM astern. + local OffsetVec2={r=OffsetDist or 6, phi=OffsetAngle or 180} + + -- Default leg. + Leg=Leg or 14 + + -- Default Speed. + Speed=Speed or 250 + + local Heading=nil + if RelHeading then + Heading=-math.abs(RelHeading) + end + + -- Create orbit mission. + local mission=AUFTRAG:NewORBIT_GROUP(Carrier, Altitude, Speed, Leg, Heading, OffsetVec2, UpdateDistance) + -- Set the type. + mission.type=AUFTRAG.Type.RECOVERYTANKER + + -- Mission options: + mission.missionTask=ENUMS.MissionTask.REFUELING + mission.missionFraction=0.9 + mission.optionROE=ENUMS.ROE.WeaponHold + mission.optionROT=ENUMS.ROT.NoReaction + + mission.categories={AUFTRAG.Category.AIRPLANE} + + mission.DCStask=mission:GetDCSMissionTask() + + return mission +end --- **[AIR]** Create an INTERCEPT mission. -- @param #AUFTRAG self @@ -2049,53 +2106,6 @@ function AUFTRAG:NewRESCUEHELO(Carrier) return mission end ---- **[AIRPANE]** Create a RECOVERY TANKER mission. --- @param #AUFTRAG self --- @param Wrapper.Unit#UNIT Carrier The carrier unit. --- @param #number Altitude (Optional) Orbit altitude in feet. Default is 6,000 ft. --- @param #number Speed (Optional) Orbit speed in knots. Default 250 KIAS. --- @param #number Leg (Optional) Length of race-track in NM. Default 14 NM. --- @param #number RelHeading (Optional) Relative heading [0, 360) of race-track pattern in degrees wrt heading of the carrier. Default is heading of the carrier. --- @param #number OffsetDist (Optional) Relative distance of the first race-track point wrt to the carrier. Default 6 NM. --- @param #number OffsetAngle (Optional) Relative angle of the first race-track point wrt. to the carrier. Default 180 (behind the boat). --- @param #number UpdateDistance (Optional) Threshold distance in NM before orbit pattern is updated. Default 5 NM. --- @return #AUFTRAG self -function AUFTRAG:NewRECOVERYTANKER(Carrier, Altitude, Speed, Leg, RelHeading, OffsetDist, OffsetAngle, UpdateDistance) - - -- Six NM astern. - local OffsetVec2={r=OffsetDist or 6, phi=OffsetAngle or 180} - - -- Default leg. - Leg=Leg or 14 - - -- Default Speed. - Speed=Speed or 250 - - local Heading=nil - if RelHeading then - Heading=-math.abs(RelHeading) - end - - -- Create orbit mission. - local mission=AUFTRAG:NewORBIT_GROUP(Carrier, Altitude, Speed, Leg, Heading, OffsetVec2, UpdateDistance) - - -- Set the type. - mission.type=AUFTRAG.Type.RECOVERYTANKER - - -- Mission options: - mission.missionTask=ENUMS.MissionTask.REFUELING - mission.missionFraction=0.9 - mission.optionROE=ENUMS.ROE.WeaponHold - mission.optionROT=ENUMS.ROT.NoReaction - - mission.categories={AUFTRAG.Category.AIRPLANE} - - mission.DCStask=mission:GetDCSMissionTask() - - return mission -end - - --- **[AIR ROTARY, GROUND]** Create a TROOP TRANSPORT mission. -- @param #AUFTRAG self -- @param Core.Set#SET_GROUP TransportGroupSet The set group(s) to be transported. diff --git a/Moose Development/Moose/Ops/FlightGroup.lua b/Moose Development/Moose/Ops/FlightGroup.lua index 916739b66..193cae10b 100644 --- a/Moose Development/Moose/Ops/FlightGroup.lua +++ b/Moose Development/Moose/Ops/FlightGroup.lua @@ -217,7 +217,7 @@ FLIGHTGROUP.Players={} --- FLIGHTGROUP class version. -- @field #string version -FLIGHTGROUP.version="1.0.3" +FLIGHTGROUP.version="1.0.4" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list @@ -1354,8 +1354,10 @@ function FLIGHTGROUP:Status() -- If mission, check if DCS task needs to be updated. if mission and mission.updateDCSTask then + local mtype=mission:GetType() + -- Orbit missions might need updates. - if (mission:GetType()==AUFTRAG.Type.ORBIT or mission:GetType()==AUFTRAG.Type.RECOVERYTANKER or mission:GetType()==AUFTRAG.Type.CAP) and mission.orbitVec2 then + if (mtype==AUFTRAG.Type.ORBIT or mtype==AUFTRAG.Type.RECOVERYTANKER or mtype==AUFTRAG.Type.CAP or mtype==AUFTRAG.Type.AWACS) and mission.orbitVec2 then -- Get 2D vector of orbit target. local vec2=mission:GetTargetVec2()