X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2Ffdm_shell.cxx;h=daa37aab7d2dafa3ba74894400b7d802ab790435;hb=e819a4aaa44da6be816460fe719b1f65e0a2db3c;hp=f06303e2024b565ec1ce2d87fa100f34c39c1d5a;hpb=8b05d7b2111aac07e048eed65433a2bb0ef37e1d;p=flightgear.git diff --git a/src/FDM/fdm_shell.cxx b/src/FDM/fdm_shell.cxx index f06303e20..daa37aab7 100644 --- a/src/FDM/fdm_shell.cxx +++ b/src/FDM/fdm_shell.cxx @@ -43,12 +43,21 @@ #endif #include #include + +#ifdef ENABLE_JSBSIM #include +#endif + +#ifdef ENABLE_LARCSIM #include +#endif + #include #include -#include +#ifdef ENABLE_YASIM +#include +#endif /* * Evil global variable required by Network/FGNative, @@ -194,12 +203,77 @@ void FDMShell::createImplementation() double dt = 1.0 / fgGetInt("/sim/model-hz"); string model = fgGetString("/sim/flight-model"); - if ( model == "larcsim" ) { + if ( model == "ufo" ) { + _impl = new FGUFO( dt ); + } else if ( model == "external" ) { + // external is a synonym for "--fdm=null" and is + // maintained here for backwards compatibility + _impl = new FGNullFDM( dt ); + } else if ( model.find("network") == 0 ) { + string host = "localhost"; + int port1 = 5501; + int port2 = 5502; + int port3 = 5503; + string net_options = model.substr(8); + string::size_type begin, end; + begin = 0; + // host + end = net_options.find( ",", begin ); + if ( end != string::npos ) { + host = net_options.substr(begin, end - begin); + begin = end + 1; + } + // port1 + end = net_options.find( ",", begin ); + if ( end != string::npos ) { + port1 = atoi( net_options.substr(begin, end - begin).c_str() ); + begin = end + 1; + } + // port2 + end = net_options.find( ",", begin ); + if ( end != string::npos ) { + port2 = atoi( net_options.substr(begin, end - begin).c_str() ); + begin = end + 1; + } + // port3 + end = net_options.find( ",", begin ); + if ( end != string::npos ) { + port3 = atoi( net_options.substr(begin, end - begin).c_str() ); + begin = end + 1; + } + _impl = new FGExternalNet( dt, host, port1, port2, port3 ); + } else if ( model.find("pipe") == 0 ) { + // /* old */ string pipe_path = model.substr(5); + // /* old */ _impl = new FGExternalPipe( dt, pipe_path ); + string pipe_path = ""; + string pipe_protocol = ""; + string pipe_options = model.substr(5); + string::size_type begin, end; + begin = 0; + // pipe file path + end = pipe_options.find( ",", begin ); + if ( end != string::npos ) { + pipe_path = pipe_options.substr(begin, end - begin); + begin = end + 1; + } + // protocol (last option) + pipe_protocol = pipe_options.substr(begin); + _impl = new FGExternalPipe( dt, pipe_path, pipe_protocol ); + } else if ( model == "null" ) { + _impl = new FGNullFDM( dt ); + } +#ifdef ENABLE_LARCSIM + else if ( model == "larcsim" ) { _impl = new FGLaRCsim( dt ); - } else if ( model == "jsb" ) { + } +#endif +#ifdef ENABLE_JSBSIM + else if ( model == "jsb" ) { _impl = new FGJSBsim( dt ); + } +#endif #ifdef ENABLE_SP_FDM - } else if ( model == "ada" ) { + else if ( model == "ada" ) { _impl = new FGADA( dt ); } else if ( model == "acms" ) { _impl = new FGACMS( dt ); @@ -207,68 +281,14 @@ void FDMShell::createImplementation() _impl = new FGBalloonSim( dt ); } else if ( model == "magic" ) { _impl = new FGMagicCarpet( dt ); + } #endif - } else if ( model == "ufo" ) { - _impl = new FGUFO( dt ); - } else if ( model == "external" ) { - // external is a synonym for "--fdm=null" and is - // maintained here for backwards compatibility - _impl = new FGNullFDM( dt ); - } else if ( model.find("network") == 0 ) { - string host = "localhost"; - int port1 = 5501; - int port2 = 5502; - int port3 = 5503; - string net_options = model.substr(8); - string::size_type begin, end; - begin = 0; - // host - end = net_options.find( ",", begin ); - if ( end != string::npos ) { - host = net_options.substr(begin, end - begin); - begin = end + 1; - } - // port1 - end = net_options.find( ",", begin ); - if ( end != string::npos ) { - port1 = atoi( net_options.substr(begin, end - begin).c_str() ); - begin = end + 1; - } - // port2 - end = net_options.find( ",", begin ); - if ( end != string::npos ) { - port2 = atoi( net_options.substr(begin, end - begin).c_str() ); - begin = end + 1; - } - // port3 - end = net_options.find( ",", begin ); - if ( end != string::npos ) { - port3 = atoi( net_options.substr(begin, end - begin).c_str() ); - begin = end + 1; - } - _impl = new FGExternalNet( dt, host, port1, port2, port3 ); - } else if ( model.find("pipe") == 0 ) { - // /* old */ string pipe_path = model.substr(5); - // /* old */ _impl = new FGExternalPipe( dt, pipe_path ); - string pipe_path = ""; - string pipe_protocol = ""; - string pipe_options = model.substr(5); - string::size_type begin, end; - begin = 0; - // pipe file path - end = pipe_options.find( ",", begin ); - if ( end != string::npos ) { - pipe_path = pipe_options.substr(begin, end - begin); - begin = end + 1; - } - // protocol (last option) - pipe_protocol = pipe_options.substr(begin); - _impl = new FGExternalPipe( dt, pipe_path, pipe_protocol ); - } else if ( model == "null" ) { - _impl = new FGNullFDM( dt ); - } else if ( model == "yasim" ) { +#ifdef ENABLE_YASIM + else if ( model == "yasim" ) { _impl = new YASim( dt ); - } else { + } +#endif + else { throw sg_exception(string("Unrecognized flight model '") + model + "', cannot init flight dynamics model."); }