1 // options.hxx -- class to handle command line options
3 // Written by Curtis Olson, started April 1998.
5 // Copyright (C) 1998 Curtis L. Olson - curt@me.umn.edu
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.
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.
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.
29 # error This library requires C++
36 #include <simgear/compiler.h>
43 #include <simgear/xgl/xgl.h>
45 #if defined(FX) && defined(XMESA)
46 extern bool global_fullscreen;
49 #include <simgear/math/sg_types.hxx>
50 #include <simgear/timing/sg_time.hxx>
58 #define NEW_DEFAULT_MODEL_HZ 120
59 #define FG_FOV_MIN 0.1
60 #define FG_FOV_MAX 179.9
102 FG_VIEW_PILOT = 0, // Pilot perspective
103 FG_VIEW_FOLLOW = 1, // Following in the "foot steps" so to speak
104 FG_VIEW_CHASE = 2, // Chase
105 FG_VIEW_CIRCLING = 3, // Circling
106 FG_VIEW_SATELLITE = 4, // From high above
107 FG_VIEW_ANCHOR = 5, // Drop an anchor and watch from there
108 FG_VIEW_TOWER = 6, // From nearest tower?
109 FG_VIEW_SPOTTER = 7 // Fron a ground spotter
114 FG_AUTO_COORD_NOT_SPECIFIED = 0,
115 FG_AUTO_COORD_DISABLED = 1,
116 FG_AUTO_COORD_ENABLED = 2
119 enum fgTimingOffsetType {
120 FG_TIME_SYS_OFFSET = 0,
121 FG_TIME_GMT_OFFSET = 1,
122 FG_TIME_LAT_OFFSET = 2,
123 FG_TIME_SYS_ABSOLUTE = 3,
124 FG_TIME_GMT_ABSOLUTE = 4,
125 FG_TIME_LAT_ABSOLUTE = 5
137 // The flight gear "root" directory
140 // The scenery "root" directory
143 // Starting position and orientation
144 string airport_id; // ID of initial starting airport
145 double lon; // starting longitude in degrees (west = -)
146 double lat; // starting latitude in degrees (south = -)
147 double altitude; // starting altitude in meters
148 double heading; // heading (yaw) angle in degress (Psi)
149 double roll; // roll angle in degrees (Phi)
150 double pitch; // pitch angle in degrees (Theta)
151 fgSpeedSet speedset; // which speed does the user want
152 double uBody; // Body axis X velocity (U)
153 double vBody; // Body axis Y velocity (V)
154 double wBody; // Body axis Z velocity (W)
155 double vNorth; // North component of vt
156 double vEast; // East component of vt
157 double vDown; // Down component of vt
158 double vkcas; // Calibrated airspeed, knots
159 double mach; // Mach number
162 bool game_mode; // Game mode enabled/disabled
163 bool splash_screen; // show splash screen
164 bool intro_music; // play introductory music
165 int mouse_pointer; // show mouse pointer
166 fgControlMode control_mode; // primary control mode
167 fgAutoCoordMode auto_coordination; // enable auto coordination
170 bool hud_status; // HUD on/off
171 bool panel_status; // Panel on/off
172 bool sound; // play sound effects
175 // Flight Model options
176 int flight_model; // Core flight model code: jsb, larcsim, magic, etc.
177 string aircraft; // Aircraft to model
178 int model_hz; // number of FDM iterations per second
179 int speed_up; // Sim mechanics run this much faster than normal speed
180 int trim; // use the FDM trimming routine during init
181 // <0 --notrim set, 0 no trim, >0 trim
182 // default behavior is to enable trimming for jsbsim
183 // disable for all other fdm's
186 fgFogKind fog; // Fog nicest/fastest/disabled
187 bool clouds; // Enable clouds
188 double clouds_asl; // Cloud layer height above sea level
189 double fov; // Field of View
190 bool fullscreen; // Full screen mode enabled/disabled
191 int shading; // shading method, 0 = Flat, 1 = Smooth
192 bool skyblend; // Blend sky to haze (using polygons) or just clear
193 bool textures; // Textures enabled/disabled
194 bool wireframe; // Wireframe mode enabled/disabled
195 int xsize, ysize; // window size derived from geometry string
196 double win_ratio; // ratio of x and y fov's; fov(y) = fov(x) * win_ratio
197 int bpp; // bits per pixel
198 fgViewMode view_mode; // view mode
199 double default_view_offset; // default forward view offset (for use by
200 // multi-display configuration
203 int tile_radius; // Square radius of rendered tiles (around center
205 int tile_diameter; // Diameter of rendered tiles. for instance
206 // if tile_diameter = 3 then a 3 x 3 grid of tiles will
207 // be drawn. Increase this to see terrain that is
211 int units; // feet or meters
215 int time_offset; // Use this value to change time.
216 fgTimingOffsetType time_offset_type; // Will be set to one of the
217 // FG_TIME_* enums, to deterine how
218 // time_offset should be used
220 // Serial port configuration strings
221 string_list channel_options_list;
232 // Parse a single option
233 int parse_option( const string& arg );
235 // Scan the command line options for an fg_root definition and set
237 int scan_command_line_for_root( int argc, char **argv );
239 // Scan the config file for an fg_root definition and set just
241 int scan_config_file_for_root( const string& path );
243 // Parse the command line options
244 int parse_command_line( int argc, char **argv );
246 // Parse the command line options
247 int parse_config_file( const string& path );
249 // Print usage message
253 inline string get_fg_root() const { return fg_root; }
254 inline string get_fg_scenery() const { return fg_scenery; }
255 inline string get_airport_id() const { return airport_id; }
256 inline double get_lon() const { return lon; }
257 inline double get_lat() const { return lat; }
258 inline double get_altitude() const { return altitude; }
259 inline double get_heading() const { return heading; }
260 inline double get_roll() const { return roll; }
261 inline double get_pitch() const { return pitch; }
262 inline fgSpeedSet get_speedset() const { return speedset; }
263 inline double get_uBody() const {return uBody;}
264 inline double get_vBody() const {return vBody;}
265 inline double get_wBody() const {return wBody;}
266 inline double get_vNorth() const {return vNorth;}
267 inline double get_vEast() const {return vEast;}
268 inline double get_vDown() const {return vDown;}
269 inline double get_vc() const {return vkcas;}
270 inline double get_mach() const {return mach;}
272 inline bool get_game_mode() const { return game_mode; }
273 inline bool get_splash_screen() const { return splash_screen; }
274 inline bool get_intro_music() const { return intro_music; }
275 inline int get_mouse_pointer() const { return mouse_pointer; }
276 inline bool get_anti_alias_hud() const { return anti_alias_hud; }
277 inline fgControlMode get_control_mode() const { return control_mode; }
278 inline void set_control_mode( fgControlMode mode ) { control_mode = mode; }
279 inline fgAutoCoordMode get_auto_coordination() const {
280 return auto_coordination;
282 inline void set_auto_coordination(fgAutoCoordMode m) {
283 auto_coordination = m;
285 inline bool get_hud_status() const { return hud_status; }
286 inline bool get_panel_status() const { return panel_status; }
287 inline bool get_sound() const { return sound; }
288 inline int get_flight_model() const { return flight_model; }
289 inline string get_aircraft() const { return aircraft; }
290 inline int get_model_hz() const { return model_hz; }
291 inline int get_speed_up() const { return speed_up; }
292 inline void set_speed_up( int speed ) { speed_up = speed; }
293 inline int get_trim_mode(void) { return trim; }
295 inline bool fog_enabled() const { return fog != FG_FOG_DISABLED; }
296 inline fgFogKind get_fog() const { return fog; }
297 inline bool get_clouds() const { return clouds; }
298 inline double get_clouds_asl() const { return clouds_asl; }
299 inline double get_fov() const { return fov; }
300 inline bool get_fullscreen() const { return fullscreen; }
301 inline int get_shading() const { return shading; }
302 inline bool get_skyblend() const { return skyblend; }
303 inline bool get_textures() const { return textures; }
304 inline bool get_wireframe() const { return wireframe; }
305 inline int get_xsize() const { return xsize; }
306 inline int get_ysize() const { return ysize; }
307 inline double get_win_ratio() const { return win_ratio; }
308 inline int get_bpp() const { return bpp; }
309 inline fgViewMode get_view_mode() const { return view_mode; }
310 inline double get_default_view_offset() const {
311 return default_view_offset;
315 inline int get_tile_radius() const { return tile_radius; }
316 inline int get_tile_diameter() const { return tile_diameter; }
318 inline int get_units() const { return units; }
319 inline int get_tris_or_culled() const { return tris_or_culled; }
321 inline int get_time_offset() const { return time_offset; }
322 inline fgTimingOffsetType get_time_offset_type() const {
323 return time_offset_type;
326 inline string_list get_channel_options_list() const {
327 return channel_options_list;
330 inline bool get_network_olk() const { return network_olk; }
331 inline string get_net_id() const { return net_id; }
334 inline void set_fg_root (const string value) { fg_root = value; }
335 inline void set_fg_scenery (const string value) { fg_scenery = value; }
336 inline void set_airport_id( const string id ) { airport_id = id; }
337 inline void set_lon (double value) { lon = value; }
338 inline void set_lat (double value) { lat = value; }
339 inline void set_altitude (double value) { altitude = value; }
340 inline void set_heading (double value) { heading = value; }
341 inline void set_roll (double value) { roll = value; }
342 inline void set_pitch (double value) { pitch = value; }
343 inline void set_uBody (double value) { uBody = value; }
344 inline void set_vBody (double value) { vBody = value; }
345 inline void set_wBody (double value) { wBody = value; }
346 inline void set_vc (double value) { vkcas = value; }
347 inline void set_mach(double value) { mach = value; }
348 inline void set_game_mode (bool value) { game_mode = value; }
349 inline void set_splash_screen (bool value) { splash_screen = value; }
350 inline void set_intro_music (bool value) { intro_music = value; }
351 inline void set_mouse_pointer (int value) { mouse_pointer = value; }
352 inline void set_anti_alias_hud (bool value) { anti_alias_hud = value; }
353 inline void set_hud_status( bool status ) { hud_status = status; }
354 inline void set_sound (bool value) { sound = value; }
355 inline void set_flight_model (int value) { flight_model = value; }
356 inline void set_aircraft (const string &ac) { aircraft = ac; }
357 inline void set_model_hz (int value) { model_hz = value; }
358 inline void set_trim_mode(int value) { trim = value; }
359 inline void set_fog (fgFogKind value) { fog = value; }
360 inline void set_clouds( bool value ) { clouds = value; }
361 inline void set_clouds_asl( double value ) { clouds_asl = value; }
362 inline void set_fov( double amount ) { fov = amount; }
363 inline void set_fullscreen (bool value) { fullscreen = value; }
364 inline void set_shading (int value) { shading = value; }
365 inline void set_skyblend (bool value) { skyblend = value; }
366 inline void set_textures( bool status ) { textures = status; }
367 inline void set_wireframe (bool status) { wireframe = status; }
368 inline void cycle_fog( void ) {
369 if ( fog == FG_FOG_DISABLED ) {
370 fog = FG_FOG_FASTEST;
371 } else if ( fog == FG_FOG_FASTEST ) {
373 xglHint ( GL_FOG_HINT, GL_NICEST );
374 } else if ( fog == FG_FOG_NICEST ) {
375 fog = FG_FOG_DISABLED;
376 xglHint ( GL_FOG_HINT, GL_FASTEST );
380 inline void set_xsize( int x ) { xsize = x; }
381 inline void set_ysize( int y ) { ysize = y; }
382 inline void set_win_ratio( double r ) { win_ratio = r; }
383 inline void set_view_mode (fgViewMode value) { view_mode = value; }
384 inline void set_tile_radius (int value) { tile_radius = value; }
385 inline void set_tile_diameter (int value) { tile_diameter = value; }
386 inline void set_units (int value) { units = value; }
387 inline void set_tris_or_culled (int value) { tris_or_culled = value; }
388 inline void set_time_offset (int value) { time_offset = value; }
389 inline void set_time_offset_type (fgTimingOffsetType value) {
390 time_offset_type = value;
392 inline void cycle_view_mode() {
393 if ( view_mode == FG_VIEW_PILOT ) {
394 view_mode = FG_VIEW_FOLLOW;
395 } else if ( view_mode == FG_VIEW_FOLLOW ) {
396 view_mode = FG_VIEW_PILOT;
400 inline void set_network_olk( bool net ) { network_olk = net; }
401 inline void set_net_id( const string id ) { net_id = id; }
405 void parse_control( const string& mode );
406 double parse_time( const string& time_str );
407 long int parse_date( const string& date_str );
408 double parse_degree( const string& degree_str );
409 int parse_time_offset( const string& time_str );
410 int parse_tile_radius( const string& arg );
411 int parse_fdm( const string& fm );
412 double parse_fov( const string& arg );
413 bool parse_channel( const string& type, const string& channel_str );
414 bool parse_wp( const string& arg );
418 // extern FGOptions current_options;
421 #endif /* _OPTIONS_HXX */