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

189 lines
6.0 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 alt3b.f
// Replicates the illuminate 3,B,1,1 alternative behavior
// GENERATES ILLUMINATION MANEUVER
//
behavior alt3B11_illuminate
script_debug_writes off
script_variables
WsfQuantumTaskerProcessor processor;
WsfPerceptionProcessor perception;
WsfBrawlerPlatform brawlerPlatform;
WsfLocalTrack targetTrack;
//**********************************************************************//
//** debugging parameters **//
//**********************************************************************//
bool mDrawSteering = false;
//**********************************************************************//
//** alternative parameters **//
//**********************************************************************//
// Flag used to enable/disable this alternative
bool mAlternative3B11Enabled = true;
// Alternative ID
int ilevel = 3;
int kalt = 11;
int icall = 1;
int lcall = 1;
double mMaxSustainedG = 2.0;
double mLongRange = 5.0 * Math.M_PER_NM();
Vec3 dir0;
double gmx = 1.0;
double spd0;
// ALSO NEED:
// randomization to simulate imperfect decision making, valsig, read from MIND file, typically ~0.01
// Production rule bias, used in scoring of alternative
//**********************************************************************//
//********* 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;
}
perception = (WsfPerceptionProcessor)PLATFORM.Processor("perception");
brawlerPlatform = (WsfBrawlerPlatform)PLATFORM;
end_on_init
precondition
#writeln_d(PLATFORM.Name(), " precondition behavior_alt3B11_illuminate, 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");
}
### check if alternative should even be considered?
if (!mAlternative3B11Enabled)
{
writeln_d("behavior not enabled!");
return Failure("behavior alternative not enabled");
}
WsfTaskList tasks = processor.TasksReceivedOfType("WEAPON");
if(tasks.Count() <= 0)
{
return Failure("no weapon (target) tasks!");
}
WsfTask targetTask = tasks.Entry(0);
targetTrack = PLATFORM.MasterTrackList().Find(targetTask.LocalTrackId());
if (!targetTrack.IsValid())
{
return Failure("no target track!");
}
## alt3b.f : lines 84 - 127
# if(!lillum)
# {
# return Failure("lillum == false");
# }
#
dir0 = Vec3.Construct(0,0,0);
#if(nbvr == 0) call nabort('ALT3B...NBVR=0')
# #LBM - only fly against targetTrack, not all things
# do 50 ibvr=1,nbvr
# if (jtgbvr(ibvr).lt.0) call nabort('ALT3B...JTGBVR IS ZERO')
# if (jtgbvr(ibvr).eq.0) goto 50
# iac = mmindt(jtgbvr(ibvr))
# if (iac.eq.0) goto 50
#call vdir(xp(1,me),xp(1,iac),dx)
Vec3 dx = RelativePositionNED(PLATFORM.Location(), targetTrack.CurrentLocation());
dx.Normalize();
Vec3 vp = PLATFORM.VelocityNED();
Vec3 dir0i = vorth(vp,dx);
#call veclin(0.5/xmag(dir0i),dir0i,root3*0.5,dx,dir0i)
//missile phases:
//pinfr=1, psema=2, pactr=3, pcomg=4, pguns=5, phor=6, p_act_ir_1=7, p_inertial=8, pnewg=9
int kndbvr; //TODO? = pcomg if command guided launch
int psema = 2; //semi active
int pcomg = 4; //command guided
if (kndbvr == psema)
{
# SEMI-ACTIVE MISSILE, GIVE FULL WEIGHT
#call vsum(dir0,dir0i,dir0);
}
else if (kndbvr == pcomg)
{
# ACTIVE RADAR MISSILE, PRESUMABLY PRE-ACQUISITION
# GIVE 50% WEIGHT TO ITS ILLUM VECTOR
#call vecinc(dir0,0.5,dir0i,dir0)
}
else
{
#call nabort('ALT3B...unknown/illegal kndbvr')
string msg = write_str("T=",TIME_NOW,", alt ", ilevel, kalt, icall, lcall, " unknown/illegal kndbvr");
writeln_d(msg);
return Failure(msg);
}
# If BVR target is not to be considered in high detail do not
# illuminate
if (dir0.Magnitude() == 0.0)
{
string msg = write_str("T=",TIME_NOW,", alt ", ilevel, kalt, icall, lcall, " dir0 == zero");
writeln_d(msg);
return Failure(msg);
}
#call unitv(dir0,dir0)
int iactn = 4;
gmx = 2.0;
double bvrmch = 1.0; //TODO - find for real
double fmachp = 1.0; //TODO - find for real
spd0 = PLATFORM.Speed() * MATH.Max(1.0,bvrmch/fmachp); #spd0 in meter/seconds units here
int spdmod = 1; //(desspd = 1, thrttl = 2, desacc = 3)
### Evaluate [Projected] Maneuver Alternative
double score = brawlerPlatform.EvaluateVectorWithSpeed(dir0, gmx, spd0, ilevel, kalt, icall, lcall);
return score;
end_precondition
execute
## what was evaluated should be actually performed now
brawlerPlatform.FlyVectorWithSpeed(dir0, gmx, spd0);
end_execute
end_behavior