From 32c9a59ff0ee785938c8b11105be1f4887e08c7c Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 14 Aug 2020 18:09:13 +0200 Subject: [PATCH] Ops --- Moose Development/Moose/Core/Astar.lua | 2 +- Moose Development/Moose/Ops/AirWing.lua | 65 +++++++++++++++++++---- Moose Development/Moose/Ops/Auftrag.lua | 65 ++++++++++++++++------- Moose Development/Moose/Ops/OpsGroup.lua | 11 +++- Moose Development/Moose/Ops/Squadron.lua | 5 +- Moose Development/Moose/Ops/Target.lua | 6 +-- Moose Development/Moose/Wrapper/Group.lua | 26 +++++++++ 7 files changed, 143 insertions(+), 37 deletions(-) diff --git a/Moose Development/Moose/Core/Astar.lua b/Moose Development/Moose/Core/Astar.lua index 984f67df0..435bec5a4 100644 --- a/Moose Development/Moose/Core/Astar.lua +++ b/Moose Development/Moose/Core/Astar.lua @@ -550,7 +550,7 @@ end -- @return #number Distance between the two nodes. function ASTAR.DistRoad(nodeA, nodeB) - local path, dist, gotpath=nodeA.coordinate:GetPathOnRoad(nodeB.coordinate,IncludeEndpoints,Railroad,MarkPath,SmokePath) + local path, dist, gotpath=nodeA.coordinate:GetPathOnRoad(nodeB.coordinate, IncludeEndpoints, Railroad, MarkPath, SmokePath) if gotpath then return dist diff --git a/Moose Development/Moose/Ops/AirWing.lua b/Moose Development/Moose/Ops/AirWing.lua index 0138f78b4..40e65adad 100644 --- a/Moose Development/Moose/Ops/AirWing.lua +++ b/Moose Development/Moose/Ops/AirWing.lua @@ -116,6 +116,7 @@ AIRWING = { squadrons = {}, missionqueue = {}, payloads = {}, + payloadcounter = 0, pointsCAP = {}, pointsTANKER = {}, pointsAWACS = {}, @@ -132,6 +133,7 @@ AIRWING = { --- Payload data. -- @type AIRWING.Payload +-- @field #number uid Unique payload ID. -- @field #string unitname Name of the unit this pylon was extracted from. -- @field #string aircrafttype Type of aircraft, which can use this payload. -- @field #table capabilities Mission types and performances for which this payload can be used. @@ -309,7 +311,8 @@ function AIRWING:NewPayload(Unit, Npayloads, MissionTypes, Performance) end -- Create payload. - local payload={} --#AIRWING.Payload + local payload={} --#AIRWING.Payload + payload.uid=self.payloadcounter payload.unitname=Unit:GetName() payload.aircrafttype=Unit:GetTypeName() payload.pylons=Unit:GetTemplatePayload() @@ -343,6 +346,9 @@ function AIRWING:NewPayload(Unit, Npayloads, MissionTypes, Performance) -- Add payload table.insert(self.payloads, payload) + -- Increase counter + self.payloadcounter=self.payloadcounter+1 + return payload end @@ -385,8 +391,9 @@ end -- @param #AIRWING self -- @param #string UnitType The type of the unit. -- @param #string MissionType The mission type. +-- @param #table Payloads Specific payloads only to be considered. -- @return #AIRWING.Payload Payload table or *nil*. -function AIRWING:FetchPayloadFromStock(UnitType, MissionType) +function AIRWING:FetchPayloadFromStock(UnitType, MissionType, Payloads) -- Quick check if we have any payloads. if not self.payloads or #self.payloads==0 then @@ -427,11 +434,25 @@ function AIRWING:FetchPayloadFromStock(UnitType, MissionType) end end + local function _checkPayloads(payload) + if Payloads then + for _,Payload in pairs(Payloads) do + if Payload.uid==payload.id then + return true + end + end + else + -- Payload was not specified. + return true + end + return false + end + -- Pre-selection: filter out only those payloads that are valid for the airframe and mission type and are available. local payloads={} for _,_payload in pairs(self.payloads) do local payload=_payload --#AIRWING.Payload - if payload.aircrafttype==UnitType and self:CheckMissionCapability(MissionType, payload.capabilities) and payload.navail>0 then + if payload.aircrafttype==UnitType and self:CheckMissionCapability(MissionType, payload.capabilities) and payload.navail>0 and _checkPayloads(payload) then table.insert(payloads, payload) end end @@ -1119,6 +1140,15 @@ function AIRWING:_GetNextMission() end table.sort(self.missionqueue, _sort) + -- Look for first mission that is SCHEDULED. + local importance=math.huge + for _,_mission in pairs(self.missionqueue) do + local mission=_mission --Ops.Auftrag#AUFTRAG + if mission.importance