Files
lab1/platforms/red_radar_tactics.txt
2025-09-12 15:20:28 +08:00

84 lines
2.9 KiB
Plaintext

# ****************************************************************************
# CUI
#
# The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
#
# The use, dissemination or disclosure of data in this file is subject to
# limitation or restriction. See accompanying README and LICENSE for details.
# ****************************************************************************
# * * ************************************** * *
# * ****** Demonstration input file ****** *
# * ****** UNCLASSIFIED ****** *
# * * ************************************** * *
# this file defines a simple task manager which implements very basic EMCON
# rules for EW/ACQ type radar players
processor RED_RADAR_TACTICS WSF_TASK_PROCESSOR
script_variables
bool cEVALUATE_EMCON_TURN_OFF = false;
end_script_variables
script void EvaluateEmcon()
int sensorCount = PLATFORM.SensorCount();
if (sensorCount > 0)
{
WsfSensor sensor = PLATFORM.SensorEntry(0);
if (sensor.IsTurnedOff())
{
# sensor is off. Turn it on if we've received a task or
# we are put on alert
if ((TasksReceived() > 0) ||
(OperatingLevelFor("ENGAGE") > 0))
{
for (int entry = 0; entry < sensorCount; entry = entry + 1)
{
PLATFORM.SensorEntry(entry).TurnOn();
}
}
}
else if (sensor.IsTurnedOn() &&
cEVALUATE_EMCON_TURN_OFF)
{
# sensor is on. Turn it off if we have no tasks and are
# not on alert
if ((TasksReceived() < 1) &&
(OperatingLevelFor("ENGAGE") < 1))
{
for (int entry = 0; entry < sensorCount; entry = entry + 1)
{
PLATFORM.SensorEntry(entry).TurnOff();
}
}
}
}
end_script
# this cannot be done in 'on_initialize' because the commander may not yet exist
execute at_time 0.1 seconds relative
# if my commander is in the category ENGAGEMENT then we will execute
# the emcon/turn-off logic
WsfPlatform commander = PLATFORM.Commander();
if (commander.IsValid() &&
commander.CategoryMemberOf("ENGAGEMENT"))
{
cEVALUATE_EMCON_TURN_OFF = true;
}
end_execute
# evaluate emcon whenever we have a change in assignment or alert level
script void on_task_assign(WsfTask aTask, WsfTrack aTrack)
ExecuteScriptAtTime(TIME_NOW + RANDOM.Uniform(0.0, 4.0), "EvaluateEmcon");
end_script
script void on_task_cancel(WsfTask aTask)
ExecuteScriptAtTime(TIME_NOW + RANDOM.Uniform(0.0, 4.0), "EvaluateEmcon");
end_script
script void on_operating_level_change(string aName)
ExecuteScriptAtTime(TIME_NOW + RANDOM.Uniform(0.0, 4.0), "EvaluateEmcon");
end_script
end_processor