Merge remote-tracking branch 'refs/remotes/origin/master' into Detection

This commit is contained in:
FlightControl 2016-07-23 10:38:15 +02:00
commit 2befd34681
61 changed files with 1148 additions and 316 deletions

View File

@ -124,10 +124,7 @@ end
-- @return Point#POINT_VEC3 self
function POINT_VEC3:NewFromVec3( Vec3 )
local self = BASE:Inherit( self, BASE:New() )
self.PointVec3 = Vec3
self:F2( self.PointVec3 )
return self
return self:New( Vec3.x, Vec3.y, Vec3.z )
end
@ -138,11 +135,19 @@ function POINT_VEC3:GetVec3()
return self.PointVec3
end
--- Return the coordinates of the POINT_VEC3 in Vec2 format.
-- @param #POINT_VEC3 self
-- @return DCSTypes#Vec2 The Vec2 coodinate.
function POINT_VEC3:GetVec2()
return { x = self.PointVec3.x, y = self.PointVec3.z }
end
--- Return the x coordinate of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @return #number The x coodinate.
function POINT_VEC3:GetX()
self:F2(self.PointVec3.x)
return self.PointVec3.x
end
@ -150,6 +155,7 @@ end
-- @param #POINT_VEC3 self
-- @return #number The y coodinate.
function POINT_VEC3:GetY()
self:F2(self.PointVec3.y)
return self.PointVec3.y
end
@ -157,9 +163,55 @@ end
-- @param #POINT_VEC3 self
-- @return #number The z coodinate.
function POINT_VEC3:GetZ()
self:F2(self.PointVec3.z)
return self.PointVec3.z
end
--- Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @param DCSTypes#Distance OuterRadius
-- @param DCSTypes#Distance InnerRadius
-- @return DCSTypes#Vec2 Vec2
function POINT_VEC3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
self:F2( { self.PointVec3, OuterRadius, InnerRadius } )
local Theta = 2 * math.pi * math.random()
local Radials = math.random() + math.random()
if Radials > 1 then
Radials = 2 - Radials
end
local RadialMultiplier
if InnerRadius and InnerRadius <= OuterRadius then
RadialMultiplier = ( OuterRadius - InnerRadius ) * Radials + InnerRadius
else
RadialMultiplier = OuterRadius * Radials
end
local RandomVec3
if OuterRadius > 0 then
RandomVec3 = { x = math.cos( Theta ) * RadialMultiplier + self:GetX(), y = math.sin( Theta ) * RadialMultiplier + self:GetZ() }
else
RandomVec3 = { x = self:GetX(), y = self:GetZ() }
end
return RandomVec3
end
--- Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @param DCSTypes#Distance OuterRadius
-- @param DCSTypes#Distance InnerRadius
-- @return DCSTypes#Vec3 Vec3
function POINT_VEC3:GetRandomVec3InRadius( OuterRadius, InnerRadius )
local RandomVec2 = self:GetRandomVec2InRadius( OuterRadius, InnerRadius )
local y = self:GetY() + math.random( InnerRadius, OuterRadius )
local RandomVec3 = { x = RandomVec2.x, y = y, z = RandomVec2.z }
return RandomVec3
end
--- Return a direction vector Vec3 from POINT_VEC3 to the POINT_VEC3.
-- @param #POINT_VEC3 self
@ -443,6 +495,28 @@ function POINT_VEC2:New( x, y, LandHeightAdd )
return self
end
--- Create a new POINT_VEC2 object from Vec2 coordinates.
-- @param #POINT_VEC2 self
-- @param DCSTypes#Vec2 Vec2 The Vec2 point.
-- @return Point#POINT_VEC2 self
function POINT_VEC2:NewFromVec2( Vec2, LandHeightAdd )
local self = BASE:Inherit( self, BASE:New() )
local LandHeight = land.getHeight( Vec2 )
if LandHeightAdd then
LandHeight = LandHeight + LandHeightAdd
end
local self = BASE:Inherit( self, POINT_VEC3:New( Vec2.x, LandHeight, Vec2.y ) )
self:F2( { Vec2.x, Vec2.y, LandHeightAdd } )
self.PointVec2 = Vec2
self:F2( self.PointVec3 )
return self
end
--- Calculate the distance from a reference @{Point#POINT_VEC2}.
-- @param #POINT_VEC2 self
-- @param #POINT_VEC2 PointVec2Reference The reference @{Point#POINT_VEC2}.

View File

@ -52,6 +52,9 @@
-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index.
-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index.
-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively.
-- * @{#SPAWN.SpawnFromVec3}: Spawn a new group from a Vec3 coordinate. (The group will can be spawned at a point in the air).
-- * @{#SPAWN.SpawnFromVec2}: Spawn a new group from a Vec2 coordinate. (The group will be spawned at land height ).
-- * @{#SPAWN.SpawnFromStatic}: Spawn a new group from a structure, taking the position of a @{STATIC}.
-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}.
-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}.
--
@ -537,6 +540,86 @@ function SPAWN:SpawnFunction( SpawnFunctionHook, ... )
end
--- Will spawn a group from a Vec3 in 3D space.
-- This function is mostly advisable to be used if you want to simulate spawning units in the air, like helicopters or airplanes.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param DCSTypes#Vec3 Vec3 The Vec3 coordinates where to spawn the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromVec3( Vec3, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Vec3, OuterRadius, InnerRadius, SpawnIndex } )
local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 )
self:T2(PointVec3)
if SpawnIndex then
else
SpawnIndex = self.SpawnIndex + 1
end
if self:_GetSpawnIndex( SpawnIndex ) then
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
self:T( { "Current point of ", self.SpawnTemplatePrefix, Vec3 } )
SpawnTemplate.route.points[1].x = Vec3.x
SpawnTemplate.route.points[1].y = Vec3.z
SpawnTemplate.route.points[1].alt = Vec3.y
InnerRadius = InnerRadius or 0
OuterRadius = OuterRadius or 0
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
local RandomVec2 = PointVec3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
SpawnTemplate.units[UnitID].x = RandomVec2.x
SpawnTemplate.units[UnitID].y = RandomVec2.y
SpawnTemplate.units[UnitID].alt = Vec3.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
-- TODO: Need to rework this. A spawn action should always be at the random point to start from. This move is not correct to be here.
-- local RandomVec2 = PointVec3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
-- local Point = {}
-- Point.type = "Turning Point"
-- Point.x = RandomVec2.x
-- Point.y = RandomVec2.y
-- Point.action = "Cone"
-- Point.speed = 5
-- table.insert( SpawnTemplate.route.points, 2, Point )
return self:SpawnWithIndex( self.SpawnIndex )
end
end
return nil
end
--- Will spawn a group from a Vec2 in 3D space.
-- This function is mostly advisable to be used if you want to simulate spawning groups on the ground from air units, like vehicles.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param DCSTypes#Vec2 Vec2 The Vec2 coordinates where to spawn the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromVec2( Vec2, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Vec2, OuterRadius, InnerRadius, SpawnIndex } )
local PointVec2 = POINT_VEC2:NewFromVec2( Vec2 )
return self:SpawnFromVec3( PointVec2:GetVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone.
@ -544,8 +627,8 @@ end
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group.
-- @param #number OuterRadius The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
@ -553,66 +636,26 @@ function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } )
if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then
return self:SpawnFromVec3( HostUnit:GetPointVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
if SpawnIndex then
else
SpawnIndex = self.SpawnIndex + 1
end
return nil
end
if self:_GetSpawnIndex( SpawnIndex ) then
--- Will spawn a group from a hosting static. This function is mostly advisable to be used if you want to simulate spawning from buldings and structures (static buildings).
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param Static#STATIC HostStatic The static dropping or unloading the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromStatic( HostStatic, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, HostStatic, OuterRadius, InnerRadius, SpawnIndex } )
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
local UnitPoint = HostUnit:GetVec2()
self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } )
--for PointID, Point in pairs( SpawnTemplate.route.points ) do
--Point.x = UnitPoint.x
--Point.y = UnitPoint.y
--Point.alt = nil
--Point.alt_type = nil
--end
SpawnTemplate.route.points[1].x = UnitPoint.x
SpawnTemplate.route.points[1].y = UnitPoint.y
if not InnerRadius then
InnerRadius = 10
end
if not OuterRadius then
OuterRadius = 50
end
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
if InnerRadius == 0 then
SpawnTemplate.units[UnitID].x = UnitPoint.x
SpawnTemplate.units[UnitID].y = UnitPoint.y
else
local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius )
SpawnTemplate.units[UnitID].x = CirclePos.x
SpawnTemplate.units[UnitID].y = CirclePos.y
end
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius )
local Point = {}
Point.type = "Turning Point"
Point.x = SpawnPos.x
Point.y = SpawnPos.y
Point.action = "Cone"
Point.speed = 5
table.insert( SpawnTemplate.route.points, 2, Point )
return self:SpawnWithIndex( self.SpawnIndex )
end
end
if HostStatic and HostStatic:IsAlive() then
return self:SpawnFromVec3( HostStatic:GetPointVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
return nil
@ -631,39 +674,10 @@ function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } )
if Zone then
if SpawnIndex then
if ZoneRandomize then
return self:SpawnFromVec2( Zone:GetVec2(), Zone:GetRadius(), 0, SpawnIndex )
else
SpawnIndex = self.SpawnIndex + 1
end
if self:_GetSpawnIndex( SpawnIndex ) then
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
local ZonePoint
if ZoneRandomize == true then
ZonePoint = Zone:GetRandomVec2()
else
ZonePoint = Zone:GetVec2()
end
SpawnTemplate.route.points[1].x = ZonePoint.x
SpawnTemplate.route.points[1].y = ZonePoint.y
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
local ZonePointUnit = Zone:GetRandomVec2()
SpawnTemplate.units[UnitID].x = ZonePointUnit.x
SpawnTemplate.units[UnitID].y = ZonePointUnit.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
return self:SpawnWithIndex( self.SpawnIndex )
end
return self:SpawnFromVec2( Zone:GetVec2(), 0, 0, SpawnIndex )
end
end

