mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Added Init Methods to set Unit Positions on Spawn
This commit is contained in:
commit
a97e844aca
@ -772,10 +772,8 @@ end
|
||||
-- @usage
|
||||
--
|
||||
-- -- NATO helicopters engaging in the battle field.
|
||||
-- -- The KA-50 has waypoints Start point ( =0 or SP ), 1, 2, 3, 4, End point (= 5 or DP).
|
||||
-- -- Waypoints 2 and 3 will only be randomized. The others will remain on their original position with each new spawn of the helicopter.
|
||||
-- -- The randomization of waypoint 2 and 3 will take place within a radius of 2000 meters.
|
||||
-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):InitRandomizeRoute( 2, 2, 2000 )
|
||||
-- -- UNIT positions of this group will be randomized around the base unit #1 in a circle of 50 to 500 meters.
|
||||
-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):InitRandomizeUnits( true, 500, 50 )
|
||||
--
|
||||
function SPAWN:InitRandomizeUnits( RandomizeUnits, OuterRadius, InnerRadius )
|
||||
self:F( { self.SpawnTemplatePrefix, RandomizeUnits, OuterRadius, InnerRadius } )
|
||||
@ -791,6 +789,46 @@ function SPAWN:InitRandomizeUnits( RandomizeUnits, OuterRadius, InnerRadius )
|
||||
return self
|
||||
end
|
||||
|
||||
--- Spawn the UNITs of this group with individual relative positions to unit #1 and individual headings.
|
||||
-- @param #SPAWN self
|
||||
-- @param #table Positions Table of positions, needs to one entry per unit in the group(!). The table contains one table each for each unit, with x,y, and optionally z
|
||||
-- relative positions, and optionally an individual heading.
|
||||
-- @return #SPAWN
|
||||
-- @usage
|
||||
--
|
||||
-- -- NATO helicopter group of three units engaging in the battle field.
|
||||
-- local Positions = { [1] = {x = 0, y = 0, heading = 0}, [2] = {x = 50, y = 50, heading = 90}, [3] = {x = -50, y = 50, heading = 180} }
|
||||
-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):InitSetUnitRelativePositions(Positions)
|
||||
--
|
||||
function SPAWN:InitSetUnitRelativePositions(Positions)
|
||||
self:F({self.SpawnTemplatePrefix, Positions})
|
||||
|
||||
self.SpawnUnitsWithRelativePositions = true
|
||||
self.UnitsRelativePositions = Positions
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- Spawn the UNITs of this group with individual absolute positions and individual headings.
|
||||
-- @param #SPAWN self
|
||||
-- @param #table Positions Table of positions, needs to one entry per unit in the group(!). The table contains one table each for each unit, with x,y, and optionally z
|
||||
-- absolute positions, and optionally an individual heading.
|
||||
-- @return #SPAWN
|
||||
-- @usage
|
||||
--
|
||||
-- -- NATO helicopter group of three units engaging in the battle field.
|
||||
-- local Positions = { [1] = {x = 0, y = 0, heading = 0}, [2] = {x = 50, y = 50, heading = 90}, [3] = {x = -50, y = 50, heading = 180} }
|
||||
-- Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):InitSetUnitAbsolutePositions(Positions)
|
||||
--
|
||||
function SPAWN:InitSetUnitAbsolutePositions(Positions)
|
||||
self:F({self.SpawnTemplatePrefix, Positions})
|
||||
|
||||
self.SpawnUnitsWithAbsolutePositions = true
|
||||
self.UnitsAbsolutePositions = Positions
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- This method is rather complicated to understand. But I'll try to explain.
|
||||
-- This method becomes useful when you need to spawn groups with random templates of groups defined within the mission editor,
|
||||
-- but they will all follow the same Template route and have the same prefix name.
|
||||
@ -1343,7 +1381,38 @@ function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth )
|
||||
SpawnTemplate.units[UnitID].psi = -SpawnTemplate.units[UnitID].heading
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Individual relative unit positions + heading
|
||||
if self.SpawnUnitsWithRelativePositions and self.UnitsRelativePositions then
|
||||
local BaseX = SpawnTemplate.units[1].x or 0
|
||||
local BaseY = SpawnTemplate.units[1].y or 0
|
||||
local BaseZ = SpawnTemplate.units[1].z or 0
|
||||
for UnitID = 1, #SpawnTemplate.units do
|
||||
if self.UnitsRelativePositions[UnitID].heading then
|
||||
SpawnTemplate.units[UnitID].heading = math.rad(self.UnitsRelativePositions[UnitID].heading or 0)
|
||||
end
|
||||
SpawnTemplate.units[UnitID].x = BaseX + (self.UnitsRelativePositions[UnitID].x or 0)
|
||||
SpawnTemplate.units[UnitID].y = BaseY + (self.UnitsRelativePositions[UnitID].y or 0)
|
||||
if self.UnitsRelativePositions[UnitID].z then
|
||||
SpawnTemplate.units[UnitID].z = BaseZ + (self.UnitsRelativePositions[UnitID].z or 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Individual asbolute unit positions + heading
|
||||
if self.SpawnUnitsWithAbsolutePositions and self.UnitsAbsolutePositions then
|
||||
for UnitID = 1, #SpawnTemplate.units do
|
||||
if self.UnitsAbsolutePositions[UnitID].heading then
|
||||
SpawnTemplate.units[UnitID].heading = math.rad(self.UnitsAbsolutePositions[UnitID].heading or 0)
|
||||
end
|
||||
SpawnTemplate.units[UnitID].x = self.UnitsAbsolutePositions[UnitID].x or 0
|
||||
SpawnTemplate.units[UnitID].y = self.UnitsAbsolutePositions[UnitID].y or 0
|
||||
if self.UnitsAbsolutePositions[UnitID].z then
|
||||
SpawnTemplate.units[UnitID].z = self.UnitsAbsolutePositions[UnitID].z or 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Set livery.
|
||||
if self.SpawnInitLivery then
|
||||
for UnitID = 1, #SpawnTemplate.units do
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user