95 lines
3.0 KiB
Plaintext
95 lines
3.0 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.
|
||
|
|
# ****************************************************************************
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
behavior default-flight
|
||
|
|
|
||
|
|
script_debug_writes off
|
||
|
|
|
||
|
|
script_variables
|
||
|
|
bool mDrawRoute = false;
|
||
|
|
WsfDraw mDraw = WsfDraw();
|
||
|
|
bool mResumeDefaultRoute = true;
|
||
|
|
double cDEFAULT_SPEED = 450.0 * MATH.MPS_PER_NMPH();
|
||
|
|
double cDEFAULT_ACCEL = 7.5 * Earth.ACCEL_OF_GRAVITY(); // 7.5 G (m/s^2)
|
||
|
|
double cLARGE_UPDATE_INTERVAL = 3.0; // update once every 3 seconds
|
||
|
|
end_script_variables
|
||
|
|
|
||
|
|
script void DrawRoute()
|
||
|
|
WsfRoute currRoute = PLATFORM.Route();
|
||
|
|
if (currRoute.IsValid())
|
||
|
|
{
|
||
|
|
//PLATFORM.Comment("draw current route");
|
||
|
|
mDraw.SetLayer("behavior default=flight");
|
||
|
|
mDraw.Erase(PLATFORM.Name());
|
||
|
|
mDraw.SetId(PLATFORM.Name());
|
||
|
|
mDraw.SetColor(0,1,1);
|
||
|
|
mDraw.SetLineSize(2);
|
||
|
|
mDraw.SetLineStyle("dash_dot2");
|
||
|
|
mDraw.BeginPolyline();
|
||
|
|
for (int i=0; i<currRoute.Size(); i=i+1)
|
||
|
|
{
|
||
|
|
mDraw.Vertex(currRoute.Waypoint(i).Location());
|
||
|
|
}
|
||
|
|
mDraw.End();
|
||
|
|
}
|
||
|
|
end_script
|
||
|
|
|
||
|
|
|
||
|
|
precondition
|
||
|
|
writeln_d("precondition default-flight");
|
||
|
|
return true;
|
||
|
|
end_precondition
|
||
|
|
|
||
|
|
|
||
|
|
execute
|
||
|
|
writeln_d(PLATFORM.Name(), " executing default-flight, T=", TIME_NOW);
|
||
|
|
//PLATFORM.Comment("default-flight");
|
||
|
|
|
||
|
|
if (mResumeDefaultRoute)
|
||
|
|
{
|
||
|
|
bool success = false;
|
||
|
|
//go at default speed; this gets overwritten if route waypoint has defined a speed
|
||
|
|
success = PLATFORM.GoToSpeed(cDEFAULT_SPEED, cDEFAULT_ACCEL, true);
|
||
|
|
//return to route, at the last target route point as re-entry
|
||
|
|
#success = success && PLATFORM.ReturnToRoute();
|
||
|
|
#extern bool ReEnterRoute(WsfPlatform);
|
||
|
|
success = success && ReEnterRoute(PLATFORM);
|
||
|
|
|
||
|
|
if (!success)
|
||
|
|
{
|
||
|
|
string msg = "ERROR: transition to default flight, could not return to route!";
|
||
|
|
PLATFORM.Comment(msg);
|
||
|
|
writeln_d(" T=", TIME_NOW, " ", PLATFORM.Name(), " ", msg);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
string msg = write_str("returning to route: ", PLATFORM.Route().Name());
|
||
|
|
//PLATFORM.Comment(msg);
|
||
|
|
writeln_d(" T=", TIME_NOW, " ", PLATFORM.Name(), " ", msg);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
extern double cDEFAULT_ALTITUDE;
|
||
|
|
#extern bool FlyHold (WsfPlatform, double, double, double);
|
||
|
|
FlyHold( PLATFORM, PLATFORM.Heading(), cDEFAULT_ALTITUDE, cDEFAULT_SPEED);
|
||
|
|
}
|
||
|
|
|
||
|
|
#PROCESSOR.SetUpdateInterval(cLARGE_UPDATE_INTERVAL);
|
||
|
|
|
||
|
|
if (mDrawRoute)
|
||
|
|
{
|
||
|
|
DrawRoute();
|
||
|
|
}
|
||
|
|
end_execute
|
||
|
|
|
||
|
|
end_behavior
|