From 94f206af68df41e5f3b0d1aa40421dbf3372e587 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Jan 2021 13:49:35 +0100 Subject: [PATCH] AIRBASE - Added black and white parking spot lists. --- Moose Development/Moose/Core/Spawn.lua | 40 +++++---- .../Moose/Functional/Warehouse.lua | 6 +- Moose Development/Moose/Wrapper/Airbase.lua | 88 ++++++++++++++++++- 3 files changed, 113 insertions(+), 21 deletions(-) diff --git a/Moose Development/Moose/Core/Spawn.lua b/Moose Development/Moose/Core/Spawn.lua index ebcfb1f99..89d6d681c 100644 --- a/Moose Development/Moose/Core/Spawn.lua +++ b/Moose Development/Moose/Core/Spawn.lua @@ -1718,27 +1718,29 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT self:T(string.format("Group %s is spawned on farp/ship/runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName())) nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype, true) spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype, true) + --[[ elseif Parkingdata~=nil then -- Parking data explicitly set by user as input parameter. nfree=#Parkingdata spots=Parkingdata + ]] else if ishelo then if termtype==nil then -- Helo is spawned. Try exclusive helo spots first. self:T(string.format("Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterOnly)) - spots=SpawnAirbase:FindFreeParkingSpotForAircraft(TemplateGroup, AIRBASE.TerminalType.HelicopterOnly, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits) + spots=SpawnAirbase:FindFreeParkingSpotForAircraft(TemplateGroup, AIRBASE.TerminalType.HelicopterOnly, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata) nfree=#spots if nfree0 then + for _,terminalID in pairs(self.parkingBlacklist or {}) do + if terminalID==TerminalID then + -- This is a invalid spot. + return false + end + end + end + + + -- Check if a whitelist was defined. + if self.parkingWhitelist and #self.parkingWhitelist>0 then + for _,terminalID in pairs(self.parkingWhitelist or {}) do + if terminalID==TerminalID then + -- This is a valid spot. + return true + end + end + -- No match ==> invalid spot + return false + end + + -- Neither black nor white lists were defined or spot is not in black list. + return true +end + --- Helper function to check for the correct terminal type including "artificial" ones. -- @param #number Term_Type Termial type from getParking routine. -- @param #AIRBASE.TerminalType termtype Terminal type from AIRBASE.TerminalType enumerator.