mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
97 lines
2.8 KiB
Lua
97 lines
2.8 KiB
Lua
--- **Wrapper** -- SCENERY models scenery within the DCS simulator.
|
|
--
|
|
-- ===
|
|
--
|
|
-- ### Author: **FlightControl**
|
|
--
|
|
-- ### Contributions:
|
|
--
|
|
-- ===
|
|
--
|
|
-- @module Wrapper.Scenery
|
|
-- @image Wrapper_Scenery.JPG
|
|
|
|
|
|
|
|
--- @type SCENERY
|
|
-- @extends Wrapper.Positionable#POSITIONABLE
|
|
|
|
|
|
--- Wrapper class to handle Scenery objects that are defined on the map.
|
|
--
|
|
-- The @{Wrapper.Scenery#SCENERY} class is a wrapper class to handle the DCS Scenery objects:
|
|
--
|
|
-- * Wraps the DCS Scenery objects.
|
|
-- * Support all DCS Scenery APIs.
|
|
-- * Enhance with Scenery specific APIs not in the DCS API set.
|
|
--
|
|
-- @field #SCENERY
|
|
SCENERY = {
|
|
ClassName = "SCENERY",
|
|
}
|
|
|
|
|
|
--- Register scenery object as POSITIONABLE.
|
|
--@param #SCENERY self
|
|
--@param #string SceneryName Scenery name.
|
|
--@param #DCS.Object SceneryObject DCS scenery object.
|
|
--@return #SCENERY Scenery object.
|
|
function SCENERY:Register( SceneryName, SceneryObject )
|
|
local self = BASE:Inherit( self, POSITIONABLE:New( SceneryName ) )
|
|
self.SceneryName = SceneryName
|
|
self.SceneryObject = SceneryObject
|
|
return self
|
|
end
|
|
|
|
--- Register scenery object as POSITIONABLE.
|
|
--@param #SCENERY self
|
|
--@return #DCS.Object DCS scenery object.
|
|
function SCENERY:GetDCSObject()
|
|
return self.SceneryObject
|
|
end
|
|
|
|
--- Register scenery object as POSITIONABLE.
|
|
--@param #SCENERY self
|
|
--@return #number Threat level 0.
|
|
--@return #string "Scenery".
|
|
function SCENERY:GetThreatLevel()
|
|
return 0, "Scenery"
|
|
end
|
|
|
|
--- Create a SCENERY object from it's name/id.
|
|
--@param #SCENERY self
|
|
--@param #string name The name/id of the scenery object as taken from the ME. Ex. '595785449'
|
|
--@return #SCENERY Scenery Object - **Note** this might not point to anything useful. Check with `myscenery:IsAlive()` if it is valid.
|
|
function SCENERY:FindByName(name)
|
|
local findAirbase = function ()
|
|
local airbases = AIRBASE.GetAllAirbases()
|
|
for index,airbase in pairs(airbases) do
|
|
local surftype = airbase:GetCoordinate():GetSurfaceType()
|
|
if surftype ~= land.SurfaceType.SHALLOW_WATER and surftype ~= land.SurfaceType.WATER then
|
|
return airbase:GetCoordinate()
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local sceneryScan = function (scancoord)
|
|
if scancoord ~= nil then
|
|
local _,_,sceneryfound,_,_,scenerylist = scancoord:ScanObjects(200, false, false, true)
|
|
if sceneryfound == true then
|
|
scenerylist[1].id_ = name
|
|
SCENERY.SceneryObject = SCENERY:Register(scenerylist[1].id_, scenerylist[1])
|
|
return SCENERY.SceneryObject
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
if SCENERY.SceneryObject then
|
|
SCENERY.SceneryObject.SceneryObject.id_ = name
|
|
SCENERY.SceneryObject.SceneryName = name
|
|
return SCENERY:Register(SCENERY.SceneryObject.SceneryObject.id_, SCENERY.SceneryObject.SceneryObject)
|
|
else
|
|
return sceneryScan(findAirbase())
|
|
end
|
|
end
|