View File

@ -52,6 +52,8 @@ STATIC = {
function STATIC:FindByName( StaticName )
local StaticFound = _DATABASE:FindStatic( StaticName )
self.StaticName = StaticName
if StaticFound then
StaticFound:F( { StaticName } )
@ -63,12 +65,13 @@ end
function STATIC:Register( StaticName )
local self = BASE:Inherit( self, POSITIONABLE:New( StaticName ) )
self.StaticName = StaticName
return self
end
function STATIC:GetDCSUnit()
local DCSStatic = StaticObject.getByName( self.UnitName )
function STATIC:GetDCSObject()
local DCSStatic = StaticObject.getByName( self.StaticName )
if DCSStatic then
return DCSStatic

View File

@ -287,15 +287,16 @@ end
-- @param DCSTypes#Distance Height The height to add to the land height where the center of the zone is located.
-- @return DCSTypes#Vec3 The point of the zone.
function ZONE_RADIUS:GetPointVec3( Height )
self:F2( self.ZoneName )
self:F2( { self.ZoneName, Height } )
Height = Height or 0
local Vec2 = self:GetVec2()
local PointVec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
local Vec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
self:T2( { PointVec3 } )
self:T2( { Vec3 } )
return PointVec3
return Vec3
end

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20160722_1718' )
env.info( 'Moose Generation Timestamp: 20160723_1028' )
local base = _G
Include = {}
@ -9864,15 +9864,16 @@ end
-- @param DCSTypes#Distance Height The height to add to the land height where the center of the zone is located.
-- @return DCSTypes#Vec3 The point of the zone.
function ZONE_RADIUS:GetPointVec3( Height )
self:F2( self.ZoneName )
self:F2( { self.ZoneName, Height } )
Height = Height or 0
local Vec2 = self:GetVec2()
local PointVec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
local Vec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
self:T2( { PointVec3 } )
self:T2( { Vec3 } )
return PointVec3
return Vec3
end
@ -10811,6 +10812,8 @@ STATIC = {
function STATIC:FindByName( StaticName )
local StaticFound = _DATABASE:FindStatic( StaticName )
self.StaticName = StaticName
if StaticFound then
StaticFound:F( { StaticName } )
@ -10822,12 +10825,13 @@ end
function STATIC:Register( StaticName )
local self = BASE:Inherit( self, POSITIONABLE:New( StaticName ) )
self.StaticName = StaticName
return self
end
function STATIC:GetDCSUnit()
local DCSStatic = StaticObject.getByName( self.UnitName )
function STATIC:GetDCSObject()
local DCSStatic = StaticObject.getByName( self.StaticName )
if DCSStatic then
return DCSStatic
@ -14054,10 +14058,7 @@ end
-- @return Point#POINT_VEC3 self
function POINT_VEC3:NewFromVec3( Vec3 )
local self = BASE:Inherit( self, BASE:New() )
self.PointVec3 = Vec3
self:F2( self.PointVec3 )
return self
return self:New( Vec3.x, Vec3.y, Vec3.z )
end
@ -14068,11 +14069,19 @@ function POINT_VEC3:GetVec3()
return self.PointVec3
end
--- Return the coordinates of the POINT_VEC3 in Vec2 format.
-- @param #POINT_VEC3 self
-- @return DCSTypes#Vec2 The Vec2 coodinate.
function POINT_VEC3:GetVec2()
return { x = self.PointVec3.x, y = self.PointVec3.z }
end
--- Return the x coordinate of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @return #number The x coodinate.
function POINT_VEC3:GetX()
self:F2(self.PointVec3.x)
return self.PointVec3.x
end
@ -14080,6 +14089,7 @@ end
-- @param #POINT_VEC3 self
-- @return #number The y coodinate.
function POINT_VEC3:GetY()
self:F2(self.PointVec3.y)
return self.PointVec3.y
end
@ -14087,9 +14097,55 @@ end
-- @param #POINT_VEC3 self
-- @return #number The z coodinate.
function POINT_VEC3:GetZ()
self:F2(self.PointVec3.z)
return self.PointVec3.z
end
--- Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @param DCSTypes#Distance OuterRadius
-- @param DCSTypes#Distance InnerRadius
-- @return DCSTypes#Vec2 Vec2
function POINT_VEC3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
self:F2( { self.PointVec3, OuterRadius, InnerRadius } )
local Theta = 2 * math.pi * math.random()
local Radials = math.random() + math.random()
if Radials > 1 then
Radials = 2 - Radials
end
local RadialMultiplier
if InnerRadius and InnerRadius <= OuterRadius then
RadialMultiplier = ( OuterRadius - InnerRadius ) * Radials + InnerRadius
else
RadialMultiplier = OuterRadius * Radials
end
local RandomVec3
if OuterRadius > 0 then
RandomVec3 = { x = math.cos( Theta ) * RadialMultiplier + self:GetX(), y = math.sin( Theta ) * RadialMultiplier + self:GetZ() }
else
RandomVec3 = { x = self:GetX(), y = self:GetZ() }
end
return RandomVec3
end
--- Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @param DCSTypes#Distance OuterRadius
-- @param DCSTypes#Distance InnerRadius
-- @return DCSTypes#Vec3 Vec3
function POINT_VEC3:GetRandomVec3InRadius( OuterRadius, InnerRadius )
local RandomVec2 = self:GetRandomVec2InRadius( OuterRadius, InnerRadius )
local y = self:GetY() + math.random( InnerRadius, OuterRadius )
local RandomVec3 = { x = RandomVec2.x, y = y, z = RandomVec2.z }
return RandomVec3
end
--- Return a direction vector Vec3 from POINT_VEC3 to the POINT_VEC3.
-- @param #POINT_VEC3 self
@ -14373,6 +14429,28 @@ function POINT_VEC2:New( x, y, LandHeightAdd )
return self
end
--- Create a new POINT_VEC2 object from Vec2 coordinates.
-- @param #POINT_VEC2 self
-- @param DCSTypes#Vec2 Vec2 The Vec2 point.
-- @return Point#POINT_VEC2 self
function POINT_VEC2:NewFromVec2( Vec2, LandHeightAdd )
local self = BASE:Inherit( self, BASE:New() )
local LandHeight = land.getHeight( Vec2 )
if LandHeightAdd then
LandHeight = LandHeight + LandHeightAdd
end
local self = BASE:Inherit( self, POINT_VEC3:New( Vec2.x, LandHeight, Vec2.y ) )
self:F2( { Vec2.x, Vec2.y, LandHeightAdd } )
self.PointVec2 = Vec2
self:F2( self.PointVec3 )
return self
end
--- Calculate the distance from a reference @{Point#POINT_VEC2}.
-- @param #POINT_VEC2 self
-- @param #POINT_VEC2 PointVec2Reference The reference @{Point#POINT_VEC2}.
@ -20238,6 +20316,9 @@ end
-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index.
-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index.
-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively.
-- * @{#SPAWN.SpawnFromVec3}: Spawn a new group from a Vec3 coordinate. (The group will can be spawned at a point in the air).
-- * @{#SPAWN.SpawnFromVec2}: Spawn a new group from a Vec2 coordinate. (The group will be spawned at land height ).
-- * @{#SPAWN.SpawnFromStatic}: Spawn a new group from a structure, taking the position of a @{STATIC}.
-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}.
-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}.
--
@ -20723,6 +20804,86 @@ function SPAWN:SpawnFunction( SpawnFunctionHook, ... )
end
--- Will spawn a group from a Vec3 in 3D space.
-- This function is mostly advisable to be used if you want to simulate spawning units in the air, like helicopters or airplanes.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param DCSTypes#Vec3 Vec3 The Vec3 coordinates where to spawn the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromVec3( Vec3, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Vec3, OuterRadius, InnerRadius, SpawnIndex } )
local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 )
self:T2(PointVec3)
if SpawnIndex then
else
SpawnIndex = self.SpawnIndex + 1
end
if self:_GetSpawnIndex( SpawnIndex ) then
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
self:T( { "Current point of ", self.SpawnTemplatePrefix, Vec3 } )
SpawnTemplate.route.points[1].x = Vec3.x
SpawnTemplate.route.points[1].y = Vec3.z
SpawnTemplate.route.points[1].alt = Vec3.y
InnerRadius = InnerRadius or 0
OuterRadius = OuterRadius or 0
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
local RandomVec2 = PointVec3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
SpawnTemplate.units[UnitID].x = RandomVec2.x
SpawnTemplate.units[UnitID].y = RandomVec2.y
SpawnTemplate.units[UnitID].alt = Vec3.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
-- TODO: Need to rework this. A spawn action should always be at the random point to start from. This move is not correct to be here.
-- local RandomVec2 = PointVec3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
-- local Point = {}
-- Point.type = "Turning Point"
-- Point.x = RandomVec2.x
-- Point.y = RandomVec2.y
-- Point.action = "Cone"
-- Point.speed = 5
-- table.insert( SpawnTemplate.route.points, 2, Point )
return self:SpawnWithIndex( self.SpawnIndex )
end
end
return nil
end
--- Will spawn a group from a Vec2 in 3D space.
-- This function is mostly advisable to be used if you want to simulate spawning groups on the ground from air units, like vehicles.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param DCSTypes#Vec2 Vec2 The Vec2 coordinates where to spawn the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromVec2( Vec2, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Vec2, OuterRadius, InnerRadius, SpawnIndex } )
local PointVec2 = POINT_VEC2:NewFromVec2( Vec2 )
return self:SpawnFromVec3( PointVec2:GetVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone.
@ -20730,8 +20891,8 @@ end
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group.
-- @param #number OuterRadius The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
@ -20739,66 +20900,26 @@ function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } )
if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then
return self:SpawnFromVec3( HostUnit:GetPointVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
if SpawnIndex then
else
SpawnIndex = self.SpawnIndex + 1
end
return nil
end
if self:_GetSpawnIndex( SpawnIndex ) then
--- Will spawn a group from a hosting static. This function is mostly advisable to be used if you want to simulate spawning from buldings and structures (static buildings).
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param Static#STATIC HostStatic The static dropping or unloading the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromStatic( HostStatic, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, HostStatic, OuterRadius, InnerRadius, SpawnIndex } )
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
local UnitPoint = HostUnit:GetVec2()
self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } )
--for PointID, Point in pairs( SpawnTemplate.route.points ) do
--Point.x = UnitPoint.x
--Point.y = UnitPoint.y
--Point.alt = nil
--Point.alt_type = nil
--end
SpawnTemplate.route.points[1].x = UnitPoint.x
SpawnTemplate.route.points[1].y = UnitPoint.y
if not InnerRadius then
InnerRadius = 10
end
if not OuterRadius then
OuterRadius = 50
end
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
if InnerRadius == 0 then
SpawnTemplate.units[UnitID].x = UnitPoint.x
SpawnTemplate.units[UnitID].y = UnitPoint.y
else
local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius )
SpawnTemplate.units[UnitID].x = CirclePos.x
SpawnTemplate.units[UnitID].y = CirclePos.y
end
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius )
local Point = {}
Point.type = "Turning Point"
Point.x = SpawnPos.x
Point.y = SpawnPos.y
Point.action = "Cone"
Point.speed = 5
table.insert( SpawnTemplate.route.points, 2, Point )
return self:SpawnWithIndex( self.SpawnIndex )
end
end
if HostStatic and HostStatic:IsAlive() then
return self:SpawnFromVec3( HostStatic:GetPointVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
return nil
@ -20817,39 +20938,10 @@ function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } )
if Zone then
if SpawnIndex then
if ZoneRandomize then
return self:SpawnFromVec2( Zone:GetVec2(), Zone:GetRadius(), 0, SpawnIndex )
else
SpawnIndex = self.SpawnIndex + 1
end
if self:_GetSpawnIndex( SpawnIndex ) then
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
local ZonePoint
if ZoneRandomize == true then
ZonePoint = Zone:GetRandomVec2()
else
ZonePoint = Zone:GetVec2()
end
SpawnTemplate.route.points[1].x = ZonePoint.x
SpawnTemplate.route.points[1].y = ZonePoint.y
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
local ZonePointUnit = Zone:GetRandomVec2()
SpawnTemplate.units[UnitID].x = ZonePointUnit.x
SpawnTemplate.units[UnitID].y = ZonePointUnit.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
return self:SpawnWithIndex( self.SpawnIndex )
end
return self:SpawnFromVec2( Zone:GetVec2(), 0, 0, SpawnIndex )
end
end

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20160722_1718' )
env.info( 'Moose Generation Timestamp: 20160723_1028' )
local base = _G
Include = {}
@ -9864,15 +9864,16 @@ end
-- @param DCSTypes#Distance Height The height to add to the land height where the center of the zone is located.
-- @return DCSTypes#Vec3 The point of the zone.
function ZONE_RADIUS:GetPointVec3( Height )
self:F2( self.ZoneName )
self:F2( { self.ZoneName, Height } )
Height = Height or 0
local Vec2 = self:GetVec2()
local PointVec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
local Vec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
self:T2( { PointVec3 } )
self:T2( { Vec3 } )
return PointVec3
return Vec3
end
@ -10811,6 +10812,8 @@ STATIC = {
function STATIC:FindByName( StaticName )
local StaticFound = _DATABASE:FindStatic( StaticName )
self.StaticName = StaticName
if StaticFound then
StaticFound:F( { StaticName } )
@ -10822,12 +10825,13 @@ end
function STATIC:Register( StaticName )
local self = BASE:Inherit( self, POSITIONABLE:New( StaticName ) )
self.StaticName = StaticName
return self
end
function STATIC:GetDCSUnit()
local DCSStatic = StaticObject.getByName( self.UnitName )
function STATIC:GetDCSObject()
local DCSStatic = StaticObject.getByName( self.StaticName )
if DCSStatic then
return DCSStatic
@ -14054,10 +14058,7 @@ end
-- @return Point#POINT_VEC3 self
function POINT_VEC3:NewFromVec3( Vec3 )
local self = BASE:Inherit( self, BASE:New() )
self.PointVec3 = Vec3
self:F2( self.PointVec3 )
return self
return self:New( Vec3.x, Vec3.y, Vec3.z )
end
@ -14068,11 +14069,19 @@ function POINT_VEC3:GetVec3()
return self.PointVec3
end
--- Return the coordinates of the POINT_VEC3 in Vec2 format.
-- @param #POINT_VEC3 self
-- @return DCSTypes#Vec2 The Vec2 coodinate.
function POINT_VEC3:GetVec2()
return { x = self.PointVec3.x, y = self.PointVec3.z }
end
--- Return the x coordinate of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @return #number The x coodinate.
function POINT_VEC3:GetX()
self:F2(self.PointVec3.x)
return self.PointVec3.x
end
@ -14080,6 +14089,7 @@ end
-- @param #POINT_VEC3 self
-- @return #number The y coodinate.
function POINT_VEC3:GetY()
self:F2(self.PointVec3.y)
return self.PointVec3.y
end
@ -14087,9 +14097,55 @@ end
-- @param #POINT_VEC3 self
-- @return #number The z coodinate.
function POINT_VEC3:GetZ()
self:F2(self.PointVec3.z)
return self.PointVec3.z
end
--- Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @param DCSTypes#Distance OuterRadius
-- @param DCSTypes#Distance InnerRadius
-- @return DCSTypes#Vec2 Vec2
function POINT_VEC3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
self:F2( { self.PointVec3, OuterRadius, InnerRadius } )
local Theta = 2 * math.pi * math.random()
local Radials = math.random() + math.random()
if Radials > 1 then
Radials = 2 - Radials
end
local RadialMultiplier
if InnerRadius and InnerRadius <= OuterRadius then
RadialMultiplier = ( OuterRadius - InnerRadius ) * Radials + InnerRadius
else
RadialMultiplier = OuterRadius * Radials
end
local RandomVec3
if OuterRadius > 0 then
RandomVec3 = { x = math.cos( Theta ) * RadialMultiplier + self:GetX(), y = math.sin( Theta ) * RadialMultiplier + self:GetZ() }
else
RandomVec3 = { x = self:GetX(), y = self:GetZ() }
end
return RandomVec3
end
--- Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.
-- @param #POINT_VEC3 self
-- @param DCSTypes#Distance OuterRadius
-- @param DCSTypes#Distance InnerRadius
-- @return DCSTypes#Vec3 Vec3
function POINT_VEC3:GetRandomVec3InRadius( OuterRadius, InnerRadius )
local RandomVec2 = self:GetRandomVec2InRadius( OuterRadius, InnerRadius )
local y = self:GetY() + math.random( InnerRadius, OuterRadius )
local RandomVec3 = { x = RandomVec2.x, y = y, z = RandomVec2.z }
return RandomVec3
end
--- Return a direction vector Vec3 from POINT_VEC3 to the POINT_VEC3.
-- @param #POINT_VEC3 self
@ -14373,6 +14429,28 @@ function POINT_VEC2:New( x, y, LandHeightAdd )
return self
end
--- Create a new POINT_VEC2 object from Vec2 coordinates.
-- @param #POINT_VEC2 self
-- @param DCSTypes#Vec2 Vec2 The Vec2 point.
-- @return Point#POINT_VEC2 self
function POINT_VEC2:NewFromVec2( Vec2, LandHeightAdd )
local self = BASE:Inherit( self, BASE:New() )
local LandHeight = land.getHeight( Vec2 )
if LandHeightAdd then
LandHeight = LandHeight + LandHeightAdd
end
local self = BASE:Inherit( self, POINT_VEC3:New( Vec2.x, LandHeight, Vec2.y ) )
self:F2( { Vec2.x, Vec2.y, LandHeightAdd } )
self.PointVec2 = Vec2
self:F2( self.PointVec3 )
return self
end
--- Calculate the distance from a reference @{Point#POINT_VEC2}.
-- @param #POINT_VEC2 self
-- @param #POINT_VEC2 PointVec2Reference The reference @{Point#POINT_VEC2}.
@ -20238,6 +20316,9 @@ end
-- * @{#SPAWN.Spawn}: Spawn one new group based on the last spawned index.
-- * @{#SPAWN.ReSpawn}: Re-spawn a group based on a given index.
-- * @{#SPAWN.SpawnScheduled}: Spawn groups at scheduled but randomized intervals. You can use @{#SPAWN.SpawnScheduleStart} and @{#SPAWN.SpawnScheduleStop} to start and stop the schedule respectively.
-- * @{#SPAWN.SpawnFromVec3}: Spawn a new group from a Vec3 coordinate. (The group will can be spawned at a point in the air).
-- * @{#SPAWN.SpawnFromVec2}: Spawn a new group from a Vec2 coordinate. (The group will be spawned at land height ).
-- * @{#SPAWN.SpawnFromStatic}: Spawn a new group from a structure, taking the position of a @{STATIC}.
-- * @{#SPAWN.SpawnFromUnit}: Spawn a new group taking the position of a @{UNIT}.
-- * @{#SPAWN.SpawnInZone}: Spawn a new group in a @{ZONE}.
--
@ -20723,6 +20804,86 @@ function SPAWN:SpawnFunction( SpawnFunctionHook, ... )
end
--- Will spawn a group from a Vec3 in 3D space.
-- This function is mostly advisable to be used if you want to simulate spawning units in the air, like helicopters or airplanes.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param DCSTypes#Vec3 Vec3 The Vec3 coordinates where to spawn the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromVec3( Vec3, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Vec3, OuterRadius, InnerRadius, SpawnIndex } )
local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 )
self:T2(PointVec3)
if SpawnIndex then
else
SpawnIndex = self.SpawnIndex + 1
end
if self:_GetSpawnIndex( SpawnIndex ) then
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
self:T( { "Current point of ", self.SpawnTemplatePrefix, Vec3 } )
SpawnTemplate.route.points[1].x = Vec3.x
SpawnTemplate.route.points[1].y = Vec3.z
SpawnTemplate.route.points[1].alt = Vec3.y
InnerRadius = InnerRadius or 0
OuterRadius = OuterRadius or 0
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
local RandomVec2 = PointVec3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
SpawnTemplate.units[UnitID].x = RandomVec2.x
SpawnTemplate.units[UnitID].y = RandomVec2.y
SpawnTemplate.units[UnitID].alt = Vec3.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
-- TODO: Need to rework this. A spawn action should always be at the random point to start from. This move is not correct to be here.
-- local RandomVec2 = PointVec3:GetRandomVec2InRadius( OuterRadius, InnerRadius )
-- local Point = {}
-- Point.type = "Turning Point"
-- Point.x = RandomVec2.x
-- Point.y = RandomVec2.y
-- Point.action = "Cone"
-- Point.speed = 5
-- table.insert( SpawnTemplate.route.points, 2, Point )
return self:SpawnWithIndex( self.SpawnIndex )
end
end
return nil
end
--- Will spawn a group from a Vec2 in 3D space.
-- This function is mostly advisable to be used if you want to simulate spawning groups on the ground from air units, like vehicles.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param DCSTypes#Vec2 Vec2 The Vec2 coordinates where to spawn the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromVec2( Vec2, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Vec2, OuterRadius, InnerRadius, SpawnIndex } )
local PointVec2 = POINT_VEC2:NewFromVec2( Vec2 )
return self:SpawnFromVec3( PointVec2:GetVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone.
@ -20730,8 +20891,8 @@ end
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param Unit#UNIT HostUnit The air or ground unit dropping or unloading the group.
-- @param #number OuterRadius The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius The inner radius in meters where the new group will NOT be spawned.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
@ -20739,66 +20900,26 @@ function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, HostUnit, OuterRadius, InnerRadius, SpawnIndex } )
if HostUnit and HostUnit:IsAlive() then -- and HostUnit:getUnit(1):inAir() == false then
return self:SpawnFromVec3( HostUnit:GetPointVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
if SpawnIndex then
else
SpawnIndex = self.SpawnIndex + 1
end
return nil
end
if self:_GetSpawnIndex( SpawnIndex ) then
--- Will spawn a group from a hosting static. This function is mostly advisable to be used if you want to simulate spawning from buldings and structures (static buildings).
-- You can use the returned group to further define the route to be followed.
-- @param #SPAWN self
-- @param Static#STATIC HostStatic The static dropping or unloading the group.
-- @param #number OuterRadius (Optional) The outer radius in meters where the new group will be spawned.
-- @param #number InnerRadius (Optional) The inner radius in meters where the new group will NOT be spawned.
-- @param #number SpawnIndex (Optional) The index which group to spawn within the given zone.
-- @return Group#GROUP that was spawned.
-- @return #nil Nothing was spawned.
function SPAWN:SpawnFromStatic( HostStatic, OuterRadius, InnerRadius, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, HostStatic, OuterRadius, InnerRadius, SpawnIndex } )
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
local UnitPoint = HostUnit:GetVec2()
self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } )
--for PointID, Point in pairs( SpawnTemplate.route.points ) do
--Point.x = UnitPoint.x
--Point.y = UnitPoint.y
--Point.alt = nil
--Point.alt_type = nil
--end
SpawnTemplate.route.points[1].x = UnitPoint.x
SpawnTemplate.route.points[1].y = UnitPoint.y
if not InnerRadius then
InnerRadius = 10
end
if not OuterRadius then
OuterRadius = 50
end
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
if InnerRadius == 0 then
SpawnTemplate.units[UnitID].x = UnitPoint.x
SpawnTemplate.units[UnitID].y = UnitPoint.y
else
local CirclePos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius )
SpawnTemplate.units[UnitID].x = CirclePos.x
SpawnTemplate.units[UnitID].y = CirclePos.y
end
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
local SpawnPos = routines.getRandPointInCircle( UnitPoint, OuterRadius, InnerRadius )
local Point = {}
Point.type = "Turning Point"
Point.x = SpawnPos.x
Point.y = SpawnPos.y
Point.action = "Cone"
Point.speed = 5
table.insert( SpawnTemplate.route.points, 2, Point )
return self:SpawnWithIndex( self.SpawnIndex )
end
end
if HostStatic and HostStatic:IsAlive() then
return self:SpawnFromVec3( HostStatic:GetPointVec3(), OuterRadius, InnerRadius, SpawnIndex )
end
return nil
@ -20817,39 +20938,10 @@ function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, Zone, ZoneRandomize, SpawnIndex } )
if Zone then
if SpawnIndex then
if ZoneRandomize then
return self:SpawnFromVec2( Zone:GetVec2(), Zone:GetRadius(), 0, SpawnIndex )
else
SpawnIndex = self.SpawnIndex + 1
end
if self:_GetSpawnIndex( SpawnIndex ) then
local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate
if SpawnTemplate then
local ZonePoint
if ZoneRandomize == true then
ZonePoint = Zone:GetRandomVec2()
else
ZonePoint = Zone:GetVec2()
end
SpawnTemplate.route.points[1].x = ZonePoint.x
SpawnTemplate.route.points[1].y = ZonePoint.y
-- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do
local ZonePointUnit = Zone:GetRandomVec2()
SpawnTemplate.units[UnitID].x = ZonePointUnit.x
SpawnTemplate.units[UnitID].y = ZonePointUnit.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end
return self:SpawnWithIndex( self.SpawnIndex )
end
return self:SpawnFromVec2( Zone:GetVec2(), 0, 0, SpawnIndex )
end
end

View File

@ -0,0 +1,50 @@
local Iterations = 10
local Iteration = 1
GroundStatics = { "GroundStatic1", "GroundStatic2", "GroundStatic3" }
AirplaneStatics = { "AirplaneStatic1", "AirplaneStatic2", "AirplaneStatic3" }
HelicopterStatics = { "HelicopterStatic1", "HelicopterStatic2", "HelicopterStatic3" }
ShipStatics = { "ShipStatic1", "ShipStatic2", "ShipStatic3" }
HeightLimit = 500
SpawnGrounds = SPAWN:New("Ground"):Limit( 20, 10 )
SpawnAirplanes = SPAWN:New("Airplane"):Limit( 20, 10 )
SpawnHelicopters = SPAWN:New("Helicopter"):Limit( 20, 10 )
SpawnShips = SPAWN:New("Ship"):Limit( 20, 10 )
--- Spawns these groups slowly.
SCHEDULER:New( nil,
function( Interation, Iterations )
do
-- Spawn Ground
local StaticName = GroundStatics[ math.random( 1, 3 ) ]
local SpawnStatic = STATIC:FindByName( StaticName )
SpawnGrounds:SpawnFromUnit( SpawnStatic, 500, 100 )
end
do
-- Spawn Airplanes
local StaticName = AirplaneStatics[ math.random( 1, 3 ) ]
local SpawnStatic = STATIC:FindByName( StaticName )
SpawnAirplanes:SpawnFromUnit( SpawnStatic, 500, 100 )
end
do
-- Spawn Helicopters
local StaticName = HelicopterStatics[ math.random( 1, 3 ) ]
local SpawnStatic = STATIC:FindByName( StaticName )
SpawnHelicopters:SpawnFromUnit( SpawnStatic, 500, 100 )
end
do
-- Spawn Ships
local StaticName = ShipStatics[ math.random( 1, 3 ) ]
local SpawnStatic = STATIC:FindByName( StaticName )
SpawnShips:SpawnFromUnit( SpawnStatic, 500, 100 )
end
end, {}, 0, 15, 0.5
)

View File

@ -0,0 +1,50 @@
local Iterations = 10
local Iteration = 1
GroundUnits = { "GroundUnit1", "GroundUnit2", "GroundUnit3" }
AirplaneUnits = { "AirplaneUnit1", "AirplaneUnit2", "AirplaneUnit3" }
HelicopterUnits = { "HelicopterUnit1", "HelicopterUnit2", "HelicopterUnit3" }
ShipUnits = { "ShipUnit1", "ShipUnit2", "ShipUnit3" }
HeightLimit = 500
SpawnGrounds = SPAWN:New("Ground"):Limit( 20, 10 )
SpawnAirplanes = SPAWN:New("Airplane"):Limit( 20, 10 )
SpawnHelicopters = SPAWN:New("Helicopter"):Limit( 20, 10 )
SpawnShips = SPAWN:New("Ship"):Limit( 20, 10 )
--- Spawns these groups slowly.
SCHEDULER:New( nil,
function( Interation, Iterations )
do
-- Spawn Ground
local UnitName = GroundUnits[ math.random( 1, 3 ) ]
local SpawnUnit = UNIT:FindByName( UnitName )
SpawnGrounds:SpawnFromUnit( SpawnUnit, 10, 3 )
end
do
-- Spawn Airplanes
local UnitName = AirplaneUnits[ math.random( 1, 3 ) ]
local SpawnUnit = UNIT:FindByName( UnitName )
SpawnAirplanes:SpawnFromUnit( SpawnUnit )
end
do
-- Spawn Helicopters
local UnitName = HelicopterUnits[ math.random( 1, 3 ) ]
local SpawnUnit = UNIT:FindByName( UnitName )
SpawnHelicopters:SpawnFromUnit( SpawnUnit )
end
do
-- Spawn Ships
local UnitName = ShipUnits[ math.random( 1, 3 ) ]
local SpawnUnit = UNIT:FindByName( UnitName )
SpawnShips:SpawnFromUnit( SpawnUnit )
end
end, {}, 0, 15, 0.5
)

View File

@ -0,0 +1,50 @@
local Iterations = 10
local Iteration = 1
GroundZones = { "GroundZone1", "GroundZone2", "GroundZone3" }
AirplaneZones = { "AirplaneZone1", "AirplaneZone2", "AirplaneZone3" }
HelicopterZones = { "HelicopterZone1", "HelicopterZone2", "HelicopterZone3" }
ShipZones = { "ShipZone1", "ShipZone2", "ShipZone3" }
HeightLimit = 500
SpawnGrounds = SPAWN:New("Ground"):Limit( 20, 10 )
SpawnAirplanes = SPAWN:New("Airplane"):Limit( 20, 10 )
SpawnHelicopters = SPAWN:New("Helicopter"):Limit( 20, 10 )
SpawnShips = SPAWN:New("Ship"):Limit( 20, 10 )
--- Spawns these groups slowly.
SCHEDULER:New( nil,
function( Interation, Iterations )
do
-- Spawn Ground
local ZoneName = GroundZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnGrounds:SpawnFromVec2( SpawnVec3:GetVec2(), 500, 100 )
end
do
-- Spawn Airplanes
local ZoneName = AirplaneZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnAirplanes:SpawnFromVec2( SpawnVec3:GetVec2(), 500, 100 )
end
do
-- Spawn Helicopters
local ZoneName = HelicopterZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnHelicopters:SpawnFromVec2( SpawnVec3:GetVec2(), 500, 100 )
end
do
-- Spawn Ships
local ZoneName = ShipZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnShips:SpawnFromVec2( SpawnVec3:GetVec2(), 500, 100 )
end
end, {}, 0, 15, 0.5
)

View File

@ -0,0 +1,50 @@
local Iterations = 10
local Iteration = 1
GroundZones = { "GroundZone1", "GroundZone2", "GroundZone3" }
AirplaneZones = { "AirplaneZone1", "AirplaneZone2", "AirplaneZone3" }
HelicopterZones = { "HelicopterZone1", "HelicopterZone2", "HelicopterZone3" }
ShipZones = { "ShipZone1", "ShipZone2", "ShipZone3" }
HeightLimit = 500
SpawnGrounds = SPAWN:New("Ground"):Limit( 20, 10 )
SpawnAirplanes = SPAWN:New("Airplane"):Limit( 20, 10 )
SpawnHelicopters = SPAWN:New("Helicopter"):Limit( 20, 10 )
SpawnShips = SPAWN:New("Ship"):Limit( 20, 10 )
--- Spawns these groups slowly.
SCHEDULER:New( nil,
function( Interation, Iterations )
do
-- Spawn Ground
local ZoneName = GroundZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnGrounds:SpawnFromVec3( SpawnVec3:GetVec3(), 500, 100 )
end
do
-- Spawn Airplanes
local ZoneName = AirplaneZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnAirplanes:SpawnFromVec3( SpawnVec3:GetVec3(), 500, 100 )
end
do
-- Spawn Helicopters
local ZoneName = HelicopterZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnHelicopters:SpawnFromVec3( SpawnVec3:GetVec3(), 500, 100 )
end
do
-- Spawn Ships
local ZoneName = ShipZones[ math.random( 1, 3 ) ]
local SpawnVec3 = POINT_VEC3:NewFromVec3( ZONE:New( ZoneName ):GetPointVec3() )
SpawnShips:SpawnFromVec3( SpawnVec3:GetVec3(), 500, 100 )
end
end, {}, 0, 15, 0.5
)

View File

@ -167,6 +167,12 @@ In order to keep the credibility of the the author, I want to emphasize that the
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC2).New">POINT_VEC2:New(x, y, LandHeightAdd)</a></td>
<td class="summary">
<p>Create a new POINT_VEC2 object.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC2).NewFromVec2">POINT_VEC2:NewFromVec2(Vec2, LandHeightAdd)</a></td>
<td class="summary">
<p>Create a new POINT_VEC2 object from Vec2 coordinates.</p>
</td>
</tr>
<tr>
@ -261,6 +267,24 @@ In order to keep the credibility of the the author, I want to emphasize that the
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).GetNorthCorrectionRadians">POINT_VEC3:GetNorthCorrectionRadians()</a></td>
<td class="summary">
<p>Get a correction in radians of the real magnetic north of the POINT_VEC3.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).GetRandomVec2InRadius">POINT_VEC3:GetRandomVec2InRadius(OuterRadius, InnerRadius)</a></td>
<td class="summary">
<p>Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).GetRandomVec3InRadius">POINT_VEC3:GetRandomVec3InRadius(OuterRadius, InnerRadius)</a></td>
<td class="summary">
<p>Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).GetVec2">POINT_VEC3:GetVec2()</a></td>
<td class="summary">
<p>Return the coordinates of the POINT_VEC3 in Vec2 format.</p>
</td>
</tr>
<tr>
@ -654,6 +678,38 @@ The y coordinate of the Vec3 point, pointing to the Right.</p>
<p><em><a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC2).NewFromVec2" >
<strong>POINT_VEC2:NewFromVec2(Vec2, LandHeightAdd)</strong>
</a>
</dt>
<dd>
<p>Create a new POINT_VEC2 object from Vec2 coordinates.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a> Vec2 </em></code>:
The Vec2 point.</p>
</li>
<li>
<p><code><em> LandHeightAdd </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
@ -1018,6 +1074,86 @@ CorrectionRadians The correction in radians.</p>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).GetRandomVec2InRadius" >
<strong>POINT_VEC3:GetRandomVec2InRadius(OuterRadius, InnerRadius)</strong>
</a>
</dt>
<dd>
<p>Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSTypes.html##(Distance)">DCSTypes#Distance</a> OuterRadius </em></code>: </p>
</li>
<li>
<p><code><em><a href="DCSTypes.html##(Distance)">DCSTypes#Distance</a> InnerRadius </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>:</em>
Vec2</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).GetRandomVec3InRadius" >
<strong>POINT_VEC3:GetRandomVec3InRadius(OuterRadius, InnerRadius)</strong>
</a>
</dt>
<dd>
<p>Return a random Vec3 point within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSTypes.html##(Distance)">DCSTypes#Distance</a> OuterRadius </em></code>: </p>
</li>
<li>
<p><code><em><a href="DCSTypes.html##(Distance)">DCSTypes#Distance</a> InnerRadius </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="DCSTypes.html##(Vec3)">DCSTypes#Vec3</a>:</em>
Vec3</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).GetVec2" >
<strong>POINT_VEC3:GetVec2()</strong>
</a>
</dt>
<dd>
<p>Return the coordinates of the POINT_VEC3 in Vec2 format.</p>
<h3>Return value</h3>
<p><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>:</em>
The Vec2 coodinate.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).GetVec3" >
<strong>POINT_VEC3:GetVec3()</strong>
</a>

