mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge remote-tracking branch 'refs/remotes/origin/master' into Detection
This commit is contained in:
commit
2befd34681
@ -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}.
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
)
|
||||
Binary file not shown.
@ -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
|
||||
)
|
||||
Binary file not shown.
@ -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
|
||||
)
|
||||
Binary file not shown.
@ -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
|
||||
)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user