Files
lab1/platforms/brawler/alternatives/behavior_alt3911_evade_missile.txt

120 lines
3.9 KiB
Plaintext
Raw 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.
# ****************************************************************************
// converted BRAWLER v7.5 alt39.f
// Replicates the evade missile 3,9,1,1 alternative behavior
// GENERATES MISSILE EVASION MANEUVER
behavior alt3911_evade_missile
script_debug_writes off
script_variables
WsfQuantumTaskerProcessor processor;
WsfThreatProcessor threatProc;
WsfBrawlerPlatform brawlerPlatform;
//**********************************************************************//
//** debugging parameters **//
//**********************************************************************//
bool mDrawSteering = false;
//**********************************************************************//
//** alternative parameters **//
//**********************************************************************//
// Flag used to enable/disable this alternative
bool mAlternative3911Enabled = true;
// Alternative ID
int ilevel = 3;
int kalt = 9;
int icall = 1;
int lcall = 1;
// Maneuver Alternative flight values
Vec3 mDir0 = Vec3();
double mGMX = 1.0;
double mSpd0 = 3.0;
//**********************************************************************//
//********* VARIABLES BELOW THIS LINE ARE NOT FOR USER EDITING *********//
//**********************************************************************//
WsfDraw mDraw = WsfDraw();
double mLastTime = 0.0;
end_script_variables
on_init
if (PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR"))
{
processor = (WsfQuantumTaskerProcessor)PROCESSOR;
}
threatProc = (WsfThreatProcessor)PLATFORM.Processor("incoming_threats");
brawlerPlatform = (WsfBrawlerPlatform)PLATFORM;
end_on_init
precondition
#writeln_d(PLATFORM.Name(), " precondition behavior_alt3911_straight_flight, T=", TIME_NOW);
### Evaluate conditions that would prevent behavior alternative from running
if (!PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR"))
{
writeln_d("not a quantum tasker!");
return Failure("behavior not attached to a WSF_QUANTUM_TASKER_PROCESSOR");
}
if (!mAlternative3911Enabled)
{
writeln_d("behavior not enabled!");
return Failure("behavior alternative not enabled");
}
WsfTrack threat = threatProc.NearestThreat();
if (!threat.IsValid())
{
// This check equivalent to noneed in alt39.f
writeln_d("no incoming missiles");
return Failure("no incoming missiles");
}
// ALL CONDITIONS PASS
### Generate Maneuver Alternative
# iactn = 4
# lenalt = lactn(iactn)
# altdsc = altpk(3,9,1,1,0,0)
# call xmit(3,direv,dir0)
# gmx = gmxin
# spd0 = throtm(iacid) <- limits throttle to 2 if there are IR missiles coming at me
# spdmod = thrttl
// Get stored evasion direction vector
//Vec3 direvd = brawlerPlatform.EvasionDirection();
Vec3 direvd = brawlerPlatform.EvasionDirection();
mDir0 = direvd;
mGMX = brawlerPlatform.MaxAvailableGs();
mSpd0 = 2; // Always 2 for now
### Evaluate [Projected] Maneuver Alternative
double score = brawlerPlatform.EvaluateVectorWithThrottle(mDir0, mGMX, mSpd0, ilevel, kalt, icall, lcall);
return score;
end_precondition
execute
## what was evaluated should be actually performed now
brawlerPlatform.FlyVectorWithThrottle(mDir0, mGMX, mSpd0);
end_execute
end_behavior