COORDINATE

- Improved Smoke and Fire and Smoke functions by adding delay and duration parameters
This commit is contained in:
Frank 2025-04-26 23:39:22 +02:00
parent ccada18a6a
commit ac4b620f16
3 changed files with 158 additions and 79 deletions

View File

@ -974,7 +974,7 @@ do -- Scheduling
-- @param #BASE self -- @param #BASE self
-- @param #number Start Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called. -- @param #number Start Specifies the amount of seconds that will be waited before the scheduling is started, and the event function is called.
-- @param #function SchedulerFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in SchedulerArguments. -- @param #function SchedulerFunction The event function to be called when a timer event occurs. The event function needs to accept the parameters specified in SchedulerArguments.
-- @param #table ... Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }. -- @param ... Optional arguments that can be given as part of scheduler. The arguments need to be given as a table { param1, param 2, ... }.
-- @return #string The Schedule ID of the planned schedule. -- @return #string The Schedule ID of the planned schedule.
function BASE:ScheduleOnce( Start, SchedulerFunction, ... ) function BASE:ScheduleOnce( Start, SchedulerFunction, ... )

View File

@ -25,7 +25,7 @@
do -- COORDINATE do -- COORDINATE
--- --- Coordinate class
-- @type COORDINATE -- @type COORDINATE
-- @field #string ClassName Name of the class -- @field #string ClassName Name of the class
-- @field #number x Component of the 3D vector. -- @field #number x Component of the 3D vector.
@ -2118,14 +2118,35 @@ do -- COORDINATE
end end
--- Smokes the point in a color. --- Create colored smoke the point. The smoke we last up to 5 min (DCS limitation) but you can optionally specify a shorter duration or stop it manually.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param Utilities.Utils#SMOKECOLOR SmokeColor -- @param #number SmokeColor Color of smoke, e.g. `SMOKECOLOR.Green` for green smoke.
-- @param #string name (Optional) Name if you want to stop the smoke early (normal duration: 5mins) -- @param #number Duration (Optional) Duration of the smoke in seconds. DCS stopps the smoke automatically after 5 min.
function COORDINATE:Smoke( SmokeColor, name ) -- @param #number Delay (Optional) Delay before the smoke is started in seconds.
self:F2( { SmokeColor } ) -- @param #string Name (Optional) Name if you want to stop the smoke early (normal duration: 5mins)
self.firename = name or "Smoke-"..math.random(1,100000) -- @return #COORDINATE self
trigger.action.smoke( self:GetVec3(), SmokeColor, self.firename ) function COORDINATE:Smoke( SmokeColor, Duration, Delay, Name)
self:F2( { SmokeColor, Name, Duration, Delay } )
SmokeColor=SmokeColor or SMOKECOLOR.Green
if Delay and Delay>0 then
self:ScheduleOnce(Delay, COORDINATE.Smoke, self, SmokeColor, Duration, 0, Name)
else
-- Create a name which is used to stop the smoke manually
self.firename = Name or "Smoke-"..math.random(1,100000)
-- Create smoke
trigger.action.smoke( self:GetVec3(), SmokeColor, self.firename )
-- Stop smoke
if Duration and Duration>0 then
self:ScheduleOnce(Duration, COORDINATE.StopSmoke, self, self.firename )
end
end
return self
end end
--- Stops smoking the point in a color. --- Stops smoking the point in a color.
@ -2137,49 +2158,83 @@ do -- COORDINATE
--- Smoke the COORDINATE Green. --- Smoke the COORDINATE Green.
-- @param #COORDINATE self -- @param #COORDINATE self
function COORDINATE:SmokeGreen() -- @param #number Duration (Optional) Duration of the smoke in seconds. DCS stopps the smoke automatically after 5 min.
self:F2() -- @param #number Delay (Optional) Delay before the smoke is started in seconds.
self:Smoke( SMOKECOLOR.Green ) -- @return #COORDINATE self
function COORDINATE:SmokeGreen(Duration, Delay)
self:Smoke( SMOKECOLOR.Green, Duration, Delay )
return self
end end
--- Smoke the COORDINATE Red. --- Smoke the COORDINATE Red.
-- @param #COORDINATE self -- @param #COORDINATE self
function COORDINATE:SmokeRed() -- @param #number Duration (Optional) Duration of the smoke in seconds. DCS stopps the smoke automatically after 5 min.
self:F2() -- @param #number Delay (Optional) Delay before the smoke is started in seconds.
self:Smoke( SMOKECOLOR.Red ) -- @return #COORDINATE self
function COORDINATE:SmokeRed(Duration, Delay)
self:Smoke( SMOKECOLOR.Red, Duration, Delay )
return self
end end
--- Smoke the COORDINATE White. --- Smoke the COORDINATE White.
-- @param #COORDINATE self -- @param #COORDINATE self
function COORDINATE:SmokeWhite() -- @param #number Duration (Optional) Duration of the smoke in seconds. DCS stopps the smoke automatically after 5 min.
self:F2() -- @param #number Delay (Optional) Delay before the smoke is started in seconds.
self:Smoke( SMOKECOLOR.White ) -- @return #COORDINATE self
function COORDINATE:SmokeWhite(Duration, Delay)
self:Smoke( SMOKECOLOR.White, Duration, Delay )
return self
end end
--- Smoke the COORDINATE Orange. --- Smoke the COORDINATE Orange.
-- @param #COORDINATE self -- @param #COORDINATE self
function COORDINATE:SmokeOrange() -- @param #number Duration (Optional) Duration of the smoke in seconds. DCS stopps the smoke automatically after 5 min.
self:F2() -- @param #number Delay (Optional) Delay before the smoke is started in seconds.
self:Smoke( SMOKECOLOR.Orange ) -- @return #COORDINATE self
function COORDINATE:SmokeOrange(Duration, Delay)
self:Smoke( SMOKECOLOR.Orange, Duration, Delay )
return self
end end
--- Smoke the COORDINATE Blue. --- Smoke the COORDINATE Blue.
-- @param #COORDINATE self -- @param #COORDINATE self
function COORDINATE:SmokeBlue() -- @param #number Duration (Optional) Duration of the smoke in seconds. DCS stopps the smoke automatically after 5 min.
self:F2() -- @param #number Delay (Optional) Delay before the smoke is started in seconds.
self:Smoke( SMOKECOLOR.Blue ) -- @return #COORDINATE self
function COORDINATE:SmokeBlue(Duration, Delay)
self:Smoke( SMOKECOLOR.Blue, Duration, Delay )
return self
end end
--- Big smoke and fire at the coordinate. --- Big smoke and fire at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param Utilities.Utils#BIGSMOKEPRESET preset Smoke preset (1=small smoke and fire, 2=medium smoke and fire, 3=large smoke and fire, 4=huge smoke and fire, 5=small smoke, 6=medium smoke, 7=large smoke, 8=huge smoke). -- @param #number Preset Smoke preset (1=small smoke and fire, 2=medium smoke and fire, 3=large smoke and fire, 4=huge smoke and fire, 5=small smoke, 6=medium smoke, 7=large smoke, 8=huge smoke).
-- @param #number density (Optional) Smoke density. Number in [0,...,1]. Default 0.5. -- @param #number Density (Optional) Smoke density. Number in [0,...,1]. Default 0.5.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
function COORDINATE:BigSmokeAndFire( preset, density, name ) -- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
self:F2( { preset=preset, density=density } ) -- @param #string Name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
density=density or 0.5 -- @return #COORDINATE self
self.firename = name or "Fire-"..math.random(1,10000) function COORDINATE:BigSmokeAndFire( Preset, Density, Duration, Delay, Name )
trigger.action.effectSmokeBig( self:GetVec3(), preset, density, self.firename ) self:F2( { preset=Preset, density=Density } )
Preset=Preset or BIGSMOKEPRESET.SmallSmokeAndFire
Density=Density or 0.5
if Delay and Delay>0 then
self:ScheduleOnce(Delay, COORDINATE.BigSmokeAndFire, self, Preset, Density, Duration, 0, Name)
else
self.firename = Name or "Fire-"..math.random(1,10000)
trigger.action.effectSmokeBig( self:GetVec3(), Preset, Density, self.firename )
-- Stop smoke
if Duration and Duration>0 then
self:ScheduleOnce(Duration, COORDINATE.StopBigSmokeAndFire, self, self.firename )
end
end
return self
end end
--- Stop big smoke and fire at the coordinate. --- Stop big smoke and fire at the coordinate.
@ -2192,82 +2247,98 @@ do -- COORDINATE
--- Small smoke and fire at the coordinate. --- Small smoke and fire at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number Density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
function COORDINATE:BigSmokeAndFireSmall( density, name ) -- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
self:F2( { density=density } ) -- @param #string Name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
density=density or 0.5 -- @return #COORDINATE self
self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmokeAndFire, density, name) function COORDINATE:BigSmokeAndFireSmall( Density, Duration, Delay, Name )
self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmokeAndFire, Density, Duration, Delay, Name)
return self
end end
--- Medium smoke and fire at the coordinate. --- Medium smoke and fire at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeAndFireMedium( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeAndFireMedium( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmokeAndFire, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmokeAndFire, density, name) return self
end end
--- Large smoke and fire at the coordinate. --- Large smoke and fire at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeAndFireLarge( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeAndFireLarge( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmokeAndFire, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmokeAndFire, density, name) return self
end end
--- Huge smoke and fire at the coordinate. --- Huge smoke and fire at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeAndFireHuge( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeAndFireHuge( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmokeAndFire, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmokeAndFire, density, name) return self
end end
--- Small smoke at the coordinate. --- Small smoke at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeSmall( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeSmall( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmoke, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.SmallSmoke, density, name) return self
end end
--- Medium smoke at the coordinate. --- Medium smoke at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeMedium( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeMedium( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmoke, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.MediumSmoke, density, name) return self
end end
--- Large smoke at the coordinate. --- Large smoke at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeLarge( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeLarge( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmoke, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.LargeSmoke, density,name) return self
end end
--- Huge smoke at the coordinate. --- Huge smoke at the coordinate.
-- @param #COORDINATE self -- @param #COORDINATE self
-- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5. -- @param #number density (Optional) Smoke density. Number between 0 and 1. Default 0.5.
-- @param #number Duration (Optional) Duration of the smoke and fire in seconds.
-- @param #number Delay (Optional) Delay before the smoke and fire is started in seconds.
-- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number. -- @param #string name (Optional) Name of the fire to stop it later again if not using the same COORDINATE object. Defaults to "Fire-" plus a random 5-digit-number.
function COORDINATE:BigSmokeHuge( density, name ) -- @return #COORDINATE self
self:F2( { density=density } ) function COORDINATE:BigSmokeHuge( Density, Duration, Delay, Name )
density=density or 0.5 self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmoke, Density, Duration, Delay, Name)
self:BigSmokeAndFire(BIGSMOKEPRESET.HugeSmoke, density,name) return self
end end
--- Flares the point in a color. --- Flares the point in a color.

View File

@ -12,27 +12,35 @@
-- @module Utilities.Utils -- @module Utilities.Utils
-- @image MOOSE.JPG -- @image MOOSE.JPG
--- --- Smoke color enum `trigger.smokeColor`.
-- @type SMOKECOLOR -- @type SMOKECOLOR
-- @field Green -- @field #number Green Green smoke (0)
-- @field Red -- @field #number Red Red smoke (1)
-- @field White -- @field #number White White smoke (2)
-- @field Orange -- @field #number Orange Orange smoke (3)
-- @field Blue -- @field #number Blue Blue smoke (4)
SMOKECOLOR = trigger.smokeColor -- #SMOKECOLOR SMOKECOLOR = trigger.smokeColor -- #SMOKECOLOR
--- --- Flare colur enum `trigger.flareColor`.
-- @type FLARECOLOR -- @type FLARECOLOR
-- @field Green -- @field #number Green (0)
-- @field Red -- @field #number Red Red flare (1)
-- @field White -- @field #number White White flare (2)
-- @field Yellow -- @field #number Yellow Yellow flare (3)
FLARECOLOR = trigger.flareColor -- #FLARECOLOR FLARECOLOR = trigger.flareColor -- #FLARECOLOR
--- Big smoke preset enum. --- Big smoke preset enum.
-- @type BIGSMOKEPRESET -- @type BIGSMOKEPRESET
-- @field #number SmallSmokeAndFire Small moke and fire (1)
-- @field #number MediumSmokeAndFire Medium smoke and fire (2)
-- @field #number LargeSmokeAndFire Large smoke and fire (3)
-- @field #number HugeSmokeAndFire Huge smoke and fire (4)
-- @field #number SmallSmoke Small smoke (5)
-- @field #number MediumSmoke Medium smoke (6)
-- @field #number LargeSmoke Large smoke (7)
-- @field #number HugeSmoke Huge smoke (8)
BIGSMOKEPRESET = { BIGSMOKEPRESET = {
SmallSmokeAndFire=1, SmallSmokeAndFire=1,
MediumSmokeAndFire=2, MediumSmokeAndFire=2,
@ -351,7 +359,7 @@ end
-- @return #string Table as a string. -- @return #string Table as a string.
UTILS.OneLineSerialize = function( tbl ) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function UTILS.OneLineSerialize = function( tbl ) -- serialization of a table all on a single line, no comments, made to replace old get_table_string function
lookup_table = {} local lookup_table = {}
local function _Serialize( tbl ) local function _Serialize( tbl )
@ -490,7 +498,7 @@ end
--- Counts the number of elements in a table. --- Counts the number of elements in a table.
-- @param #table T Table to count -- @param #table T Table to count
-- @return #int Number of elements in the table -- @return #number Number of elements in the table
function UTILS.TableLength(T) function UTILS.TableLength(T)
local count = 0 local count = 0
for _ in pairs(T or {}) do count = count + 1 end for _ in pairs(T or {}) do count = count + 1 end