From 8823b96b5fc02221f8bec4e73654e835d754aad6 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 17 Mar 2020 16:53:47 +0100 Subject: [PATCH] ops --- Moose Development/Moose/DCS.lua | 24 +++++- Moose Development/Moose/Ops/AirWing.lua | 79 +++++++++++++++---- Moose Development/Moose/Ops/Auftrag.lua | 20 +++-- Moose Development/Moose/Ops/FlightControl.lua | 2 +- Moose Development/Moose/Ops/FlightGroup.lua | 17 ++++ Moose Development/Moose/Ops/Squadron.lua | 17 +++- .../Moose/Wrapper/Identifiable.lua | 1 - Moose Development/Moose/Wrapper/Unit.lua | 54 +++++++++++++ 8 files changed, 188 insertions(+), 26 deletions(-) diff --git a/Moose Development/Moose/DCS.lua b/Moose Development/Moose/DCS.lua index df37c1c50..0c8e87a23 100644 --- a/Moose Development/Moose/DCS.lua +++ b/Moose Development/Moose/DCS.lua @@ -326,9 +326,27 @@ end -- coalition do -- Types --- @type Desc - -- @field #TypeName typeName type name - -- @field #string displayName localized display name - -- @field #table attributes object type attributes + -- @field #number speedMax0 Max speed in meters/second at zero altitude. + -- @field #number massEmpty Empty mass in kg. + -- @field #number tankerType Type of refueling system: 0=boom, 1=probe. + -- @field #number range Range in km(?). + -- @field #table box Bounding box. + -- @field #number Hmax Max height in meters. + -- @field #number Kmax ? + -- @field #number speedMax10K Max speed in meters/second at 10k altitude. + -- @field #number NyMin ? + -- @field #number NyMax ? + -- @field #number fuelMassMax Max fuel mass in kg. + -- @field #number speedMax10K Max speed in meters/second. + -- @field #number massMax Max mass of unit. + -- @field #number RCS ? + -- @field #number life Life points. + -- @field #number VyMax Max vertical velocity in m/s. + -- @field #number Kab ? + -- @field #table attributes Table of attributes. + -- @field #TypeName typeName Type Name. + -- @field #string displayName Localized display name. + -- @field #number category Unit category. --- A distance type -- @type Distance diff --git a/Moose Development/Moose/Ops/AirWing.lua b/Moose Development/Moose/Ops/AirWing.lua index d4f69ea8c..ee2d60ac3 100644 --- a/Moose Development/Moose/Ops/AirWing.lua +++ b/Moose Development/Moose/Ops/AirWing.lua @@ -25,8 +25,9 @@ -- @field Core.Set#SET_ZONE zonesetTANKER Set of TANKER zones. -- @field Core.Set#SET_ZONE zonesetAWACS Set of AWACS zones. -- @field #number nflightsCAP Number of CAP flights constantly in the air. --- @field #number nflightsTANKER Number of TANKER flights constantly in the air. -- @field #number nflightsAWACS Number of AWACS flights constantly in the air. +-- @field #number nflightsTANKERboom Number of TANKER flights with BOOM constantly in the air. +-- @field #number nflightsTANKERprobe Number of TANKER flights with PROBE constantly in the air. -- @field #table pointsCAP Table of CAP points. -- @field #table pointsTANKER Table of Tanker points. -- @field #table pointsAWACS Table of AWACS points. @@ -140,7 +141,8 @@ function AIRWING:New(warehousename, airwingname) -- Defaults: self.nflightsCAP=0 self.nflightsAWACS=0 - self.nflightsTANKER=0 + self.nflightsTANKERboom=0 + self.nflightsTANKERprobe=0 ------------------------ --- Pseudo Functions --- @@ -430,10 +432,12 @@ end --- Set number of TANKER flights constantly in the air. -- @param #AIRWING self --- @param #number n Number of flights. Default 1. +-- @param #number Nboom Number of flights. Default 1. +-- @param #number Nprobe Number of flights. Default 1. -- @return #AIRWING self -function AIRWING:SetNumberTANKER(n) - self.nflightsTANKER=n or 1 +function AIRWING:SetNumberTANKER(Nboom, Nprobe) + self.nflightsTANKERboom=Nboom or 1 + self.nflightsTANKERprobe=Nprobe or 1 return self end @@ -652,6 +656,8 @@ function AIRWING:CheckCAP() missionCAP.patroldata=patrol + patrol.noccupied=patrol.noccupied+1 + self:AddMission(missionCAP) end @@ -664,20 +670,55 @@ end -- @return #AIRWING self function AIRWING:CheckTANKER() - local N=self:CountMissionsInQueue({AUFTRAG.Type.TANKER}) + --local N=self:CountMissionsInQueue({AUFTRAG.Type.TANKER}) + --local N=self:CountAssetsOnMission({AUFTRAG.Type.TANKER}) - for i=1,self.nflightsTANKER-N do + local Nboom=0 + local Nprob=0 + + -- Count tanker mission. + for _,_mission in pairs(self.missionqueue) do + local mission=_mission --Ops.Auftrag#AUFTRAG + + if mission:IsNotOver() and self:CheckMissionType(mission.type, AUFTRAG.Type.TANKER) then + if mission.refuelSystem==0 then + Nboom=Nboom+1 + elseif mission.refuelSystem==1 then + Nprob=Nprob+1 + end + + end + + end + + for i=1,self.nflightsTANKERboom-Nboom do local patrol=self:_GetPatrolData(self.pointsTANKER) - local mission=AUFTRAG:NewTANKER(patrol.coord, patrol.speed, patrol.heading, patrol.leg, patrol.altitude) + local mission=AUFTRAG:NewTANKER(patrol.coord, patrol.speed, patrol.heading, patrol.leg, patrol.altitude, 0) mission.patroldata=patrol + patrol.noccupied=patrol.noccupied+1 + self:AddMission(mission) end + for i=1,self.nflightsTANKERprobe-Nprob do + + local patrol=self:_GetPatrolData(self.pointsTANKER) + + local mission=AUFTRAG:NewTANKER(patrol.coord, patrol.speed, patrol.heading, patrol.leg, patrol.altitude, 1) + + mission.patroldata=patrol + + patrol.noccupied=patrol.noccupied+1 + + self:AddMission(mission) + + end + return self end @@ -696,6 +737,8 @@ function AIRWING:CheckAWACS() mission.patroldata=patrol + patrol.noccupied=patrol.noccupied+1 + self:AddMission(mission) end @@ -717,17 +760,23 @@ function AIRWING:GetTankerForFlight(flightgroup) for _,_tanker in pairs(tankers) do local tanker=_tanker --#AIRWING.SquadronAsset - local tankercoord=tanker.flightgroup.group:GetCoordinate() - local assetcoord=flightgroup.group:GetCoordinate() + -- Check that donor and acceptor use the same refuelling system. + if flightgroup.refueltype and flightgroup.refueltype==tanker.flightgroup.tankertype then - local dist=assetcoord:Get2DDistance(tankercoord) - - table.insert(tankeropt, {tanker=tanker, dist=dist}) + local tankercoord=tanker.flightgroup.group:GetCoordinate() + local assetcoord=flightgroup.group:GetCoordinate() + + local dist=assetcoord:Get2DDistance(tankercoord) + + table.insert(tankeropt, {tanker=tanker, dist=dist}) + end end + -- Sort tankers wrt to distance. table.sort(tankeropt, function(a,b) return a.dist