Files
lab1/processors/quantum_agents/aiai/behavior_search.txt

108 lines
3.0 KiB
Plaintext
Raw Permalink Normal View History

2025-09-12 15:20:28 +08:00
# ****************************************************************************
# 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.
# ****************************************************************************
# Search behavior that can be driven by locations
# provided by a heat map
behavior search
script_debug_writes off
script_variables
WsfQuantumTaskerProcessor processor;
string mSearchRadarName = "radar"; // replace with sensor name on platform
bool mDrawSteering = true;
WsfDraw mDraw = WsfDraw();
end_script_variables
on_init
if (PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR"))
{
processor = (WsfQuantumTaskerProcessor)PROCESSOR;
}
end_on_init
precondition
writeln_d("T= ",TIME_NOW, " precondition search");
if (!PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR"))
{
return Failure("behavior not attached to a quantum tasker processor!");
}
WsfTaskList tasks = processor.TasksReceivedOfType("SEARCH");
writeln_d(" Tasks count is ", tasks.Count());
if (tasks.Count() <= 0)
{
return Failure("No search tasks received");
}
else
{
return true;
}
return false;
end_precondition
execute
writeln_d(PLATFORM.Name(), " executing search, T=", TIME_NOW);
WsfGeoPoint targetPoint = WsfGeoPoint();
double ownSpeed = PLATFORM.Speed();
WsfTaskList tasks = processor.TasksReceivedOfType("SEARCH");
WsfTask task = tasks.Entry(0);
if (task.IsValid() && task.AuxDataExists("HeatPoint"))
{
writeln_d(PLATFORM.Name(), " has HeatPoint aux data, T=", TIME_NOW);
targetPoint = (WsfGeoPoint)task.AuxDataObject("HeatPoint");
}
else
{
return;
}
//make sure radar is on
WsfSensor searchRadar = PLATFORM.Sensor(mSearchRadarName);
if (searchRadar.IsValid())
{
if (!searchRadar.IsTurnedOn())
{
searchRadar.TurnOn();
writeln_d(PLATFORM.Name(), " turned on active radar ", searchRadar);
}
else
{
writeln_d(" radar already turned on");
}
}
if (mDrawSteering == true)
{
mDraw.SetLayer("behavior_search");
mDraw.SetDuration(PROCESSOR.UpdateInterval());
mDraw.SetColor(1.0, 0.5, 0.0);
mDraw.SetLineSize(1);
mDraw.BeginLines();
mDraw.Vertex(PLATFORM.Location());
mDraw.Vertex(targetPoint);
mDraw.End();
}
string msg = write_str("pursue-target: ", targetPoint, " at speed ", (string)ownSpeed);
writeln_d(" T=", TIME_NOW, " ", PLATFORM.Name(), " ", msg);
FlyTarget(PLATFORM, targetPoint, ownSpeed);
end_execute
end_behavior