From 25e58393eaaf495126fc9815f1cd2b21078db246 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 27 Apr 2020 01:48:16 +0200 Subject: [PATCH] Ops --- Moose Development/Moose/Core/Point.lua | 17 ++ Moose Development/Moose/Ops/Auftrag.lua | 6 +- Moose Development/Moose/Ops/FlightGroup.lua | 186 ++++++++++++++++++-- Moose Development/Moose/Wrapper/Marker.lua | 66 ++++++- 4 files changed, 251 insertions(+), 24 deletions(-) diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index 65022dec4..6ffe65e16 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -446,6 +446,23 @@ do -- COORDINATE return gotunits, gotstatics, gotscenery, Units, Statics, Scenery end + + --- Scan/find UNITS within a certain radius around the coordinate using the world.searchObjects() DCS API function. + -- @param #COORDINATE self + -- @param #number radius (Optional) Scan radius in meters. Default 100 m. + -- @return Core.Set#SET_UNIT Set of units. + function COORDINATE:ScanUnits(radius) + + local _,_,_,units=self:ScanObjects(radius, true, false, false) + + local set=SET_UNIT:New() + + for _,unit in pairs(units) do + set:AddUnit(unit) + end + + return set + end --- Calculate the distance from a reference @{#COORDINATE}. -- @param #COORDINATE self diff --git a/Moose Development/Moose/Ops/Auftrag.lua b/Moose Development/Moose/Ops/Auftrag.lua index 6af9cba08..42bf6cf22 100644 --- a/Moose Development/Moose/Ops/Auftrag.lua +++ b/Moose Development/Moose/Ops/Auftrag.lua @@ -852,7 +852,7 @@ function AUFTRAG:NewBOMBING(Target, Altitude) mission.missionAltitude=mission.engageAltitude*0.8 mission.missionFraction=0.5 mission.optionROE=ENUMS.ROE.OpenFire - mission.optionROT=ENUMS.ROT.PassiveDefense + mission.optionROT=ENUMS.ROT.NoReaction -- No reaction is better. -- Evaluate result after 5 min. We might need time until the bombs have dropped and targets have been detroyed. mission.dTevaluate=5*60 @@ -922,7 +922,7 @@ function AUFTRAG:NewBOMBCARPET(Target, Altitude, CarpetLength) mission.missionAltitude=mission.engageAltitude*0.8 mission.missionFraction=0.2 mission.optionROE=ENUMS.ROE.OpenFire - mission.optionROT=ENUMS.ROT.PassiveDefense + mission.optionROT=ENUMS.ROT.NoReaction -- Evaluate result after 5 min. mission.dTevaluate=5*60 @@ -2655,7 +2655,7 @@ function AUFTRAG:UpdateMarker() else - if self.marker.text~=text then + if self.marker:GetText()~=text then self.marker:UpdateText(text) end diff --git a/Moose Development/Moose/Ops/FlightGroup.lua b/Moose Development/Moose/Ops/FlightGroup.lua index a6ebca531..4e36a1262 100644 --- a/Moose Development/Moose/Ops/FlightGroup.lua +++ b/Moose Development/Moose/Ops/FlightGroup.lua @@ -874,17 +874,41 @@ end -- @return #FLIGHTGROUP self function FLIGHTGROUP:SetAirboss(airboss) self.airboss=airboss + return self end --- Set low fuel threshold. Triggers event "FuelLow" and calls event function "OnAfterFuelLow". -- @param #FLIGHTGROUP self -- @param #number threshold Fuel threshold in percent. Default 25 %. --- @param #boolean rtb If true, RTB on fuel low event. -- @return #FLIGHTGROUP self -function FLIGHTGROUP:SetFuelLowThreshold(threshold, rtb) - self.fuellow=false +function FLIGHTGROUP:SetFuelLowThreshold(threshold) self.fuellowthresh=threshold or 25 - self.fuellowrtb=rtb + return self +end + +--- Set if low fuel threshold is reached, flight goes RTB. +-- @param #FLIGHTGROUP self +-- @param #boolean switch If true or nil, flight goes RTB. If false, turn this off. +-- @return #FLIGHTGROUP self +function FLIGHTGROUP:SetFuelLowRTB(switch) + if switch==false then + self.fuellowrtb=false + else + self.fuellowrtb=true + end + return self +end + +--- Set if low fuel threshold is reached, flight tries to refuel at the neares tanker. +-- @param #FLIGHTGROUP self +-- @param #boolean switch If true or nil, flight goes for refuelling. If false, turn this off. +-- @return #FLIGHTGROUP self +function FLIGHTGROUP:SetFuelLowRefuel(switch) + if switch==false then + self.fuellowrefuel=false + else + self.fuellowrefuel=true + end return self end @@ -894,7 +918,6 @@ end -- @param #boolean rtb If true, RTB on fuel critical event. -- @return #FLIGHTGROUP self function FLIGHTGROUP:SetFuelCriticalThreshold(threshold, rtb) - self.fuelcritical=false self.fuelcriticalthresh=threshold or 10 self.fuelcriticalrtb=rtb return self @@ -1563,31 +1586,54 @@ function FLIGHTGROUP:onafterFlightStatus(From, Event, To) local time=timer.getAbsTime() + -- Current position. local position=self:GetCoordinate() + + -- Travelled distance since last check. local ds=self.position:Get3DDistance(position) + + -- Time interval. local dt=time-self.traveltime + + -- Speed. local v=ds/dt + -- Add up travelled distance. self.traveldist=self.traveldist+ds - self.traveltime=time - self.position=position - + + self:I(self.lid..string.format("FF Travelled ds=%.1f km dt=%.1f s ==> v=%.1f knots", self.traveldist/1000, dt, UTILS.MpsToKnots(v))) + local fuelmass=math.huge for _,_element in pairs(self.elements) do local element=_element --#FLIGHTGROUP.Element local fuel=element.unit:GetFuel() or 0 + local df=element.fuelrel-fuel + local fmass=element.fuelmass*fuel + + + local dm=element.fuelmass-fmass + + local dmds=dm/ds + local dmdt=dm/dt if fmass dm/ds=%.1f kg/s dm/dt=%.1f 1/s", element.name, df, dm, dmds, dmdt)) + + element.fuelrel=fuel + element.fuelmass=fmass end -- Log outut. - self:I(self.lid..string.format("FF Distance travelled = %.1f km v=%.1f knots fuel=%d kg", self.traveldist/1000, UTILS.MpsToKnots(v), fuelmass)) - + --self:I(self.lid..string.format("FF Distance travelled = %.1f km v=%.1f knots fuel=%d kg", self.traveldist/1000, UTILS.MpsToKnots(v), fuelmass)) + + -- Update parameters. + self.traveltime=time + self.position=position end --- @@ -1654,6 +1700,15 @@ function FLIGHTGROUP:onafterFlightStatus(From, Event, To) if self:IsAlive() and self.group:IsAirborne(true) then local fuelmin=self:GetFuelMin() + + if fuelmin>=self.fuellowthresh then + self.fuellow=false + end + + if fuelmin>=self.fuelcriticalthresh then + self.fuelcritical=false + end + -- Low fuel? if fuelmin