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 units were found.
|
||||||
-- @return #boolean True if statics were found.
|
-- @return #boolean True if statics were found.
|
||||||
-- @return #boolean True if scenery objects 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 static objects found.
|
||||||
-- @return #table Table of DCS scenery objects found.
|
-- @return #table Table of DCS scenery objects found.
|
||||||
function COORDINATE:ScanObjects(radius, scanunits, scanstatics, scanscenery)
|
function COORDINATE:ScanObjects(radius, scanunits, scanstatics, scanscenery)
|
||||||
@ -477,7 +477,7 @@ do -- COORDINATE
|
|||||||
end
|
end
|
||||||
for _,scenery in pairs(Scenery) do
|
for _,scenery in pairs(Scenery) do
|
||||||
self:T(string.format("Scan found scenery %s typename=%s", scenery:getName(), scenery:getTypeName()))
|
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
|
end
|
||||||
|
|
||||||
return gotunits, gotstatics, gotscenery, Units, Statics, Scenery
|
return gotunits, gotstatics, gotscenery, Units, Statics, Scenery
|
||||||
@ -523,6 +523,50 @@ do -- COORDINATE
|
|||||||
return umin
|
return umin
|
||||||
end
|
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}.
|
--- Calculate the distance from a reference @{#COORDINATE}.
|
||||||
-- @param #COORDINATE self
|
-- @param #COORDINATE self
|
||||||
|
|||||||
@ -2795,8 +2795,16 @@ function AUFTRAG:_TargetFromObject(Object)
|
|||||||
|
|
||||||
if not self.engageTarget then
|
if not self.engageTarget then
|
||||||
|
|
||||||
|
if Object:IsInstanceOf("TARGET") then
|
||||||
|
|
||||||
|
self.engageTarget=Object
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
self.engageTarget=TARGET:New(Object)
|
self.engageTarget=TARGET:New(Object)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
-- Target was already specified elsewhere.
|
-- 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.
|
--- 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 #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
|
-- @return #OPSGROUP self
|
||||||
function OPSGROUP:SetDefaultROT(rot)
|
function OPSGROUP:SetDefaultROT(rot)
|
||||||
self.optionDefault.ROT=rot or ENUMS.ROT.PassiveDefense
|
self.optionDefault.ROT=rot or ENUMS.ROT.PassiveDefense
|
||||||
|
|||||||
@ -58,14 +58,17 @@ TARGET = {
|
|||||||
|
|
||||||
--- Type.
|
--- Type.
|
||||||
-- @type TARGET.ObjectType
|
-- @type TARGET.ObjectType
|
||||||
|
-- @field #string GROUP Target is a GROUP object.
|
||||||
-- @field #string UNIT Target is a UNIT object.
|
-- @field #string UNIT Target is a UNIT object.
|
||||||
-- @field #string STATIC Target is a STATIC 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 COORDINATE Target is a COORDINATE.
|
||||||
-- @field #string AIRBASE Target is an AIRBASE.
|
-- @field #string AIRBASE Target is an AIRBASE.
|
||||||
TARGET.ObjectType={
|
TARGET.ObjectType={
|
||||||
GROUP="Group",
|
GROUP="Group",
|
||||||
UNIT="Unit",
|
UNIT="Unit",
|
||||||
STATIC="Static",
|
STATIC="Static",
|
||||||
|
SCENERY="Scenery",
|
||||||
COORDINATE="Coordinate",
|
COORDINATE="Coordinate",
|
||||||
AIRBASE="Airbase",
|
AIRBASE="Airbase",
|
||||||
}
|
}
|
||||||
@ -492,6 +495,19 @@ function TARGET:_AddObject(Object)
|
|||||||
self.Ntargets0=self.Ntargets0+1
|
self.Ntargets0=self.Ntargets0+1
|
||||||
end
|
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
|
elseif Object:IsInstanceOf("AIRBASE") then
|
||||||
|
|
||||||
@ -519,8 +535,18 @@ function TARGET:_AddObject(Object)
|
|||||||
target.Life0=1
|
target.Life0=1
|
||||||
target.Life=1
|
target.Life=1
|
||||||
|
|
||||||
-- TODO: does this make sense for a coordinate?
|
elseif Object:IsInstanceOf("ZONE_BASE") then
|
||||||
--self.Ntargets0=self.Ntargets0+1
|
|
||||||
|
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
|
else
|
||||||
self:E(self.lid.."ERROR: Unknown object type!")
|
self:E(self.lid.."ERROR: Unknown object type!")
|
||||||
@ -605,6 +631,14 @@ function TARGET:GetTargetLife(Target)
|
|||||||
return 0
|
return 0
|
||||||
end
|
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
|
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||||
|
|
||||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
||||||
@ -670,6 +704,14 @@ function TARGET:GetTargetVec3(Target)
|
|||||||
return object:GetVec3()
|
return object:GetVec3()
|
||||||
end
|
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
|
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||||
|
|
||||||
local object=Target.Object --Wrapper.Airbase#AIRBASE
|
local object=Target.Object --Wrapper.Airbase#AIRBASE
|
||||||
@ -841,6 +883,10 @@ function TARGET:GetTargetCategory(Target)
|
|||||||
|
|
||||||
return TARGET.Category.GROUND
|
return TARGET.Category.GROUND
|
||||||
|
|
||||||
|
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||||
|
|
||||||
|
return TARGET.Category.GROUND
|
||||||
|
|
||||||
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||||
|
|
||||||
return TARGET.Category.AIRBASE
|
return TARGET.Category.AIRBASE
|
||||||
@ -944,6 +990,12 @@ function TARGET:CountTargets()
|
|||||||
N=N+1
|
N=N+1
|
||||||
end
|
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
|
elseif Target.Type==TARGET.ObjectType.AIRBASE then
|
||||||
|
|
||||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user