--- **Wrapper** -- AIRBASE is a wrapper class to handle the DCS Airbase objects. -- -- ==== -- -- ### Author: **Sven Van de Velde (FlightControl)** -- -- ### Contributions: -- -- === -- -- @module Airbase --- @type AIRBASE -- @extends Wrapper.Positionable#POSITIONABLE --- # AIRBASE class, extends @{Positionable#POSITIONABLE} -- -- AIRBASE is a wrapper class to handle the DCS Airbase objects: -- -- * Support all DCS Airbase APIs. -- * Enhance with Airbase specific APIs not in the DCS Airbase API set. -- -- ## AIRBASE reference methods -- -- For each DCS Airbase object alive within a running mission, a AIRBASE wrapper object (instance) will be created within the _@{DATABASE} object. -- This is done at the beginning of the mission (when the mission starts). -- -- The AIRBASE class **does not contain a :New()** method, rather it provides **:Find()** methods to retrieve the object reference -- using the DCS Airbase or the DCS AirbaseName. -- -- Another thing to know is that AIRBASE objects do not "contain" the DCS Airbase object. -- The AIRBASE methods will reference the DCS Airbase object by name when it is needed during API execution. -- If the DCS Airbase object does not exist or is nil, the AIRBASE methods will return nil and log an exception in the DCS.log file. -- -- The AIRBASE class provides the following functions to retrieve quickly the relevant AIRBASE instance: -- -- * @{#AIRBASE.Find}(): Find a AIRBASE instance from the _DATABASE object using a DCS Airbase object. -- * @{#AIRBASE.FindByName}(): Find a AIRBASE instance from the _DATABASE object using a DCS Airbase name. -- -- IMPORTANT: ONE SHOULD NEVER SANATIZE these AIRBASE OBJECT REFERENCES! (make the AIRBASE object references nil). -- -- ## DCS Airbase APIs -- -- The DCS Airbase APIs are used extensively within MOOSE. The AIRBASE class has for each DCS Airbase API a corresponding method. -- To be able to distinguish easily in your code the difference between a AIRBASE API call and a DCS Airbase API call, -- the first letter of the method is also capitalized. So, by example, the DCS Airbase method @{DCSWrapper.Airbase#Airbase.getName}() -- is implemented in the AIRBASE class as @{#AIRBASE.GetName}(). -- -- @field #AIRBASE AIRBASE AIRBASE = { ClassName="AIRBASE", CategoryName = { [Airbase.Category.AIRDROME] = "Airdrome", [Airbase.Category.HELIPAD] = "Helipad", [Airbase.Category.SHIP] = "Ship", }, } --- @field Caucasus AIRBASE.Caucasus = { ["Gelendzhik"] = "Gelendzhik", ["Krasnodar_Pashkovsky"] = "Krasnodar-Pashkovsky", ["Sukhumi_Babushara"] = "Sukhumi-Babushara", ["Gudauta"] = "Gudauta", ["Batumi"] = "Batumi", ["Senaki_Kolkhi"] = "Senaki-Kolkhi", ["Kobuleti"] = "Kobuleti", ["Kutaisi"] = "Kutaisi", ["Tbilisi_Lochini"] = "Tbilisi-Lochini", ["Soganlug"] = "Soganlug", ["Vaziani"] = "Vaziani", ["Anapa_Vityazevo"] = "Anapa-Vityazevo", ["Krasnodar_Center"] = "Krasnodar-Center", ["Novorossiysk"] = "Novorossiysk", ["Krymsk"] = "Krymsk", ["Maykop_Khanskaya"] = "Maykop-Khanskaya", ["Sochi_Adler"] = "Sochi-Adler", ["Mineralnye_Vody"] = "Mineralnye Vody", ["Nalchik"] = "Nalchik", ["Mozdok"] = "Mozdok", ["Beslan"] = "Beslan", } -- Registration. --- Create a new AIRBASE from DCSAirbase. -- @param #AIRBASE self -- @param #string AirbaseName The name of the airbase. -- @return Wrapper.Airbase#AIRBASE function AIRBASE:Register( AirbaseName ) local self = BASE:Inherit( self, POSITIONABLE:New( AirbaseName ) ) self.AirbaseName = AirbaseName return self end -- Reference methods. --- Finds a AIRBASE from the _DATABASE using a DCSAirbase object. -- @param #AIRBASE self -- @param Dcs.DCSWrapper.Airbase#Airbase DCSAirbase An existing DCS Airbase object reference. -- @return Wrapper.Airbase#AIRBASE self function AIRBASE:Find( DCSAirbase ) local AirbaseName = DCSAirbase:getName() local AirbaseFound = _DATABASE:FindAirbase( AirbaseName ) return AirbaseFound end --- Find a AIRBASE in the _DATABASE using the name of an existing DCS Airbase. -- @param #AIRBASE self -- @param #string AirbaseName The Airbase Name. -- @return Wrapper.Airbase#AIRBASE self function AIRBASE:FindByName( AirbaseName ) local AirbaseFound = _DATABASE:FindAirbase( AirbaseName ) return AirbaseFound end function AIRBASE:GetDCSObject() local DCSAirbase = Airbase.getByName( self.AirbaseName ) if DCSAirbase then return DCSAirbase end return nil end