mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Ops
This commit is contained in:
parent
29d694722b
commit
d497bb25f3
@ -389,7 +389,7 @@ do -- COORDINATE
|
||||
-- @return #boolean True if units were found.
|
||||
-- @return #boolean True if statics were found.
|
||||
-- @return #boolean True if scenery objects were found.
|
||||
-- @return #table Table of MOOSE @[#Wrapper.Unit#UNIT} objects found.
|
||||
-- @return #table Table of MOOSE @{Wrapper.Unit#UNIT} objects found.
|
||||
-- @return #table Table of DCS static objects found.
|
||||
-- @return #table Table of DCS scenery objects found.
|
||||
function COORDINATE:ScanObjects(radius, scanunits, scanstatics, scanscenery)
|
||||
@ -477,7 +477,7 @@ do -- COORDINATE
|
||||
end
|
||||
for _,scenery in pairs(Scenery) do
|
||||
self:T(string.format("Scan found scenery %s typename=%s", scenery:getName(), scenery:getTypeName()))
|
||||
SCENERY:Register(scenery:getName(), scenery)
|
||||
--SCENERY:Register(scenery:getName(), scenery)
|
||||
end
|
||||
|
||||
return gotunits, gotstatics, gotscenery, Units, Statics, Scenery
|
||||
@ -523,6 +523,50 @@ do -- COORDINATE
|
||||
return umin
|
||||
end
|
||||
|
||||
--- Scan/find SCENERY objects within a certain radius around the coordinate using the world.searchObjects() DCS API function.
|
||||
-- @param #COORDINATE self
|
||||
-- @param #number radius (Optional) Scan radius in meters. Default 100 m.
|
||||
-- @return table Set of scenery objects.
|
||||
function COORDINATE:ScanScenery(radius)
|
||||
|
||||
local _,_,_,_,_,scenerys=self:ScanObjects(radius, false, false, true)
|
||||
|
||||
local set={}
|
||||
|
||||
for _,_scenery in pairs(scenerys) do
|
||||
local scenery=_scenery --DCS#Object
|
||||
|
||||
local name=scenery:getName()
|
||||
local s=SCENERY:Register(name, scenery)
|
||||
table.insert(set, s)
|
||||
|
||||
end
|
||||
|
||||
return set
|
||||
end
|
||||
|
||||
--- Find the closest scenery to the COORDINATE within a certain radius.
|
||||
-- @param #COORDINATE self
|
||||
-- @param #number radius Scan radius in meters. Default 100 m.
|
||||
-- @return Wrapper.Scenery#SCENERY The closest scenery or #nil if no object is inside the given radius.
|
||||
function COORDINATE:FindClosestScenery(radius)
|
||||
|
||||
local sceneries=self:ScanScenery(radius)
|
||||
|
||||
local umin=nil --Wrapper.Scenery#SCENERY
|
||||
local dmin=math.huge
|
||||
for _,_scenery in pairs(sceneries) do
|
||||
local scenery=_scenery --Wrapper.Scenery#SCENERY
|
||||
local coordinate=scenery:GetCoordinate()
|
||||
local d=self:Get2DDistance(coordinate)
|
||||
if d<dmin then
|
||||
dmin=d
|
||||
umin=scenery
|
||||
end
|
||||
end
|
||||
|
||||
return umin
|
||||
end
|
||||
|
||||
--- Calculate the distance from a reference @{#COORDINATE}.
|
||||
-- @param #COORDINATE self
|
||||
|
||||
@ -2795,8 +2795,16 @@ function AUFTRAG:_TargetFromObject(Object)
|
||||
|
||||
if not self.engageTarget then
|
||||
|
||||
if Object:IsInstanceOf("TARGET") then
|
||||
|
||||
self.engageTarget=Object
|
||||
|
||||
else
|
||||
|
||||
self.engageTarget=TARGET:New(Object)
|
||||
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
-- Target was already specified elsewhere.
|
||||
|
||||
@ -3543,7 +3543,7 @@ end
|
||||
|
||||
--- Set the default ROT for the group. This is the ROT state gets when the group is spawned or to which it defaults back after a mission.
|
||||
-- @param #OPSGROUP self
|
||||
-- @param #number rot ROT of group. Default is ENUMS.ROT.PassiveDefense.
|
||||
-- @param #number rot ROT of group. Default is `ENUMS.ROT.PassiveDefense`.
|
||||
-- @return #OPSGROUP self
|
||||
function OPSGROUP:SetDefaultROT(rot)
|
||||
self.optionDefault.ROT=rot or ENUMS.ROT.PassiveDefense
|
||||
|
||||
@ -58,14 +58,17 @@ TARGET = {
|
||||
|
||||
--- Type.
|
||||
-- @type TARGET.ObjectType
|
||||
-- @field #string GROUP Target is a GROUP object.
|
||||
-- @field #string UNIT Target is a UNIT object.
|
||||
-- @field #string STATIC Target is a STATIC object.
|
||||
-- @field #string SCENERY Target is a SCENERY object.
|
||||
-- @field #string COORDINATE Target is a COORDINATE.
|
||||
-- @field #string AIRBASE Target is an AIRBASE.
|
||||
TARGET.ObjectType={
|
||||
GROUP="Group",
|
||||
UNIT="Unit",
|
||||
STATIC="Static",
|
||||
SCENERY="Scenery",
|
||||
COORDINATE="Coordinate",
|
||||
AIRBASE="Airbase",
|
||||
}
|
||||
@ -492,6 +495,19 @@ function TARGET:_AddObject(Object)
|
||||
self.Ntargets0=self.Ntargets0+1
|
||||
end
|
||||
|
||||
elseif Object:IsInstanceOf("SCENERY") then
|
||||
|
||||
local scenery=Object --Wrapper.Scenery#SCENERY
|
||||
|
||||
target.Type=TARGET.ObjectType.SCENERY
|
||||
target.Name=scenery:GetName()
|
||||
|
||||
target.Coordinate=scenery:GetCoordinate()
|
||||
|
||||
target.Life0=1
|
||||
target.Life=1
|
||||
|
||||
self.Ntargets0=self.Ntargets0+1
|
||||
|
||||
elseif Object:IsInstanceOf("AIRBASE") then
|
||||
|
||||
@ -519,8 +535,18 @@ function TARGET:_AddObject(Object)
|
||||
target.Life0=1
|
||||
target.Life=1
|
||||
|
||||
-- TODO: does this make sense for a coordinate?
|
||||
--self.Ntargets0=self.Ntargets0+1
|
||||
elseif Object:IsInstanceOf("ZONE_BASE") then
|
||||
|
||||
local zone=Object --Core.Zone#ZONE_BASE
|
||||
Object=zone:GetCoordinate()
|
||||
|
||||
target.Type=TARGET.ObjectType.COORDINATE
|
||||
target.Name=zone:GetName()
|
||||
|
||||
target.Coordinate=Object
|
||||
|
||||
target.Life0=1
|
||||
target.Life=1
|
||||
|
||||
else
|
||||
self:E(self.lid.."ERROR: Unknown object type!")
|
||||
@ -605,6 +631,14 @@ function TARGET:GetTargetLife(Target)
|
||||
return 0
|
||||
end
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||
|
||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
end
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||
|
||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
||||
@ -670,6 +704,14 @@ function TARGET:GetTargetVec3(Target)
|
||||
return object:GetVec3()
|
||||
end
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||
|
||||
local object=Target.Object --Wrapper.Scenery#SCENERY
|
||||
|
||||
if object then
|
||||
return object:GetVec3()
|
||||
end
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||
|
||||
local object=Target.Object --Wrapper.Airbase#AIRBASE
|
||||
@ -841,6 +883,10 @@ function TARGET:GetTargetCategory(Target)
|
||||
|
||||
return TARGET.Category.GROUND
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||
|
||||
return TARGET.Category.GROUND
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||
|
||||
return TARGET.Category.AIRBASE
|
||||
@ -944,6 +990,12 @@ function TARGET:CountTargets()
|
||||
N=N+1
|
||||
end
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||
|
||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
||||
N=N+1
|
||||
end
|
||||
|
||||
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||
|
||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user