SeaQueen
Posts: 1451
Joined: 4/14/2007 From: Washington D.C. Status: offline
|
Hi Guys! I wrote some code for causing SAMS to "blink" their search radars randomly according to fixed intervals (e.g. 15 of the last 45 minutes). First I created a "Scenario Start" event with a "Scenario Load" trigger, and a LUA action called, "Set Scenario Variables"
-- these variables control the fraction of the time a SAM site will emit
ScenEdit_SetKeyValue('TimeToEmit', '15') -- minutes
ScenEdit_SetKeyValue('TotalTimeInterval', '30') -- minutes
-- e.g. "15 of the last 30 minutes"
Next I created another LUA action to be fired at the scenario start called "Initialize SAM Emitting Times" This creates two tables which will be used later; samSiteList and timeEmitting. It then initializes the "timeEmitting" table with random values keyed to the guids stored in samSiteList.
-- contains the guid of each SAM site
samSiteList = {'4346229a-6bdd-4328-9e96-9243be190055', '11de0af6-3989-4e80-bdbc-ff4b1015c6b7', '2fd972c5-fa9c-47eb-ba92-5302bb4487eb'} -- list of all SAM sites in the scenario which will "blink" their search radars
-- each SAM site will start in a different state of having emitted for 'm' minutes, this table will store that state
timeEmitting = {}
--gets total time interval
local t_max = tonumber(ScenEdit_GetKeyValue('TotalTimeInterval'))
for i, s in ipairs(samSiteList) do
timeEmitting[s]= math.random(0, t_max) -- randomizes the starting state of each SAM site
end
Finally, I created an "Every Minute" trigger with another LUA action. That event determines which SAM sites need to be active and passive. The code which goes in the action is:
local emit_max = tonumber(ScenEdit_GetKeyValue('TimeToEmit')) --- gets maximum emission time from the scenario variables
local t_max = tonumber(ScenEdit_GetKeyValue('TotalTimeInterval')) -- gets maximum total time interval from the scenario variables
-- loops over the sites on the samSiteList (see Initialize SAM Emitting Times action)
-- determines if a SAM site has emitted for more than it's allocated emission time
-- if it has then it turns the site off
-- checks to see if the total interval has bee exceeded
-- if it has, it resets the interval to zero
for i, s in ipairs(samSiteList) do
timeEmitting[s] = timeEmitting[s] + 1
if ( timeEmitting[s] >= emit_max) then
ScenEdit_SetEMCON('Unit', s, 'Radar=Passive')
else
ScenEdit_SetEMCON('Unit', s, 'Radar=Active')
end
if( timeEmitting[s] >= t_max) then
timeEmitting[s] = 0
end
end
< Message edited by SeaQueen -- 7/5/2018 9:49:02 PM >
|