]> git.mxchange.org Git - flightgear.git/blob - src/Main/options.hxx
919e49ce98db2f16f26051583a05d048b3e9ca06
[flightgear.git] / src / Main / options.hxx
1 // options.hxx -- class to handle command line options
2 //
3 // Written by Curtis Olson, started April 1998.
4 //
5 // Copyright (C) 1998  Curtis L. Olson  - curt@me.umn.edu
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22
23
24 #ifndef _OPTIONS_HXX
25 #define _OPTIONS_HXX
26
27
28 #ifndef __cplusplus
29 # error This library requires C++
30 #endif                                   
31
32 #ifdef HAVE_CONFIG_H
33 #  include <config.h>
34 #endif
35
36 #include <Include/compiler.h>
37
38 #ifdef HAVE_WINDOWS_H
39 #  include <windows.h>
40 #endif
41
42 #include <GL/glut.h>
43 #include <XGL/xgl.h>
44
45 #if defined(FX) && defined(XMESA)
46 extern bool global_fullscreen;
47 #endif
48
49 #include STL_STRING
50 #include <vector>
51
52 FG_USING_STD(vector);
53 FG_USING_STD(string);
54
55 typedef vector < string > str_container;
56 typedef str_container::iterator str_iterator;
57 typedef str_container::const_iterator const_str_iterator;
58
59
60 class fgOPTIONS {
61
62 public:
63
64     enum
65     {
66         FG_OPTIONS_OK = 0,
67         FG_OPTIONS_HELP = 1,
68         FG_OPTIONS_ERROR = 2
69     };
70
71     enum
72     {
73         FG_UNITS_FEET = 0,
74         FG_UNITS_METERS = 1
75     };
76
77     enum fgFogKind
78     {
79         FG_FOG_DISABLED = 0,
80         FG_FOG_FASTEST  = 1,
81         FG_FOG_NICEST   = 2
82     };
83
84     enum
85     {
86         FG_RADIUS_MIN = 1,
87         FG_RADIUS_MAX = 4
88     };
89
90     enum fgControlMode
91     {
92         FG_JOYSTICK = 0,
93         FG_KEYBOARD = 1,
94         FG_MOUSE = 2
95     };
96
97 private:
98
99     // The flight gear "root" directory
100     string fg_root;
101
102     // Starting position and orientation
103     string airport_id;  // ID of initial starting airport
104     double lon;         // starting longitude in degrees (west = -)
105     double lat;         // starting latitude in degrees (south = -)
106     double altitude;    // starting altitude in meters
107     double heading;     // heading (yaw) angle in degress (Psi)
108     double roll;        // roll angle in degrees (Phi)
109     double pitch;       // pitch angle in degrees (Theta)
110     double uBody;       // Body axis X velocity (U)
111     double vBody;       // Body axis Y velocity (V)
112     double wBody;       // Body axis Z velocity (W)
113
114     // Miscellaneous
115     bool game_mode;     // Game mode enabled/disabled
116     bool splash_screen; // show splash screen
117     bool intro_music;   // play introductory music
118     int mouse_pointer;  // show mouse pointer
119     bool pause;         // pause intially enabled/disabled
120     fgControlMode control_mode; // primary control mode
121
122     // Features
123     bool hud_status;    // HUD on/off
124     bool panel_status;  // Panel on/off
125     bool sound;         // play sound effects
126
127     // Flight Model options
128     int flight_model;   // Flight Model:  FG_SLEW, FG_LARCSIM, etc.
129     int model_hz;       // number of FDM iterations per second
130     int speed_up;       // Sim mechanics run this much faster than normal speed
131
132     // Rendering options
133     fgFogKind fog;      // Fog nicest/fastest/disabled
134     double fov;         // Field of View
135     bool fullscreen;    // Full screen mode enabled/disabled
136     int shading;        // shading method, 0 = Flat, 1 = Smooth
137     bool skyblend;      // Blend sky to haze (using polygons) or just clear
138     bool textures;      // Textures enabled/disabled
139     bool wireframe;     // Wireframe mode enabled/disabled
140     int xsize, ysize;   // window size derived from geometry string
141
142     // Scenery options
143     int tile_radius;   // Square radius of rendered tiles (around center 
144                        // square.)
145     int tile_diameter; // Diameter of rendered tiles.  for instance
146                        // if tile_diameter = 3 then a 3 x 3 grid of tiles will 
147                        // be drawn.  Increase this to see terrain that is 
148                        // further away.
149
150     // HUD options
151     int units;         // feet or meters
152     int tris_or_culled;
153
154     // Time options
155     int time_offset;   // Offset true time by this many seconds
156     long int start_gst;     // Specify a greenwich sidereal time (gst)
157     long int start_lst;     // Specify a local sidereal time (lst)
158
159     // Serial Ports, we currently support up to four channels
160     // fgSerialPortKind port_a_kind;  // Port a kind
161     // fgSerialPortKind port_b_kind;  // Port b kind
162     // fgSerialPortKind port_c_kind;  // Port c kind
163     // fgSerialPortKind port_d_kind;  // Port d kind
164
165     // Serial port configuration strings
166     str_container port_options_list;
167
168     // Network options
169     string net_id;
170     
171 public:
172
173     fgOPTIONS();
174     ~fgOPTIONS();
175
176     // Parse a single option
177     int parse_option( const string& arg );
178
179     // Parse the command line options
180     int parse_command_line( int argc, char **argv );
181
182     // Parse the command line options
183     int parse_config_file( const string& path );
184
185     // Print usage message
186     void usage ( void );
187
188     // Query functions
189     inline string get_fg_root() const { return fg_root; }
190     inline string get_airport_id() const { return airport_id; }
191     inline double get_lon() const { return lon; }
192     inline double get_lat() const { return lat; }
193     inline double get_altitude() const { return altitude; }
194     inline double get_heading() const { return heading; }
195     inline double get_roll() const { return roll; }
196     inline double get_pitch() const { return pitch; }
197     inline double get_uBody() const {return uBody;}
198     inline double get_vBody() const {return vBody;}
199     inline double get_wBody() const {return wBody;}
200     inline bool get_game_mode() const { return game_mode; }
201     inline bool get_splash_screen() const { return splash_screen; }
202     inline bool get_intro_music() const { return intro_music; }
203     inline int get_mouse_pointer() const { return mouse_pointer; }
204     inline bool get_pause() const { return pause; }
205     inline fgControlMode get_control_mode() const { return control_mode; }
206     inline void set_control_mode( fgControlMode mode ) { control_mode = mode; }
207     inline bool get_hud_status() const { return hud_status; }
208     inline bool get_panel_status() const { return panel_status; }
209     inline bool get_sound() const { return sound; }
210     inline int get_flight_model() const { return flight_model; }
211     inline int get_model_hz() const { return model_hz; }
212     inline int get_speed_up() const { return speed_up; }
213     inline void set_speed_up( int speed ) { speed_up = speed; }
214     inline bool fog_enabled() const { return fog != FG_FOG_DISABLED; }
215     inline fgFogKind get_fog() const { return fog; }
216     inline double get_fov() const { return fov; }
217     inline bool get_fullscreen() const { return fullscreen; }
218     inline int get_shading() const { return shading; }
219     inline bool get_skyblend() const { return skyblend; }
220     inline bool get_textures() const { return textures; }
221     inline bool get_wireframe() const { return wireframe; }
222     inline int get_xsize() const { return xsize; }
223     inline int get_ysize() const { return ysize; }
224     inline int get_tile_radius() const { return tile_radius; }
225     inline int get_tile_diameter() const { return tile_diameter; }
226
227     inline int get_units() const { return units; }
228     inline int get_tris_or_culled() const { return tris_or_culled; }
229
230     inline int get_time_offset() const { return time_offset; }
231     inline long int get_start_gst() const { return start_gst; };
232     inline long int get_start_lst() const { return start_lst; }
233
234     inline str_container get_port_options_list() const { 
235         return port_options_list;
236     }
237     inline string get_net_id() const { return net_id; }
238
239     // Update functions
240     inline void set_airport_id( const string id ) { airport_id = id; }
241     inline void set_hud_status( bool status ) { hud_status = status; }
242     inline void set_fov( double amount ) { fov = amount; }
243     inline void set_textures( bool status ) { textures = status; }
244     inline void cycle_fog( void ) { 
245         if ( fog == FG_FOG_DISABLED ) {
246             fog = FG_FOG_FASTEST;
247         } else if ( fog == FG_FOG_FASTEST ) {
248             fog = FG_FOG_NICEST;
249             xglHint ( GL_FOG_HINT, GL_NICEST );
250         } else if ( fog == FG_FOG_NICEST ) {
251             fog = FG_FOG_DISABLED;
252             xglHint ( GL_FOG_HINT, GL_FASTEST );
253         }
254     }
255     void toggle_panel();
256     inline void set_xsize( int x ) { xsize= x; }
257     inline void set_ysize( int y ) { xsize= y; }
258     inline void set_net_id( const string id ) { net_id = id; }
259
260 private:
261
262     void parse_control( const string& mode );
263     double parse_time( const string& time_str );
264     long int parse_date( const string& date_str );
265     double parse_degree( const string& degree_str );
266     int parse_time_offset( const string& time_str );
267     int parse_tile_radius( const string& arg );
268     int parse_fdm( const string& fm );
269     double parse_fov( const string& arg );
270     bool parse_serial( const string& serial_str );
271 };
272
273
274 extern fgOPTIONS current_options;
275
276
277 #endif /* _OPTIONS_HXX */
278
279