init
This commit is contained in:
264
platforms/brawler/alternatives/behavior_pilot_posture.txt
Normal file
264
platforms/brawler/alternatives/behavior_pilot_posture.txt
Normal file
@@ -0,0 +1,264 @@
|
||||
# ****************************************************************************
|
||||
# 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 pilot_posture
|
||||
|
||||
script_debug_writes off
|
||||
|
||||
script_variables
|
||||
WsfTask targetTask;
|
||||
WsfLocalTrack targetTrack;
|
||||
WsfQuantumTaskerProcessor processor;
|
||||
WsfBrawlerPlatform brawlerPlatform;
|
||||
double root3 = 1.732050808; # pcon.fi
|
||||
double splita = 45.0; # MIND file, TODO - use read in value
|
||||
end_script_variables
|
||||
|
||||
|
||||
on_init
|
||||
if (PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR"))
|
||||
{
|
||||
processor = (WsfQuantumTaskerProcessor)PROCESSOR;
|
||||
}
|
||||
brawlerPlatform = (WsfBrawlerPlatform)PLATFORM;
|
||||
end_on_init
|
||||
|
||||
|
||||
precondition
|
||||
|
||||
WsfTaskList tasks = processor.TasksReceivedOfType("WEAPON");
|
||||
if(tasks.Count() <= 0)
|
||||
{
|
||||
string err = write_str("no weapon (target) tasks!");
|
||||
writeln_d(err);
|
||||
return Failure(err);
|
||||
}
|
||||
targetTask = tasks.Entry(0);
|
||||
targetTrack = PLATFORM.MasterTrackList().Find(targetTask.LocalTrackId());
|
||||
if (!targetTrack.IsValid() || targetTrack.TargetKilled())
|
||||
{
|
||||
string err = write_str("no target track!");
|
||||
writeln_d(err);
|
||||
return Failure(err);
|
||||
}
|
||||
|
||||
return true;
|
||||
end_precondition
|
||||
|
||||
|
||||
execute
|
||||
|
||||
writeln_d("executing pilot_posture");
|
||||
|
||||
Vec3 xp = brawlerPlatform.LocationNED();
|
||||
Vec3 vp = PLATFORM.VelocityNED();
|
||||
double spdnow = PLATFORM.Speed()*MATH.FT_PER_M();
|
||||
Vec3 xp_iac = brawlerPlatform.LocationNED(targetTrack);
|
||||
Vec3 vp_iac = targetTrack.VelocityNED();
|
||||
|
||||
|
||||
#aslct2()
|
||||
#spcial()
|
||||
#spbvri()
|
||||
|
||||
|
||||
// "iac" is target index, get target track from WEAPON task, for now
|
||||
|
||||
Vec3 hlvec = Vec3();
|
||||
double hlspd = 0.0;
|
||||
double hlval = 0.0;
|
||||
|
||||
extern int kturn;
|
||||
//C --GET KTURN VALUE
|
||||
//call ckrngi(myturn,-2,2,'~KTURN(IACID)~')
|
||||
double sgn = 1.0;
|
||||
if (kturn<0)
|
||||
{
|
||||
sgn = -1.0;
|
||||
}
|
||||
#double vsme = 0.0; #TODO - speed of sound
|
||||
#double bvrmch = 0.0; #TODO - mach to use BVR (MIND2)
|
||||
#double bvrmch = PLATFORM.Speed()*MATH.FT_PER_M() / vsme;
|
||||
#double sa = vsme*bvrmch;
|
||||
double sa = brawlerPlatform.Speed()*MATH.FT_PER_M();
|
||||
|
||||
//call asstgt(iacord,jacidord,virtl,nassign)
|
||||
//if(nassign.eq.0) goto 900
|
||||
//iac = iacord(1);
|
||||
if (kturn != 0)
|
||||
{
|
||||
writeln_d("kturn != 0");
|
||||
//C --THIS CODE NOT NEEDED FOR POINT TACTIC:
|
||||
//C --COMPUTE INTERCEPT PT AIMP, BASED ON MAX OF MACH 1 OR PRESENT MACH
|
||||
//C --USE THE FIRST MEMBER OF THE ASSIGNED TARGET GROUP.
|
||||
#st = xmag(vp(1,iac));
|
||||
double st = vp_iac.Magnitude();
|
||||
|
||||
//LBM - TODO - verify units used in WsfBrawlerPlatform AimPoint and Intercept() methods!!!
|
||||
#call aimpt(xp(1,me),amax1(sa,vsme),xp(1,iac),vp_iac,st,aimp,lsoln);
|
||||
#Vec3 aimp = brawlerPlatform.AimPoint(xp, MATH.Max(sa, vsme), xp_iac, vp_iac, st);
|
||||
Vec3 aimp = brawlerPlatform.AimPoint(xp, sa, xp_iac, vp_iac, st);
|
||||
|
||||
#Vec3 dxpme = Vec3.Subtract(xp_iac, xp);
|
||||
#Vec3 dxt = dxpme;
|
||||
Vec3 dxt = Vec3.Subtract(xp_iac, xp);
|
||||
dxt.SetZ(0.0);
|
||||
dxt.Normalize();
|
||||
if(aimp.Magnitude() > 0)
|
||||
{
|
||||
#call vsub(aimp,xp(1,me),dxi);
|
||||
Vec3 dxi = Vec3.Subtract(aimp, xp);
|
||||
dxi.SetZ(0.0);
|
||||
dxi.Normalize();
|
||||
}
|
||||
}
|
||||
|
||||
# if (kturn == 0) //C --POINT AT TGT
|
||||
# {
|
||||
# hdes = -xp(3,me);
|
||||
# if (lbit(pp_skrs,saskr) || pp_comg)
|
||||
# {
|
||||
# if (!ppmtrk)
|
||||
# {
|
||||
# hdes = amin1(hdes,-xp(3,iac));
|
||||
# }
|
||||
# }
|
||||
## //LBM - dont worry about rules right now
|
||||
## //C --CHANGED RULFLG VALUE 18 NOV 87 DICKERSON
|
||||
## if (rulflg == 1510)
|
||||
## {
|
||||
## call pcode(-rulflg);
|
||||
## hdes = prdalt;
|
||||
## }
|
||||
#
|
||||
# Vec3 aimpt = ((WsfBrawlerPlatform)PLATFORM).AimPoint(Vec3, double, Vec3, Vec3, double);
|
||||
#
|
||||
# #call intcpt(xp(1,me),spdnow(me),xp(1,iac),vp(1,iac),root3/2.0,0.0,hdes,hlvec,hlspd);
|
||||
# hlvec = ((WsfBrawlerPlatform)PLATFORM).Intercept(Vec3, PLATFORM.Speed()*MATH.FT_PER_M(), Vec3, Vec3, double, double, double);
|
||||
# hlspd = hlvec.Magnitude();
|
||||
# hlvec.Normalize();
|
||||
#
|
||||
# //goto 965;
|
||||
# }
|
||||
# //else
|
||||
if (kturn == 1 || kturn == -1) //C --END-RUN TGT
|
||||
{
|
||||
writeln_d("end run");
|
||||
double closmn = root3/2.0;
|
||||
double angint = splita*sgn;
|
||||
double hdes = PLATFORM.Altitude();
|
||||
//hdes = -xp(3,me);
|
||||
|
||||
//LBM - dont worry about lower targets or flying lower, for now
|
||||
# if (lbit(pp_skrs,saskr) || pp_comg)
|
||||
# {
|
||||
# if (!ppmtrk)
|
||||
# {
|
||||
# hdes = amin1(hdes,-xp(3,iac));
|
||||
# }
|
||||
# }
|
||||
//LBM - dont worry about rules right now
|
||||
# //C --CHANGED RULFLG VALUE 18 NOV 87 DICKERSON
|
||||
# if (rulflg == 1510)
|
||||
# {
|
||||
# call pcode(-rulflg);
|
||||
# hdes = prdalt;
|
||||
# }
|
||||
|
||||
|
||||
//LBM - TODO - verify units used in WsfBrawlerPlatform AimPoint and Intercept() methods!!!
|
||||
//call intcpt(xp(1,me),spdnow(me),xp(1,iac),vp(1,iac),root3/2.0,splita*sgn,hdes,hlvec,hlspd);
|
||||
Vec3 desVec = brawlerPlatform.Intercept(xp, spdnow, xp_iac, vp_iac, closmn, angint, hdes);
|
||||
hlvec = desVec.Normal();
|
||||
hlspd = desVec.Magnitude();
|
||||
|
||||
//brawlerPlatform.InterceptLocation3D(
|
||||
|
||||
//goto 965;
|
||||
}
|
||||
# else if (kturn == 2 || kturn == -2) //C --LOOP
|
||||
# {
|
||||
# if (lsoln) then
|
||||
# call xmit3(dxi,temp)
|
||||
# else
|
||||
# call xmit3(dxt,temp)
|
||||
# endif
|
||||
# call makex(vp(1,me),r)
|
||||
# call vxfrmc(r,temp,temp,1)
|
||||
# loopha = loopha .or. temp(1).lt.0.
|
||||
# loopnf = loopnf .or. (loopha .and. temp(1).gt.0. .and. (sign(1.,temp(2)).eq.sgn) )
|
||||
# if (loopnf) then
|
||||
# //C --HERE NO LONGER LOOP - POINT
|
||||
# goto 100
|
||||
# endif
|
||||
# temp(1) = 0.
|
||||
# temp(2) = sgn
|
||||
# temp(3) = 0.
|
||||
# call vxfrmc(r,hlvec,temp,2)
|
||||
# hlval = valme*1.5
|
||||
# hlspd = bvrmch*spdnow(me)/fmachp
|
||||
# //C --TURN OFF FORMATION VALUES DURING LOOP:
|
||||
# mdskpp = iand(mdskpp,6)
|
||||
# stkppp = stkppp*0.25
|
||||
# goto 970
|
||||
# }
|
||||
|
||||
# //C
|
||||
#//900 continue
|
||||
# //C --HERE NO TGT - PRESUMABLY DEAD
|
||||
# hlval = 0.
|
||||
# goto 970
|
||||
# //C
|
||||
|
||||
//965 continue
|
||||
//C --FINISH SETTING UP HIGH LEVEL STEERING VALUES
|
||||
#hlval = valeff(iac);
|
||||
hlval = brawlerPlatform.LastEngagementValue(targetTrack.Target());
|
||||
#writeln_d("hlvec = ", hlvec.ToString(), ", hlval = ", hlval, ", hlspd = ", hlspd);
|
||||
|
||||
//970 continue
|
||||
|
||||
//call steer
|
||||
#steer()
|
||||
# if (dirspc.ne.0) then
|
||||
# //C --SUPPRESS VECTORED FLIGHT VALUES - DIRECT HAS PRECEDENCE
|
||||
# valfpp= 0.0
|
||||
# elseif (vfspc.eq.0) then
|
||||
//C --USE NORMAL HIGH_LEVEL VALUES FOR VECTORED_FLIGHT
|
||||
//call xmit(3,hlvec,vecfpp)
|
||||
|
||||
extern Vec3 vecfpp;
|
||||
extern double valfpp;
|
||||
extern double sflypp;
|
||||
vecfpp = hlvec;
|
||||
valfpp = hlval;
|
||||
sflypp = hlspd;
|
||||
|
||||
writeln_d("vecfpp = ", vecfpp.ToString(), ", valfpp = ", valfpp, ", sflypp = ", sflypp);
|
||||
|
||||
|
||||
brawlerPlatform.SuggestVectoredFlight(vecfpp, valfpp, sflypp);
|
||||
# else
|
||||
# //C --USE FORCE_V VECTOR INSTEAD OF HL... VALUES
|
||||
# //C --THESE MAY BE SET BY EITHER PRODUCTION RULES OR IP
|
||||
# call xmit(3,hlvfor,vecfpp)
|
||||
# valfpp = hlvalf
|
||||
# sflypp = hlspdf
|
||||
# endif
|
||||
|
||||
|
||||
//call sepset(10.0) //LBM - not doing separation yet
|
||||
//9999
|
||||
return;
|
||||
|
||||
|
||||
end_execute
|
||||
|
||||
end_behavior
|
||||
Reference in New Issue
Block a user