View File

@ -153,6 +153,9 @@ So in principle, the group list will contain all parameters and configurations a
<li><a href="##(SPAWN).Spawn">SPAWN.Spawn</a>: Spawn one new group based on the last spawned index.</li>
<li><a href="##(SPAWN).ReSpawn">SPAWN.ReSpawn</a>: Re-spawn a group based on a given index.</li>
<li><a href="##(SPAWN).SpawnScheduled">SPAWN.SpawnScheduled</a>: Spawn groups at scheduled but randomized intervals. You can use <a href="##(SPAWN).SpawnScheduleStart">SPAWN.SpawnScheduleStart</a> and <a href="##(SPAWN).SpawnScheduleStop">SPAWN.SpawnScheduleStop</a> to start and stop the schedule respectively.</li>
<li><a href="##(SPAWN).SpawnFromVec3">SPAWN.SpawnFromVec3</a>: Spawn a new group from a Vec3 coordinate. (The group will can be spawned at a point in the air).</li>
<li><a href="##(SPAWN).SpawnFromVec2">SPAWN.SpawnFromVec2</a>: Spawn a new group from a Vec2 coordinate. (The group will be spawned at land height ).</li>
<li><a href="##(SPAWN).SpawnFromStatic">SPAWN.SpawnFromStatic</a>: Spawn a new group from a structure, taking the position of a <a href="STATIC.html">STATIC</a>.</li>
<li><a href="##(SPAWN).SpawnFromUnit">SPAWN.SpawnFromUnit</a>: Spawn a new group taking the position of a <a href="UNIT.html">UNIT</a>.</li>
<li><a href="##(SPAWN).SpawnInZone">SPAWN.SpawnInZone</a>: Spawn a new group in a <a href="ZONE.html">ZONE</a>.</li>
</ul>
@ -350,12 +353,30 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnCleanUpTimeStamps">SPAWN.SpawnCleanUpTimeStamps</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnFromStatic">SPAWN:SpawnFromStatic(HostStatic, OuterRadius, InnerRadius, SpawnIndex)</a></td>
<td class="summary">
<p>Will spawn a group from a hosting static.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnFromUnit">SPAWN:SpawnFromUnit(HostUnit, OuterRadius, InnerRadius, SpawnIndex)</a></td>
<td class="summary">
<p>Will spawn a group from a hosting unit.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnFromVec2">SPAWN:SpawnFromVec2(Vec2, OuterRadius, InnerRadius, SpawnIndex)</a></td>
<td class="summary">
<p>Will spawn a group from a Vec2 in 3D space.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnFromVec3">SPAWN:SpawnFromVec3(Vec3, OuterRadius, InnerRadius, SpawnIndex)</a></td>
<td class="summary">
<p>Will spawn a group from a Vec3 in 3D space.</p>
</td>
</tr>
<tr>
@ -1358,6 +1379,65 @@ The group that was spawned. You can use this group for further actions.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).SpawnFromStatic" >
<strong>SPAWN:SpawnFromStatic(HostStatic, OuterRadius, InnerRadius, SpawnIndex)</strong>
</a>
</dt>
<dd>
<p>Will spawn a group from a hosting static.</p>
<p>This function is mostly advisable to be used if you want to simulate spawning from buldings and structures (static buildings).
You can use the returned group to further define the route to be followed.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="Static.html##(STATIC)">Static#STATIC</a> HostStatic </em></code>:
The static dropping or unloading the group.</p>
</li>
<li>
<p><code><em>#number OuterRadius </em></code>:
(Optional) The outer radius in meters where the new group will be spawned.</p>
</li>
<li>
<p><code><em>#number InnerRadius </em></code>:
(Optional) The inner radius in meters where the new group will NOT be spawned.</p>
</li>
<li>
<p><code><em>#number SpawnIndex </em></code>:
(Optional) The index which group to spawn within the given zone.</p>
</li>
</ul>
<h3>Return values</h3>
<ol>
<li>
<p><em><a href="Group.html##(GROUP)">Group#GROUP</a>:</em>
that was spawned.</p>
</li>
<li>
<p><em>#nil:</em>
Nothing was spawned.</p>
</li>
</ol>
</dd>
</dl>
<dl class="function">
@ -1387,13 +1467,133 @@ The air or ground unit dropping or unloading the group.</p>
<li>
<p><code><em>#number OuterRadius </em></code>:
The outer radius in meters where the new group will be spawned.</p>
(Optional) The outer radius in meters where the new group will be spawned.</p>
</li>
<li>
<p><code><em>#number InnerRadius </em></code>:
The inner radius in meters where the new group will NOT be spawned.</p>
(Optional) The inner radius in meters where the new group will NOT be spawned.</p>
</li>
<li>
<p><code><em>#number SpawnIndex </em></code>:
(Optional) The index which group to spawn within the given zone.</p>
</li>
</ul>
<h3>Return values</h3>
<ol>
<li>
<p><em><a href="Group.html##(GROUP)">Group#GROUP</a>:</em>
that was spawned.</p>
</li>
<li>
<p><em>#nil:</em>
Nothing was spawned.</p>
</li>
</ol>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).SpawnFromVec2" >
<strong>SPAWN:SpawnFromVec2(Vec2, OuterRadius, InnerRadius, SpawnIndex)</strong>
</a>
</dt>
<dd>
<p>Will spawn a group from a Vec2 in 3D space.</p>
<p>This function is mostly advisable to be used if you want to simulate spawning groups on the ground from air units, like vehicles.
Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
You can use the returned group to further define the route to be followed.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a> Vec2 </em></code>:
The Vec2 coordinates where to spawn the group.</p>
</li>
<li>
<p><code><em>#number OuterRadius </em></code>:
(Optional) The outer radius in meters where the new group will be spawned.</p>
</li>
<li>
<p><code><em>#number InnerRadius </em></code>:
(Optional) The inner radius in meters where the new group will NOT be spawned.</p>
</li>
<li>
<p><code><em>#number SpawnIndex </em></code>:
(Optional) The index which group to spawn within the given zone.</p>
</li>
</ul>
<h3>Return values</h3>
<ol>
<li>
<p><em><a href="Group.html##(GROUP)">Group#GROUP</a>:</em>
that was spawned.</p>
</li>
<li>
<p><em>#nil:</em>
Nothing was spawned.</p>
</li>
</ol>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).SpawnFromVec3" >
<strong>SPAWN:SpawnFromVec3(Vec3, OuterRadius, InnerRadius, SpawnIndex)</strong>
</a>
</dt>
<dd>
<p>Will spawn a group from a Vec3 in 3D space.</p>
<p>This function is mostly advisable to be used if you want to simulate spawning units in the air, like helicopters or airplanes.
Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
You can use the returned group to further define the route to be followed.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSTypes.html##(Vec3)">DCSTypes#Vec3</a> Vec3 </em></code>:
The Vec3 coordinates where to spawn the group.</p>
</li>
<li>
<p><code><em>#number OuterRadius </em></code>:
(Optional) The outer radius in meters where the new group will be spawned.</p>
</li>
<li>
<p><code><em>#number InnerRadius </em></code>:
(Optional) The inner radius in meters where the new group will NOT be spawned.</p>
</li>
<li>

