The f18 program simulates a simple HLA or DIS vehicle.
By default, that vehicle is n F/A18 flying in a circle, just off the coast of California, USA, but you can control the entity type, location and route.
The f18 generates predictable HLA entity update messages (or DIS entity state PDUs), so it is a useful tool for debugging applications that receive and interpret these messages. It can also fire munitions and react to detonations.
#include <stdlib.h>
#include <iostream>
#ifndef _WIN32
#include <sys/socket.h>
#endif
DtTime timeOutInterval = 12.0;
double translationThreshold = 1.0;
#if VXWORKS
#define main realMain
#endif
int main( int argc, char** argv )
{
try
{
DtString appName =
"VR-Link F18 " + pidStr;
initializer.setApplicationNumber( pid );
DtString defaultF18Name( initializer.f18Name() );
defaultF18Name += " " + pidStr;
initializer.setF18Name( defaultF18Name );
#ifdef DtHLA
initializer.setFederateType( defaultF18Name );
#endif
initializer.parseCmdLine();
#ifndef DtTENA // non-TENA case
try
{
}
{
std::cerr << "Mismatching RTI compiler Version. Please reconfigure your environment" << std::endl;
return -1;
}
if (status != 0)
{
std::cout << "Error creating exercise connection." << std::endl;
return -1;
}
#else
try
{
}
catch (...)
{
std::cout << "Error creating exercise connection." << std::endl;
return -1;
}
#endif
#if DtDIS
#endif
initializer.applicationNumber(), initializer.entityNumber() );
exConn, rel, entityId, type, initializer.f18Name(), initializer.f18Markings(),
DtDeadReckonTypes( initializer.deadReckonAlgorithm() ), initializer.haveArtParts() );
myVehicle->
init( initializer.initialPosition(), initializer.initialSpeed(),
initializer.initialHeading(), initializer.initialTurnRadius(),
initializer.initialPitch(), initializer.autoRoll(), initializer.initialRoll() );
int forever = 1;
while( forever )
{
if ( keybrdTick( myVehicle ) == 0 ) break;
myVehicle->simTick( initializer.deltaTime() );
if ( myVehicle->isDestroyed() && clock->
simTime() >
( myVehicle->timeDestroyed() + initializer.destroyedToFinalDelay() ) ) break;
}
delete myVehicle;
delete rel;
delete exConn;
}
return 0;
}
{
if ( !keyPtr ) return 1;
switch( *keyPtr )
{
case 'q':
case 'Q':
return 0;
case 'b':
case '\n':
case '\r':
break;
case 'e':
break;
default:
std::cout << "Unrecognized command key " << *keyPtr << std::endl;
break;
}
return 1;
}