This commit is contained in:
Frank
2020-03-22 00:33:15 +01:00
parent c2257729d5
commit 1ae2171885
2 changed files with 58 additions and 66 deletions
+13
View File
@@ -380,6 +380,7 @@ function AUFTRAG:NewORBIT(Coordinate, Speed, Heading, Leg, Altitude)
auftrag.missionAltitude=auftrag.orbitCoord.y*0.9 auftrag.missionAltitude=auftrag.orbitCoord.y*0.9
auftrag.missionFraction=0.9 auftrag.missionFraction=0.9
auftrag.optionROE=ENUMS.ROE.ReturnFire auftrag.optionROE=ENUMS.ROE.ReturnFire
auftrag.optionROT=ENUMS.ROT.PassiveDefense
auftrag.DCStask=auftrag:GetDCSMissionTask() auftrag.DCStask=auftrag:GetDCSMissionTask()
@@ -402,6 +403,9 @@ function AUFTRAG:NewPATROL(OrbitCoordinate, OrbitSpeed, Heading, Leg, Altitude)
-- Mission type PATROL. -- Mission type PATROL.
mission.type=AUFTRAG.Type.PATROL mission.type=AUFTRAG.Type.PATROL
mission.missionTask=ENUMS.MissionTask.INTERCEPT
mission.optionROT=ENUMS.ROT.PassiveDefense
return mission return mission
end end
@@ -426,6 +430,7 @@ function AUFTRAG:NewTANKER(OrbitCoordinate, OrbitSpeed, Heading, Leg, Altitude,
mission.missionTask=ENUMS.MissionTask.REFUELING mission.missionTask=ENUMS.MissionTask.REFUELING
mission.optionROE=ENUMS.ROE.WeaponHold mission.optionROE=ENUMS.ROE.WeaponHold
mission.optionROT=ENUMS.ROT.PassiveDefense
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -450,6 +455,7 @@ function AUFTRAG:NewAWACS(OrbitCoordinate, OrbitSpeed, Heading, Leg, Altitude)
mission.missionTask=ENUMS.MissionTask.AWACS mission.missionTask=ENUMS.MissionTask.AWACS
mission.optionROE=ENUMS.ROE.WeaponHold mission.optionROE=ENUMS.ROE.WeaponHold
mission.optionROT=ENUMS.ROT.PassiveDefense
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -471,6 +477,7 @@ function AUFTRAG:NewINTERCEPT(Target)
mission.missionTask=ENUMS.MissionTask.INTERCEPT mission.missionTask=ENUMS.MissionTask.INTERCEPT
mission.missionFraction=0.1 mission.missionFraction=0.1
mission.optionROE=ENUMS.ROE.OpenFire mission.optionROE=ENUMS.ROE.OpenFire
mission.optionROT=ENUMS.ROT.EvadeFire
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -505,6 +512,7 @@ function AUFTRAG:NewCAP(OrbitCoordinate, OrbitSpeed, Heading, Leg, ZoneCAP, Targ
mission.missionTask=ENUMS.MissionTask.CAP mission.missionTask=ENUMS.MissionTask.CAP
mission.optionROE=ENUMS.ROE.WeaponFree mission.optionROE=ENUMS.ROE.WeaponFree
mission.optionROT=ENUMS.ROT.EvadeFire
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -539,6 +547,7 @@ function AUFTRAG:NewCAS(OrbitCoordinate, OrbitSpeed, Heading, Leg, ZoneCAS, Targ
mission.missionTask=ENUMS.MissionTask.CAS mission.missionTask=ENUMS.MissionTask.CAS
mission.optionROE=ENUMS.ROE.WeaponFree mission.optionROE=ENUMS.ROE.WeaponFree
mission.optionROT=ENUMS.ROT.EvadeFire
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -568,6 +577,7 @@ function AUFTRAG:NewBAI(Target)
mission.missionAltitude=nil mission.missionAltitude=nil
mission.missionFraction=0.75 mission.missionFraction=0.75
mission.optionROE=ENUMS.ROE.OpenFire mission.optionROE=ENUMS.ROE.OpenFire
mission.optionROT=ENUMS.ROT.PassiveDefense
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -592,6 +602,7 @@ function AUFTRAG:NewSTRIKE(TargetCoordinate, Altitude)
mission.missionAltitude=mission.engageAltitude mission.missionAltitude=mission.engageAltitude
mission.missionFraction=0.75 mission.missionFraction=0.75
mission.optionROE=ENUMS.ROE.OpenFire mission.optionROE=ENUMS.ROE.OpenFire
mission.optionROT=ENUMS.ROT.PassiveDefense
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -618,6 +629,7 @@ function AUFTRAG:NewBOMBING(TargetCoordinate, Altitude)
mission.missionAltitude=mission.engageAltitude*0.8 mission.missionAltitude=mission.engageAltitude*0.8
mission.missionFraction=0.3 mission.missionFraction=0.3
mission.optionROE=ENUMS.ROE.OpenFire mission.optionROE=ENUMS.ROE.OpenFire
mission.optionROT=ENUMS.ROT.PassiveDefense
-- Get DCS task. -- Get DCS task.
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
@@ -647,6 +659,7 @@ function AUFTRAG:NewESCORT(EscortGroup, OffsetVector, EngageMaxDistance, TargetT
-- TODO: what's the best ROE here? -- TODO: what's the best ROE here?
mission.optionROE=ENUMS.ROE.OpenFire mission.optionROE=ENUMS.ROE.OpenFire
mission.optionROT=ENUMS.ROT.PassiveDefense
mission.DCStask=mission:GetDCSMissionTask() mission.DCStask=mission:GetDCSMissionTask()
+45 -66
View File
@@ -893,6 +893,13 @@ function FLIGHTGROUP:GetName()
return self.group:GetName() return self.group:GetName()
end end
--- Get current coordinate of the group.
-- @param #FLIGHTGROUP self
-- @return Core.Point#COORDINATE The coordinate (of the first unit) of the group.
function FLIGHTGROUP:GetCoordinate()
return self.group:GetCoordinate()
end
--- Get waypoint. --- Get waypoint.
-- @param #FLIGHTGROUP self -- @param #FLIGHTGROUP self
-- @param #number indx Waypoint index. -- @param #number indx Waypoint index.
@@ -1171,6 +1178,17 @@ function FLIGHTGROUP:ClearTasks()
return self return self
end end
--- Clear the group for landing when it is holding.
-- @param #FLIGHTGROUP self
-- @return #FLIGHTGROUP self
function FLIGHTGROUP:ClearToLand()
if self:IsHolding() then
self:I(self.lid..string.format("Clear to land ==> setting holding flag to 1 (true)"))
self.flaghold:Set(1)
end
return self
end
--- Route group along waypoints. Enroute tasks are also applied. --- Route group along waypoints. Enroute tasks are also applied.
-- @param #FLIGHTGROUP self -- @param #FLIGHTGROUP self
@@ -1211,9 +1229,9 @@ function FLIGHTGROUP:Route(waypoints)
return self return self
end end
--- Route group along waypoints. Enroute tasks are also applied. --- Get min fuel of group. This returns the relative fuel amount of the element lowest fuel in the group.
-- @param #FLIGHTGROUP self -- @param #FLIGHTGROUP self
-- @return #number Fuel in percent. -- @return #number Relative fuel in percent.
function FLIGHTGROUP:GetFuelMin() function FLIGHTGROUP:GetFuelMin()
local fuelmin=math.huge local fuelmin=math.huge
@@ -2202,7 +2220,7 @@ function FLIGHTGROUP:onafterFlightTakeoff(From, Event, To, airbase)
end end
-- Trigger airborne event. -- Trigger airborne event.
self:__FlightAirborne(1, airbase) --self:__FlightAirborne(-1, airbase)
end end
@@ -2213,7 +2231,7 @@ end
-- @param #string To To state. -- @param #string To To state.
-- @param Wrapper.Airbase#AIRBASE airbase The airbase the flight landed. -- @param Wrapper.Airbase#AIRBASE airbase The airbase the flight landed.
function FLIGHTGROUP:onafterFlightAirborne(From, Event, To, airbase) function FLIGHTGROUP:onafterFlightAirborne(From, Event, To, airbase)
self:T(self.lid..string.format("Flight airborne at %s.", airbase and airbase:GetName() or "unknown airbase")) self:I(self.lid..string.format("Flight airborne at %s.", airbase and airbase:GetName() or "unknown airbase"))
end end
--- On after "FlightLanding" event. --- On after "FlightLanding" event.
@@ -2381,28 +2399,6 @@ function FLIGHTGROUP:onafterUpdateRoute(From, Event, To, n)
for i=n, #self.waypoints do for i=n, #self.waypoints do
table.insert(wp, self.waypoints[i]) table.insert(wp, self.waypoints[i])
end end
--[[
if self.destbase and #wp>0 and _DATABASE:GetFlightControl(self.destbase:GetName()) then
-- Task to hold.
local TaskOverhead=self.group:TaskFunction("FLIGHTGROUP._DestinationOverhead", self, self.destbase)
-- Random overhead coordinate at destination.
local coordoverhead=self.destbase:GetZone():GetRandomCoordinate():SetAltitude(UTILS.FeetToMeters(6000))
-- Add overhead waypoint.
local wpoverhead=coordoverhead:WaypointAir(nil, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.FlyoverPoint, 500, false, nil, {TaskOverhead}, "Destination Overhead")
-- Debug info.
self:T(self.lid..string.format("Adding overhead waypoint as #%d", #wp))
-- Add overhead to waypoints.
table.insert(wp, #wp, wpoverhead)
end
]]
-- Debug info. -- Debug info.
local hb=self.homebase and self.homebase:GetName() or "unknown" local hb=self.homebase and self.homebase:GetName() or "unknown"
@@ -2511,7 +2507,9 @@ function FLIGHTGROUP:onafterPassingWaypoint(From, Event, To, n, N)
-- Check if all tasks/mission are done? If so, RTB or WAIT. -- Check if all tasks/mission are done? If so, RTB or WAIT.
-- Note, we delay it for a second to let the OnAfterPassingwaypoint function to be executed in case someone wants to add another waypoint there. -- Note, we delay it for a second to let the OnAfterPassingwaypoint function to be executed in case someone wants to add another waypoint there.
self:_CheckFlightDone(1) if #taskswp==0 then
self:_CheckFlightDone(1)
end
end end
@@ -2732,8 +2730,8 @@ function FLIGHTGROUP:onafterRTB(From, Event, To, airbase, SpeedTo, SpeedHold, Sp
-- Waypoints from current position to holding point. -- Waypoints from current position to holding point.
local wp={} local wp={}
wp[#wp+1]=c0:WaypointAir(nil, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.FlyoverPoint, UTILS.KnotsToKmph(SpeedTo), true , nil, {}, "Current Pos") wp[#wp+1]=c0:WaypointAir(nil, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, UTILS.KnotsToKmph(SpeedTo), true , nil, {}, "Current Pos")
wp[#wp+1]=p0:WaypointAir(nil, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.FlyoverPoint, UTILS.KnotsToKmph(SpeedTo), true , nil, {TaskArrived, TaskHold}, "Holding Point") wp[#wp+1]=p0:WaypointAir(nil, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, UTILS.KnotsToKmph(SpeedTo), true , nil, {TaskArrived, TaskHold}, "Holding Point")
-- Approach point: 10 NN in direction of runway. -- Approach point: 10 NN in direction of runway.
local papp=airbase:GetCoordinate():Translate(x1, runway.heading-180):SetAltitude(h1) local papp=airbase:GetCoordinate():Translate(x1, runway.heading-180):SetAltitude(h1)
@@ -3522,12 +3520,17 @@ function FLIGHTGROUP:onafterUnpauseMission(From, Event, To)
self:I(self.lid..string.format("Unpausing mission")) self:I(self.lid..string.format("Unpausing mission"))
local mission=self:GetMissionByID(self.missionpaused.auftragsnummer) if self.missionpaused then
self:MissionStart(mission) local mission=self:GetMissionByID(self.missionpaused.auftragsnummer)
self:MissionStart(mission)
self.missionpaused=nil
else
self:E(self.lid.."ERROR: No mission to unpause!")
end
self.missionpaused=nil
end end
@@ -3711,7 +3714,7 @@ end
-- @param Wrapper.Group#GROUP group Group object. -- @param Wrapper.Group#GROUP group Group object.
-- @param #FLIGHTGROUP flightgroup Flight group object. -- @param #FLIGHTGROUP flightgroup Flight group object.
function FLIGHTGROUP._ReachedHolding(group, flightgroup) function FLIGHTGROUP._ReachedHolding(group, flightgroup)
flightgroup:T(flightgroup.lid..string.format("Group reached holding point")) flightgroup:I(flightgroup.lid..string.format("Group reached holding point"))
-- Trigger Holding event. -- Trigger Holding event.
flightgroup:__Holding(-1) flightgroup:__Holding(-1)
@@ -3727,18 +3730,6 @@ function FLIGHTGROUP._FinishedRefuelling(group, flightgroup)
flightgroup:__Refueled(-1) flightgroup:__Refueled(-1)
end end
--- Update route of group, e.g after new waypoints and/or waypoint tasks have been added.
-- @param Wrapper.Group#GROUP group The Moose group object.
-- @param #FLIGHTGROUP flightgroup The flight group object.
-- @param Wrapper.Airbase#AIRBASE destination Destination airbase
function FLIGHTGROUP._DestinationOverhead(group, flightgroup, destination)
-- Tell the flight to hold.
-- WARNING: This needs to be delayed or we get a CTD!
flightgroup:__RTB(-1, destination)
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Misc functions -- Misc functions
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -3773,8 +3764,8 @@ function FLIGHTGROUP:_InitGroup()
self.ceiling=self.descriptors.Hmax self.ceiling=self.descriptors.Hmax
_,self.tankertype=unit:IsTanker() self.tankertype=select(2, unit:IsTanker())
_,self.refueltype=unit:IsRefuelable() self.refueltype=select(2, unit:IsRefuelable())
self.ai=not self:_IsHuman(self.group) self.ai=not self:_IsHuman(self.group)
@@ -3853,7 +3844,7 @@ function FLIGHTGROUP:AddElementByName(unitname)
local text=string.format("Adding element %s: status=%s, skill=%s, modex=%s, fuelmass=%.1f, category=%d, categoryname=%s, callsign=%s, ai=%s", local text=string.format("Adding element %s: status=%s, skill=%s, modex=%s, fuelmass=%.1f, category=%d, categoryname=%s, callsign=%s, ai=%s",
element.name, element.status, element.skill, element.modex, element.fuelmass, element.category, element.categoryname, element.callsign, tostring(element.ai)) element.name, element.status, element.skill, element.modex, element.fuelmass, element.category, element.categoryname, element.callsign, tostring(element.ai))
self:T(self.lid..text) self:I(self.lid..text)
-- Add element to table. -- Add element to table.
table.insert(self.elements, element) table.insert(self.elements, element)
@@ -4641,7 +4632,7 @@ function FLIGHTGROUP:_UpdateStatus(element, newstatus, airbase)
--- ---
if self:_AllSimilarStatus(newstatus) then if self:_AllSimilarStatus(newstatus) then
self:__FlightSpawned(0.5) self:__FlightSpawned(-0.5)
end end
elseif newstatus==FLIGHTGROUP.ElementStatus.PARKING then elseif newstatus==FLIGHTGROUP.ElementStatus.PARKING then
@@ -4650,7 +4641,7 @@ function FLIGHTGROUP:_UpdateStatus(element, newstatus, airbase)
--- ---
if self:_AllSimilarStatus(newstatus) then if self:_AllSimilarStatus(newstatus) then
self:__FlightParking(0.5) self:__FlightParking(-0.5)
end end
elseif newstatus==FLIGHTGROUP.ElementStatus.ENGINEON then elseif newstatus==FLIGHTGROUP.ElementStatus.ENGINEON then
@@ -4666,7 +4657,7 @@ function FLIGHTGROUP:_UpdateStatus(element, newstatus, airbase)
--- ---
if self:_AllSimilarStatus(newstatus) then if self:_AllSimilarStatus(newstatus) then
self:__FlightTaxiing(0.5) self:__FlightTaxiing(-0.5)
end end
elseif newstatus==FLIGHTGROUP.ElementStatus.TAKEOFF then elseif newstatus==FLIGHTGROUP.ElementStatus.TAKEOFF then
@@ -4676,7 +4667,7 @@ function FLIGHTGROUP:_UpdateStatus(element, newstatus, airbase)
if self:_AllSimilarStatus(newstatus) then if self:_AllSimilarStatus(newstatus) then
-- Trigger takeoff event. Also triggers airborne event. -- Trigger takeoff event. Also triggers airborne event.
self:__FlightTakeoff(0.5, airbase) self:__FlightTakeoff(-0.5, airbase)
end end
elseif newstatus==FLIGHTGROUP.ElementStatus.AIRBORNE then elseif newstatus==FLIGHTGROUP.ElementStatus.AIRBORNE then
@@ -4685,19 +4676,7 @@ function FLIGHTGROUP:_UpdateStatus(element, newstatus, airbase)
--- ---
if self:_AllSimilarStatus(newstatus) then if self:_AllSimilarStatus(newstatus) then
self:__FlightAirborne(0.5) self:__FlightAirborne(-0.5)
--[[
if self:IsTaxiing() then
self:FlightAirborne()
elseif self:IsParking() then
--self:FlightTaxiing()
self:FlightAirborne()
elseif self:IsSpawned() then
--self:FlightParking()
--self:FlightTaxiing()
self:FlightAirborne()
end
]]
end end
elseif newstatus==FLIGHTGROUP.ElementStatus.LANDED then elseif newstatus==FLIGHTGROUP.ElementStatus.LANDED then