View File

@ -151,7 +151,7 @@ If the DCS Static object does not exist or is nil, the STATIC methods will retur
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(STATIC).GetDCSUnit">STATIC:GetDCSUnit()</a></td>
<td class="name" nowrap="nowrap"><a href="##(STATIC).GetDCSObject">STATIC:GetDCSObject()</a></td>
<td class="summary">
</td>
@ -160,6 +160,12 @@ If the DCS Static object does not exist or is nil, the STATIC methods will retur
<td class="name" nowrap="nowrap"><a href="##(STATIC).Register">STATIC:Register(StaticName)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(STATIC).StaticName">STATIC.StaticName</a></td>
<td class="summary">
</td>
</tr>
</table>
@ -233,8 +239,8 @@ Name of the DCS <strong>Static</strong> as defined within the Mission Editor.</p
<dl class="function">
<dt>
<a id="#(STATIC).GetDCSUnit" >
<strong>STATIC:GetDCSUnit()</strong>
<a id="#(STATIC).GetDCSObject" >
<strong>STATIC:GetDCSObject()</strong>
</a>
</dt>
<dd>
@ -262,6 +268,20 @@ Name of the DCS <strong>Static</strong> as defined within the Mission Editor.</p
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(STATIC).StaticName" >
<strong>STATIC.StaticName</strong>
</a>
</dt>
<dd>
</dd>
</dl>