X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Foptions.hxx;h=2bdb86da5252f576c6baf71b8e2e3d487ba2b1c0;hb=7cde2e800bccd4883f03eceb5283add24755b377;hp=5156481960835aff088e4fb5d274cd35a5fb2922;hpb=bc99033c96b7f8c3c30904cf94248d924450348e;p=flightgear.git diff --git a/src/Main/options.hxx b/src/Main/options.hxx index 515648196..2bdb86da5 100644 --- a/src/Main/options.hxx +++ b/src/Main/options.hxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started April 1998. // -// Copyright (C) 1998 Curtis L. Olson - curt@me.umn.edu +// Copyright (C) 1998 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -27,473 +27,12 @@ #ifndef __cplusplus # error This library requires C++ -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#ifdef HAVE_WINDOWS_H -# include #endif -#include -#include - -#if defined(FX) && defined(XMESA) -extern bool global_fullscreen; -#endif - -#include -#include - -#include - -#include "globals.hxx" - -#include STL_STRING -#include - -FG_USING_STD(vector); -FG_USING_STD(string); - -#define NEW_DEFAULT_MODEL_HZ 120 - - -class FGOptions { - -public: - - enum - { - FG_OPTIONS_OK = 0, - FG_OPTIONS_HELP = 1, - FG_OPTIONS_ERROR = 2 - }; - - enum - { - FG_UNITS_FEET = 0, - FG_UNITS_METERS = 1 - }; - - enum fgFogKind - { - FG_FOG_DISABLED = 0, - FG_FOG_FASTEST = 1, - FG_FOG_NICEST = 2 - }; - - enum - { - FG_RADIUS_MIN = 1, - FG_RADIUS_MAX = 4 - }; - - enum fgControlMode - { - FG_JOYSTICK = 0, - FG_KEYBOARD = 1, - FG_MOUSE = 2 - }; - - enum fgViewMode - { - FG_VIEW_PILOT = 0, // Pilot perspective - FG_VIEW_FOLLOW = 1, // Following in the "foot steps" so to speak - FG_VIEW_CHASE = 2, // Chase - FG_VIEW_CIRCLING = 3, // Circling - FG_VIEW_SATELLITE = 4, // From high above - FG_VIEW_ANCHOR = 5, // Drop an anchor and watch from there - FG_VIEW_TOWER = 6, // From nearest tower? - FG_VIEW_SPOTTER = 7 // Fron a ground spotter - }; - - enum fgAutoCoordMode - { - FG_AUTO_COORD_NOT_SPECIFIED = 0, - FG_AUTO_COORD_DISABLED = 1, - FG_AUTO_COORD_ENABLED = 2 - }; - - enum fgTimingOffsetType { - FG_TIME_SYS_OFFSET = 0, - FG_TIME_GMT_OFFSET = 1, - FG_TIME_LAT_OFFSET = 2, - FG_TIME_SYS_ABSOLUTE = 3, - FG_TIME_GMT_ABSOLUTE = 4, - FG_TIME_LAT_ABSOLUTE = 5 - }; - - enum fgSpeedSet { - FG_VC = 1, - FG_MACH = 2, - FG_VTUVW = 3, - FG_VTNED = 4 - }; - -private: - - // The flight gear "root" directory -// string fg_root; - - // The scenery "root" directory -// string fg_scenery; - - // Starting position and orientation - - // These are now all SGValue pointers, but they won't stay - // that way forever -- it's just to ease the transition to the - // property manager. Gradually, references to the methods that - // use these variables will be culled out, and the variables - // and methods will be removed. - - SGValue * airport_id; // ID of initial starting airport - SGValue * lon; // starting longitude in degrees (west = -) - SGValue * lat; // starting latitude in degrees (south = -) - SGValue * altitude; // starting altitude in meters - SGValue * heading; // heading (yaw) angle in degress (Psi) - SGValue * roll; // roll angle in degrees (Phi) - SGValue * pitch; // pitch angle in degrees (Theta) - SGValue * speedset; // which speed does the user want - SGValue * uBody; // Body axis X velocity (U) - SGValue * vBody; // Body axis Y velocity (V) - SGValue * wBody; // Body axis Z velocity (W) - SGValue * vNorth; // North component of vt - SGValue * vEast; // East component of vt - SGValue * vDown; // Down component of vt - SGValue * vkcas; // Calibrated airspeed, knots - SGValue * mach; // Mach number - - // Miscellaneous - SGValue * game_mode; // Game mode enabled/disabled - SGValue * splash_screen; // show splash screen - SGValue * intro_music; // play introductory music - SGValue * mouse_pointer; // show mouse pointer - SGValue * control_mode; // primary control mode - SGValue * auto_coordination; // enable auto coordination - - // Features - SGValue * hud_status; // HUD on/off - SGValue * panel_status; // Panel on/off - SGValue * sound; // play sound effects - SGValue * anti_alias_hud; - - // Flight Model options - SGValue * flight_model; // Core flight model code - SGValue * aircraft; // Aircraft to model - SGValue * model_hz; // number of FDM iterations per second - SGValue * speed_up; // Sim mechanics run this much faster than - // normal speed - SGValue * trim; // use the FDM trimming routine during init - // <0 --notrim set, 0 no trim, >0 trim - // default behavior is to enable trimming for - // jsbsim and disable for all other fdm's - - // Rendering options - SGValue * fog; // Fog nicest/fastest/disabled - SGValue * clouds; // Enable clouds - SGValue * clouds_asl; // Cloud layer height above sea level - SGValue * fullscreen; // Full screen mode enabled/disabled - SGValue * shading; // shading method, 0 = Flat, 1 = Smooth - SGValue * skyblend; // Blend sky to haze (using polygons) or - // just clear - SGValue * textures; // Textures enabled/disabled - SGValue * wireframe; // Wireframe mode enabled/disabled - SGValue * xsize; // window size derived from geometry string - SGValue * ysize; - SGValue * bpp; // bits per pixel - SGValue * view_mode; // view mode - SGValue * default_view_offset; // default forward view offset (for use by - // multi-display configuration - SGValue * visibility; // visibilty in meters - - // HUD options - SGValue * units; // feet or meters - SGValue * tris_or_culled; - - // Time options - SGValue * time_offset; // Use this value to change time. - SGValue * time_offset_type; // Will be set to one of the - // FG_TIME_* enums, to deterine how - // time_offset should be used - - // Serial port configuration strings -// string_list channel_options_list; - - // Network options - SGValue * network_olk; - SGValue * net_id; - -public: - - FGOptions(); - ~FGOptions(); - - void init (); - - void set_default_props (); - - // Parse a single option - int parse_option( const string& arg ); - - // Scan the command line options for an fg_root definition and set - // just that. - int scan_command_line_for_root( int argc, char **argv ); - - // Scan the config file for an fg_root definition and set just - // that. - int scan_config_file_for_root( const string& path ); - - // Parse the command line options - int parse_command_line( int argc, char **argv ); - - // Parse the command line options - int parse_config_file( const string& path ); - - // Print usage message - void usage ( void ); - - // Query functions - string get_fg_root() const; - string get_fg_scenery() const; - inline string get_airport_id() const { - return airport_id->getStringValue(); - } - inline double get_lon() const { return lon->getDoubleValue(); } - inline double get_lat() const { return lat->getDoubleValue(); } - inline double get_altitude() const { return altitude->getDoubleValue(); } - inline double get_heading() const { return heading->getDoubleValue(); } - inline double get_roll() const { return roll->getDoubleValue(); } - inline double get_pitch() const { return pitch->getDoubleValue(); } - inline fgSpeedSet get_speedset() const { - const string &s = speedset->getStringValue(); - if (s == "UVW" || s == "uvw") - return FG_VTUVW; - else if (s == "NED" || s == "ned") - return FG_VTNED; - else if (s == "knots" || s == "KNOTS") - return FG_VC; - else if (s == "mach" || s == "MACH") - return FG_MACH; - else - return FG_VC; - } - inline double get_uBody() const {return uBody->getDoubleValue();} - inline double get_vBody() const {return vBody->getDoubleValue();} - inline double get_wBody() const {return wBody->getDoubleValue();} - inline double get_vNorth() const {return vNorth->getDoubleValue();} - inline double get_vEast() const {return vEast->getDoubleValue();} - inline double get_vDown() const {return vDown->getDoubleValue();} - inline double get_vc() const {return vkcas->getDoubleValue();} - inline double get_mach() const {return mach->getDoubleValue();} - - inline bool get_game_mode() const { return game_mode->getBoolValue(); } - inline bool get_splash_screen() const { - return splash_screen->getBoolValue(); - } - inline bool get_intro_music() const { - return intro_music->getBoolValue(); - } - inline int get_mouse_pointer() const { - return mouse_pointer->getBoolValue(); - } - inline bool get_anti_alias_hud() const { - return anti_alias_hud->getBoolValue(); - } - inline fgControlMode get_control_mode() const { - const string &s = control_mode->getStringValue(); - if (s == "joystick") - return FG_JOYSTICK; - else if (s == "keyboard") - return FG_KEYBOARD; - else if (s == "mouse") - return FG_MOUSE; - else - return FG_JOYSTICK; - } - inline void set_control_mode( fgControlMode mode ) { - if(mode == FG_JOYSTICK) - control_mode->setStringValue("joystick"); - else if (mode == FG_KEYBOARD) - control_mode->setStringValue("keyboard"); - else if (mode == FG_MOUSE) - control_mode->setStringValue("mouse"); - else - control_mode->setStringValue("joystick"); - } - inline fgAutoCoordMode get_auto_coordination() const { - if (auto_coordination->getBoolValue()) - return FG_AUTO_COORD_ENABLED; - else - return FG_AUTO_COORD_DISABLED; - } - inline void set_auto_coordination(fgAutoCoordMode m) { - if (m == FG_AUTO_COORD_ENABLED) - auto_coordination->setBoolValue(true); - else if (m == FG_AUTO_COORD_DISABLED) - auto_coordination->setBoolValue(false); - } - inline bool get_hud_status() const { return hud_status->getBoolValue(); } - inline bool get_panel_status() const { - return panel_status->getBoolValue(); - } - inline bool get_sound() const { return sound->getBoolValue(); } - inline int get_flight_model() const { - return parse_fdm(flight_model->getStringValue()); - } - inline string get_aircraft() const { return aircraft->getStringValue(); } - inline int get_model_hz() const { return model_hz->getIntValue(); } - inline int get_speed_up() const { return speed_up->getIntValue(); } - inline void set_speed_up( int speed ) { speed_up->setIntValue(speed); } - inline int get_trim_mode(void) { return trim->getIntValue(); } - - inline bool fog_enabled() const { - return fog->getStringValue() != "disabled"; - } - inline fgFogKind get_fog() const { - const string &s = fog->getStringValue(); - if (s == "disabled") - return FG_FOG_DISABLED; - else if (s == "fastest") - return FG_FOG_FASTEST; - else if (s == "nicest") - return FG_FOG_NICEST; - else - return FG_FOG_DISABLED; - } - inline bool get_clouds() const { return clouds->getBoolValue(); } - inline double get_clouds_asl() const { - return clouds_asl->getDoubleValue() * FEET_TO_METER; - } - inline bool get_fullscreen() const { return fullscreen->getBoolValue(); } - inline int get_shading() const { return shading->getIntValue(); } - inline bool get_skyblend() const { return skyblend->getBoolValue(); } - inline bool get_textures() const { return textures->getBoolValue(); } - inline bool get_wireframe() const { return wireframe->getBoolValue(); } - inline int get_xsize() const { return xsize->getIntValue(); } - inline int get_ysize() const { return ysize->getIntValue(); } - inline int get_bpp() const { return bpp->getIntValue(); } - inline fgViewMode get_view_mode() const { - return (fgViewMode)(view_mode->getIntValue()); // FIXME!! - } - inline double get_default_view_offset() const { - return default_view_offset->getDoubleValue();; - } - inline double get_default_visibility() const { - return visibility->getDoubleValue(); - } - - inline int get_units() const { - if (units->getStringValue() == "meters") - return FG_UNITS_METERS; - else - return FG_UNITS_FEET; - } - inline int get_tris_or_culled() const { - if (tris_or_culled->getStringValue() == "tris") - return 1; // FIXME: check this!!! - else - return 2; - } - - inline int get_time_offset() const { return time_offset->getIntValue(); } - inline fgTimingOffsetType get_time_offset_type() const { - const string &s = time_offset_type->getStringValue(); - if (s == "system-offset") - return FG_TIME_SYS_OFFSET; - else if (s == "gmt-offset") - return FG_TIME_GMT_OFFSET; - else if (s == "latitude-offset") - return FG_TIME_LAT_OFFSET; - else if (s == "system") - return FG_TIME_SYS_ABSOLUTE; - else if (s == "gmt") - return FG_TIME_GMT_ABSOLUTE; - else if (s == "latitude") - return FG_TIME_LAT_ABSOLUTE; - else - return FG_TIME_SYS_OFFSET; - }; - - string_list get_channel_options_list () const; - - inline bool get_network_olk() const { return network_olk->getBoolValue(); } - inline string get_net_id() const { return net_id->getStringValue(); } - - // Update functions - inline void set_airport_id( const string id ) { - airport_id->setStringValue(id); - } - inline void set_lon (double value) { lon->setDoubleValue(value); } - inline void set_lat (double value) { lat->setDoubleValue(value); } - inline void set_altitude (double value) { - altitude->setDoubleValue(value); - } - inline void set_heading (double value) { heading->setDoubleValue(value); } - inline void set_roll (double value) { roll->setDoubleValue(value); } - inline void set_pitch (double value) { pitch->setDoubleValue(value); } - inline void set_anti_alias_hud (bool value) { - anti_alias_hud->setBoolValue(value); - } - inline void set_hud_status( bool status ) { - hud_status->setBoolValue(status); - } - inline void set_flight_model (int value) { - if (value == FGInterface::FG_ADA) - flight_model->setStringValue("ada"); - else if (value == FGInterface::FG_BALLOONSIM) - flight_model->setStringValue("balloon"); - else if (value == FGInterface::FG_EXTERNAL) - flight_model->setStringValue("external"); - else if (value == FGInterface::FG_JSBSIM) - flight_model->setStringValue("jsb"); - else if (value == FGInterface::FG_LARCSIM) - flight_model->setStringValue("larcsim"); - else if (value == FGInterface::FG_MAGICCARPET) - flight_model->setStringValue("magic"); - else - flight_model->setStringValue("larcsim"); - } - inline void set_aircraft (const string &ac) { - aircraft->setStringValue(ac); - } - inline void set_textures( bool status ) { textures->setBoolValue(status); } - inline void cycle_fog( void ) { - const string &s = fog->getStringValue(); - if ( s == "disabled" ) { - fog->setStringValue("fastest"); - } else if ( s == "fastest" ) { - fog->setStringValue("nicest"); - glHint ( GL_FOG_HINT, GL_NICEST ); - } else if ( s == "nicest" ) { - fog->setStringValue("disabled"); - glHint ( GL_FOG_HINT, GL_FASTEST ); - } - } - void toggle_panel(); - inline void set_xsize( int x ) { xsize->setIntValue(x); } - inline void set_ysize( int y ) { ysize->setIntValue(y); } - - inline void set_net_id( const string id ) { net_id->setStringValue(id); } - -private: - - void parse_control( const string& mode ); - double parse_time( const string& time_str ); - long int parse_date( const string& date_str ); - double parse_degree( const string& degree_str ); - int parse_time_offset( const string& time_str ); - int parse_fdm( const string& fm ) const; - double parse_fov( const string& arg ); - bool parse_channel( const string& type, const string& channel_str ); - bool parse_wp( const string& arg ); - bool parse_flightplan(const string& arg); -}; - +extern void fgSetDefaults (); +extern void fgParseArgs (int argc, char ** argv); +extern void fgParseOptions (const string &file_path); +extern void fgUsage (bool verbose = false); +extern void fgShowAircraft(const SGPath &path, bool recursive); #endif /* _OPTIONS_HXX */ - -