1
0
Fork 0

David Megginson writes:

FGOptions is history, and the modules are (starting) to use the property
manager directly.  Let me know if I left any files out.

Inevitably, there will be some problems with broken options, etc.,
that I haven't found in my tests, but I'll try to fix them quickly.
We also need to stress that the property names currently in use are
not stable -- we need to reorganize them a bit for clarity.
This commit is contained in:
curt 2001-01-13 22:06:39 +00:00
parent a701a2be4a
commit 576432ec75
43 changed files with 831 additions and 1516 deletions

View file

@ -41,6 +41,7 @@
#include <Main/bfi.hxx> #include <Main/bfi.hxx>
#include <Main/fg_init.hxx> #include <Main/fg_init.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <Navaids/fixlist.hxx> #include <Navaids/fixlist.hxx>
#include "auto_gui.hxx" #include "auto_gui.hxx"
@ -292,7 +293,7 @@ void NewAltitudeInit(void)
float alt = cur_fdm_state->get_Altitude(); float alt = cur_fdm_state->get_Altitude();
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_METERS) { if ( fgGetString("/sim/startup/units") == "meters") {
alt *= FEET_TO_METER; alt *= FEET_TO_METER;
} }
@ -594,7 +595,7 @@ void TgtAptDialog_OK (puObject *)
TgtAptId = tmp.substr( 0, pos ); TgtAptId = tmp.substr( 0, pos );
string alt_str = tmp.substr( pos + 1 ); string alt_str = tmp.substr( pos + 1 );
alt = atof( alt_str.c_str() ); alt = atof( alt_str.c_str() );
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
alt *= FEET_TO_METER; alt *= FEET_TO_METER;
} }
} else { } else {
@ -635,16 +636,16 @@ void TgtAptDialog_OK (puObject *)
void TgtAptDialog_Reset(puObject *) void TgtAptDialog_Reset(puObject *)
{ {
// strncpy( NewAirportId, globals->get_options()->get_airport_id().c_str(), 16 ); // strncpy( NewAirportId, fgGetString("/sim/startup/airport-id").c_str(), 16 );
sprintf( NewTgtAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewTgtAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
TgtAptDialogInput->setValue ( NewTgtAirportId ); TgtAptDialogInput->setValue ( NewTgtAirportId );
TgtAptDialogInput->setCursor( 0 ) ; TgtAptDialogInput->setCursor( 0 ) ;
} }
void AddWayPoint(puObject *cb) void AddWayPoint(puObject *cb)
{ {
// strncpy( NewAirportId, globals->get_options()->get_airport_id().c_str(), 16 ); // strncpy( NewAirportId, fgGetString("/sim/startup/airport-id").c_str(), 16 );
sprintf( NewTgtAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewTgtAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
TgtAptDialogInput->setValue( NewTgtAirportId ); TgtAptDialogInput->setValue( NewTgtAirportId );
FG_PUSH_PUI_DIALOG( TgtAptDialog ); FG_PUSH_PUI_DIALOG( TgtAptDialog );
@ -675,8 +676,8 @@ void ClearRoute(puObject *cb)
void NewTgtAirportInit(void) void NewTgtAirportInit(void)
{ {
FG_LOG( FG_AUTOPILOT, FG_INFO, " enter NewTgtAirportInit()" ); FG_LOG( FG_AUTOPILOT, FG_INFO, " enter NewTgtAirportInit()" );
// fgAPset_tgt_airport_id( globals->get_options()->get_airport_id() ); // fgAPset_tgt_airport_id( fgGetString("/sim/startup/airport-id") );
sprintf( NewTgtAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewTgtAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
FG_LOG( FG_AUTOPILOT, FG_INFO, " NewTgtAirportId " << NewTgtAirportId ); FG_LOG( FG_AUTOPILOT, FG_INFO, " NewTgtAirportId " << NewTgtAirportId );
// printf(" NewTgtAirportId %s\n", NewTgtAirportId); // printf(" NewTgtAirportId %s\n", NewTgtAirportId);
int len = 150 - puGetStringWidth( puGetDefaultLabelFont(), int len = 150 - puGetStringWidth( puGetDefaultLabelFont(),

View file

@ -99,7 +99,7 @@ static inline double get_speed( void ) {
static inline double get_ground_speed() { static inline double get_ground_speed() {
// starts in ft/s so we convert to kts // starts in ft/s so we convert to kts
double ft_s = cur_fdm_state->get_V_ground_speed() double ft_s = cur_fdm_state->get_V_ground_speed()
* globals->get_options()->get_speed_up();; * fgGetInt("/sim/speed-up"); // FIXME: inefficient
double kts = ft_s * FEET_TO_METER * 3600 * METER_TO_NM; double kts = ft_s * FEET_TO_METER * 3600 * METER_TO_NM;
return kts; return kts;
@ -267,7 +267,7 @@ void FGAutopilot::reset() {
update_old_control_values(); update_old_control_values();
sprintf( NewTgtAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewTgtAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
// TargetLatitude = FGBFI::getLatitude(); // TargetLatitude = FGBFI::getLatitude();
// TargetLongitude = FGBFI::getLongitude(); // TargetLongitude = FGBFI::getLongitude();
@ -743,7 +743,7 @@ void FGAutopilot::set_AltitudeMode( fgAutoAltitudeMode mode ) {
// lock at current altitude // lock at current altitude
TargetAltitude = FGBFI::getAltitude() * FEET_TO_METER; TargetAltitude = FGBFI::getAltitude() * FEET_TO_METER;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
MakeTargetAltitudeStr( TargetAltitude * METER_TO_FEET ); MakeTargetAltitudeStr( TargetAltitude * METER_TO_FEET );
} else { } else {
MakeTargetAltitudeStr( TargetAltitude * METER_TO_FEET ); MakeTargetAltitudeStr( TargetAltitude * METER_TO_FEET );
@ -754,7 +754,7 @@ void FGAutopilot::set_AltitudeMode( fgAutoAltitudeMode mode ) {
} else if ( altitude_mode == FG_ALTITUDE_TERRAIN ) { } else if ( altitude_mode == FG_ALTITUDE_TERRAIN ) {
TargetAGL = FGBFI::getAGL() * FEET_TO_METER; TargetAGL = FGBFI::getAGL() * FEET_TO_METER;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
MakeTargetAltitudeStr( TargetAGL * METER_TO_FEET ); MakeTargetAltitudeStr( TargetAGL * METER_TO_FEET );
} else { } else {
MakeTargetAltitudeStr( TargetAGL * METER_TO_FEET ); MakeTargetAltitudeStr( TargetAGL * METER_TO_FEET );
@ -820,7 +820,7 @@ void FGAutopilot::AltitudeSet( double new_altitude ) {
// cout << "new altitude = " << new_altitude << endl; // cout << "new altitude = " << new_altitude << endl;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
target_alt = new_altitude * FEET_TO_METER; target_alt = new_altitude * FEET_TO_METER;
} }
@ -833,7 +833,7 @@ void FGAutopilot::AltitudeSet( double new_altitude ) {
// cout << "TargetAltitude = " << TargetAltitude << endl; // cout << "TargetAltitude = " << TargetAltitude << endl;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
target_alt *= METER_TO_FEET; target_alt *= METER_TO_FEET;
} }
// ApAltitudeDialogInput->setValue((float)target_alt); // ApAltitudeDialogInput->setValue((float)target_alt);
@ -847,7 +847,7 @@ void FGAutopilot::AltitudeAdjust( double inc )
{ {
double target_alt, target_agl; double target_alt, target_agl;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
target_alt = TargetAltitude * METER_TO_FEET; target_alt = TargetAltitude * METER_TO_FEET;
target_agl = TargetAGL * METER_TO_FEET; target_agl = TargetAGL * METER_TO_FEET;
} else { } else {
@ -871,7 +871,7 @@ void FGAutopilot::AltitudeAdjust( double inc )
target_agl = ( int ) ( target_agl / inc ) * inc + inc; target_agl = ( int ) ( target_agl / inc ) * inc + inc;
} }
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
target_alt *= FEET_TO_METER; target_alt *= FEET_TO_METER;
target_agl *= FEET_TO_METER; target_agl *= FEET_TO_METER;
} }
@ -879,9 +879,9 @@ void FGAutopilot::AltitudeAdjust( double inc )
TargetAltitude = target_alt; TargetAltitude = target_alt;
TargetAGL = target_agl; TargetAGL = target_agl;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) if ( fgGetString("/sim/startup/units") == "feet" )
target_alt *= METER_TO_FEET; target_alt *= METER_TO_FEET;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) if ( fgGetString("/sim/startup/units") == "feet" )
target_agl *= METER_TO_FEET; target_agl *= METER_TO_FEET;
if ( altitude_mode == FG_ALTITUDE_LOCK ) { if ( altitude_mode == FG_ALTITUDE_LOCK ) {

View file

@ -44,6 +44,7 @@
#include <Include/general.hxx> #include <Include/general.hxx>
#include <FDM/ADA.hxx> #include <FDM/ADA.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <Scenery/scenery.hxx> #include <Scenery/scenery.hxx>
#include <Time/fg_timer.hxx> #include <Time/fg_timer.hxx>
#include <GUI/gui.h> #include <GUI/gui.h>
@ -154,7 +155,7 @@ float get_speed( void )
{ {
// Make an explicit function call. // Make an explicit function call.
float speed = current_aircraft.fdm_state->get_V_calibrated_kts() float speed = current_aircraft.fdm_state->get_V_calibrated_kts()
* globals->get_options()->get_speed_up(); * fgGetInt("/sim/speed-up"); // FIXME: inefficient
return( speed ); return( speed );
} }
@ -198,7 +199,7 @@ float get_altitude( void )
// f->get_Latitude() * RAD_TO_ARCSEC); // f->get_Latitude() * RAD_TO_ARCSEC);
float altitude; float altitude;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
altitude = current_aircraft.fdm_state->get_Altitude(); altitude = current_aircraft.fdm_state->get_Altitude();
} else { } else {
altitude = (current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER); altitude = (current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
@ -210,7 +211,7 @@ float get_agl( void )
{ {
float agl; float agl;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
agl = (current_aircraft.fdm_state->get_Altitude() agl = (current_aircraft.fdm_state->get_Altitude()
- scenery.cur_elev * METER_TO_FEET); - scenery.cur_elev * METER_TO_FEET);
} else { } else {
@ -262,7 +263,7 @@ float get_vfc_tris_culled ( void )
float get_climb_rate( void ) float get_climb_rate( void )
{ {
float climb_rate; float climb_rate;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * 60.0; climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * 60.0;
} else { } else {
climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * FEET_TO_METER * 60.0; climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * FEET_TO_METER * 60.0;
@ -704,12 +705,15 @@ void fgCockpitUpdate( void ) {
"Cockpit: code " << ac_cockpit->code() << " status " "Cockpit: code " << ac_cockpit->code() << " status "
<< ac_cockpit->status() ); << ac_cockpit->status() );
int iwidth = globals->get_options()->get_xsize(); // FIXME: inefficient
int iheight = globals->get_options()->get_ysize(); int iwidth = fgGetInt("/sim/startup/xsize");
// FIXME: inefficient
int iheight = fgGetInt("/sim/startup/ysize");
float width = iwidth; float width = iwidth;
float height = iheight; float height = iheight;
if ( globals->get_options()->get_hud_status() ) { // FIXME: inefficient
if ( fgGetBool("/sim/hud/visibility") ) {
// This will check the global hud linked list pointer. // This will check the global hud linked list pointer.
// If these is anything to draw it will. // If these is anything to draw it will.
fgUpdateHUD(); fgUpdateHUD();
@ -728,8 +732,8 @@ void fgCockpitUpdate( void ) {
glMatrixMode( GL_PROJECTION ); glMatrixMode( GL_PROJECTION );
glPushMatrix(); glPushMatrix();
glLoadIdentity(); glLoadIdentity();
gluOrtho2D( 0, globals->get_options()->get_xsize(), gluOrtho2D( 0, fgGetInt("/sim/startup/xsize"),
0, globals->get_options()->get_ysize() ); 0, fgGetInt("/sim/startup/ysize") );
glMatrixMode( GL_MODELVIEW ); glMatrixMode( GL_MODELVIEW );
glPushMatrix(); glPushMatrix();
glLoadIdentity(); glLoadIdentity();
@ -752,7 +756,7 @@ void fgCockpitUpdate( void ) {
#endif // #ifdef DISPLAY_COUNTER #endif // #ifdef DISPLAY_COUNTER
glViewport( 0, 0, glViewport( 0, 0,
globals->get_options()->get_xsize(), fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
} }

View file

@ -41,6 +41,7 @@ class fg_Cockpit {
private: private:
int Code; int Code;
int cockpitStatus; int cockpitStatus;
SGValue * hud_status;
public: public:
fg_Cockpit () : Code(1), cockpitStatus(0) {}; fg_Cockpit () : Code(1), cockpitStatus(0) {};

View file

@ -50,6 +50,7 @@
#include <Autopilot/newauto.hxx> #include <Autopilot/newauto.hxx>
#include <GUI/gui.h> #include <GUI/gui.h>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
#include <NetworkOLK/network.h> #include <NetworkOLK/network.h>
#endif #endif
@ -418,7 +419,7 @@ readLabel(const SGPropertyNode * node)
{ {
instr_item *p; instr_item *p;
int font_size = (globals->get_options()->get_xsize() > 1000) ? LARGE : SMALL; int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? LARGE : SMALL;
name = node->getStringValue("name"); name = node->getStringValue("name");
x = node->getIntValue("x"); x = node->getIntValue("x");
@ -602,7 +603,7 @@ int readInstrument(const SGPropertyNode * node)
instr_item *HIptr; instr_item *HIptr;
if ( globals->get_options()->get_units() == FGOptions::FG_UNITS_FEET ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
strcpy(units, " ft"); strcpy(units, " ft");
} else { } else {
strcpy(units, " m"); strcpy(units, " m");
@ -683,7 +684,7 @@ int readHud( istream &input )
const SGPropertyNode * node = instrument_group->getChild(i); const SGPropertyNode * node = instrument_group->getChild(i);
FGPath path( globals->get_options()->get_fg_root() ); FGPath path( globals->get_fg_root() );
path.append(node->getStringValue("path")); path.append(node->getStringValue("path"));
FG_LOG(FG_INPUT, FG_INFO, "Reading Instrument " FG_LOG(FG_INPUT, FG_INFO, "Reading Instrument "
@ -712,9 +713,8 @@ int fgHUDInit( fgAIRCRAFT * /* current_aircraft */ )
FG_LOG( FG_COCKPIT, FG_INFO, "Initializing current aircraft HUD" ); FG_LOG( FG_COCKPIT, FG_INFO, "Initializing current aircraft HUD" );
string hud_path = string hud_path =
globals->get_props()->getStringValue("/sim/hud/path", fgGetString("/sim/hud/path", "Huds/Default/default.xml");
"Huds/Default/default.xml"); FGPath path(globals->get_fg_root());
FGPath path(globals->get_options()->get_fg_root());
path.append(hud_path); path.append(hud_path);
ifstream input(path.c_str()); ifstream input(path.c_str());
@ -743,7 +743,7 @@ int fgHUDInit2( fgAIRCRAFT * /* current_aircraft */ )
FG_LOG( FG_COCKPIT, FG_INFO, "Initializing current aircraft HUD" ); FG_LOG( FG_COCKPIT, FG_INFO, "Initializing current aircraft HUD" );
FGPath path(globals->get_options()->get_fg_root()); FGPath path(globals->get_fg_root());
path.append("Huds/Minimal/default.xml"); path.append("Huds/Minimal/default.xml");
@ -766,14 +766,14 @@ int global_day_night_switch = DAY;
void HUD_masterswitch( bool incr ) void HUD_masterswitch( bool incr )
{ {
if ( globals->get_options()->get_hud_status() ) { if ( fgGetBool("/sim/hud/visibility") ) {
if ( global_day_night_switch == DAY ) { if ( global_day_night_switch == DAY ) {
global_day_night_switch = NIGHT; global_day_night_switch = NIGHT;
} else { } else {
globals->get_options()->set_hud_status( false ); fgSetBool("/sim/hud/visiblity", false);
} }
} else { } else {
globals->get_options()->set_hud_status( true ); fgSetBool("/sim/hud/visibility", true);
global_day_night_switch = DAY; global_day_night_switch = DAY;
} }
} }
@ -783,7 +783,7 @@ void HUD_brightkey( bool incr_bright )
instr_item *pHUDInstr = HUD_deque[0]; instr_item *pHUDInstr = HUD_deque[0];
int brightness = pHUDInstr->get_brightness(); int brightness = pHUDInstr->get_brightness();
if( globals->get_options()->get_hud_status() ) { if( fgGetBool("/sim/hud/visibility") ) {
if( incr_bright ) { if( incr_bright ) {
switch (brightness) switch (brightness)
{ {
@ -826,11 +826,11 @@ void HUD_brightkey( bool incr_bright )
break; break;
default: default:
globals->get_options()->set_hud_status(0); fgSetBool("/sim/hud/visibility", false);
} }
} }
} else { } else {
globals->get_options()->set_hud_status(true); fgSetBool("/sim/hud/visibility", true);
} }
pHUDInstr->SetBrightness( brightness ); pHUDInstr->SetBrightness( brightness );
@ -858,7 +858,7 @@ static void alpha_adj( puObject *hs ) {
} }
void fgHUDalphaAdjust( puObject * ) { void fgHUDalphaAdjust( puObject * ) {
globals->get_options()->set_anti_alias_hud(1); fgSetBool("/sim/hud/antialiased", true);
FG_PUSH_PUI_DIALOG( HUDalphaDialog ); FG_PUSH_PUI_DIALOG( HUDalphaDialog );
} }
@ -869,7 +869,7 @@ static void goAwayHUDalphaAdjust (puObject *)
static void cancelHUDalphaAdjust (puObject *) static void cancelHUDalphaAdjust (puObject *)
{ {
globals->get_options()->set_anti_alias_hud(0); fgSetBool("/sim/hud/antialiased", false);
FG_POP_PUI_DIALOG( HUDalphaDialog ); FG_POP_PUI_DIALOG( HUDalphaDialog );
} }
@ -957,7 +957,7 @@ void fgHUDReshape(void) {
if ( HUDtext ) if ( HUDtext )
delete HUDtext; delete HUDtext;
HUD_TextSize = globals->get_options()->get_xsize() / 60; HUD_TextSize = fgGetInt("/sim/startup/xsize") / 60;
HUD_TextSize = 10; HUD_TextSize = 10;
HUDtext = new fntRenderer(); HUDtext = new fntRenderer();
HUDtext -> setFont ( guiFntHandle ) ; HUDtext -> setFont ( guiFntHandle ) ;
@ -967,7 +967,7 @@ void fgHUDReshape(void) {
static void set_hud_color(float r, float g, float b) { static void set_hud_color(float r, float g, float b) {
globals->get_options()->get_anti_alias_hud() ? fgGetBool("/sim/hud/antialiased") ?
glColor4f(r,g,b,hud_trans_alpha) : glColor4f(r,g,b,hud_trans_alpha) :
glColor3f(r,g,b); glColor3f(r,g,b);
} }
@ -1010,7 +1010,7 @@ void fgUpdateHUD( void ) {
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
if( globals->get_options()->get_anti_alias_hud() ) { if( fgGetBool("/sim/hud/antialiased") ) {
glEnable(GL_LINE_SMOOTH); glEnable(GL_LINE_SMOOTH);
// glEnable(GL_BLEND); // glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
@ -1147,7 +1147,7 @@ void fgUpdateHUD( void ) {
// HUD_StippleLineList.draw(); // HUD_StippleLineList.draw();
// glDisable(GL_LINE_STIPPLE); // glDisable(GL_LINE_STIPPLE);
if( globals->get_options()->get_anti_alias_hud() ) { if( fgGetBool("/sim/hud/antialiased") ) {
// glDisable(GL_BLEND); // glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH); glDisable(GL_LINE_SMOOTH);
glLineWidth(1.0); glLineWidth(1.0);

View file

@ -46,7 +46,8 @@
bool bool
fgPanelVisible () fgPanelVisible ()
{ {
return ((globals->get_options()->get_panel_status()) && return ((current_panel != 0) &&
(current_panel->getVisibility()) &&
(globals->get_viewmgr()->get_current() == 0) && (globals->get_viewmgr()->get_current() == 0) &&
(globals->get_current_view()->get_view_offset() == 0.0)); (globals->get_current_view()->get_view_offset() == 0.0));
} }
@ -65,7 +66,7 @@ FGTextureManager::createTexture (const string &relativePath)
ssgTexture * texture = _textureMap[relativePath]; ssgTexture * texture = _textureMap[relativePath];
if (texture == 0) { if (texture == 0) {
cerr << "Texture " << relativePath << " does not yet exist" << endl; cerr << "Texture " << relativePath << " does not yet exist" << endl;
FGPath tpath(globals->get_options()->get_fg_root()); FGPath tpath(globals->get_fg_root());
tpath.append(relativePath); tpath.append(relativePath);
texture = new ssgTexture((char *)tpath.c_str(), false, false); texture = new ssgTexture((char *)tpath.c_str(), false, false);
_textureMap[relativePath] = texture; _textureMap[relativePath] = texture;
@ -342,8 +343,8 @@ FGPanel::doMouseAction (int button, int updown, int x, int y)
} }
// Scale for the real window size. // Scale for the real window size.
x = int(((float)x / globals->get_options()->get_xsize()) * _winw); x = int(((float)x / fgGetInt("/sim/startup/xsize")) * _winw);
y = int(_winh - (((float)y / globals->get_options()->get_ysize()) y = int(_winh - (((float)y / fgGetInt("/sim/startup/ysize"))
* _winh)); * _winh));
// Adjust for offsets. // Adjust for offsets.

View file

@ -36,6 +36,7 @@
#include <string> #include <string>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include "panel.hxx" #include "panel.hxx"
#include "steam.hxx" #include "steam.hxx"
@ -272,7 +273,7 @@ readAction (const SGPropertyNode * node, float hscale, float vscale)
// Adjust a property value // Adjust a property value
if (type == "adjust") { if (type == "adjust") {
string propName = node->getStringValue("property"); string propName = node->getStringValue("property");
SGValue * value = globals->get_props()->getValue(propName, true); SGValue * value = fgGetValue(propName, true);
float increment = node->getFloatValue("increment", 1.0); float increment = node->getFloatValue("increment", 1.0);
float min = node->getFloatValue("min", 0.0); float min = node->getFloatValue("min", 0.0);
float max = node->getFloatValue("max", 0.0); float max = node->getFloatValue("max", 0.0);
@ -288,15 +289,15 @@ readAction (const SGPropertyNode * node, float hscale, float vscale)
else if (type == "swap") { else if (type == "swap") {
string propName1 = node->getStringValue("property1"); string propName1 = node->getStringValue("property1");
string propName2 = node->getStringValue("property2"); string propName2 = node->getStringValue("property2");
SGValue * value1 = globals->get_props()->getValue(propName1, true); SGValue * value1 = fgGetValue(propName1, true);
SGValue * value2 = globals->get_props()->getValue(propName2, true); SGValue * value2 = fgGetValue(propName2, true);
action = new FGSwapAction(button, x, y, w, h, value1, value2); action = new FGSwapAction(button, x, y, w, h, value1, value2);
} }
// Toggle a boolean value // Toggle a boolean value
else if (type == "toggle") { else if (type == "toggle") {
string propName = node->getStringValue("property"); string propName = node->getStringValue("property");
SGValue * value = globals->get_props()->getValue(propName, true); SGValue * value = fgGetValue(propName, true);
action = new FGToggleAction(button, x, y, w, h, value); action = new FGToggleAction(button, x, y, w, h, value);
} }
@ -353,7 +354,7 @@ readTransformation (const SGPropertyNode * node, float hscale, float vscale)
} }
if (propName != "") { if (propName != "") {
value = globals->get_props()->getValue(propName, true); value = fgGetValue(propName, true);
} }
t->value = value; t->value = value;
@ -436,7 +437,7 @@ readTextChunk (const SGPropertyNode * node)
// The value of a string property. // The value of a string property.
else if (type == "text-value") { else if (type == "text-value") {
SGValue * value = SGValue * value =
globals->get_props()->getValue(node->getStringValue("property"), true); fgGetValue(node->getStringValue("property"), true);
chunk = new FGTextLayer::Chunk(FGTextLayer::TEXT_VALUE, value, format); chunk = new FGTextLayer::Chunk(FGTextLayer::TEXT_VALUE, value, format);
} }
@ -444,7 +445,7 @@ readTextChunk (const SGPropertyNode * node)
else if (type == "number-value") { else if (type == "number-value") {
string propName = node->getStringValue("property"); string propName = node->getStringValue("property");
float scale = node->getFloatValue("scale", 1.0); float scale = node->getFloatValue("scale", 1.0);
SGValue * value = globals->get_props()->getValue(propName, true); SGValue * value = fgGetValue(propName, true);
chunk = new FGTextLayer::Chunk(FGTextLayer::DOUBLE_VALUE, value, chunk = new FGTextLayer::Chunk(FGTextLayer::DOUBLE_VALUE, value,
format, scale); format, scale);
} }
@ -545,7 +546,7 @@ readLayer (const SGPropertyNode * node, float hscale, float vscale)
// A switch instrument layer. // A switch instrument layer.
else if (type == "switch") { else if (type == "switch") {
SGValue * value = SGValue * value =
globals->get_props()->getValue(node->getStringValue("property"), true); fgGetValue(node->getStringValue("property"), true);
FGInstrumentLayer * layer1 = FGInstrumentLayer * layer1 =
readLayer(node->getNode("layer1"), hscale, vscale); readLayer(node->getNode("layer1"), hscale, vscale);
FGInstrumentLayer * layer2 = FGInstrumentLayer * layer2 =
@ -756,7 +757,7 @@ fgReadPanel (istream &input)
for (int i = 0; i < nInstruments; i++) { for (int i = 0; i < nInstruments; i++) {
const SGPropertyNode * node = instrument_group->getChild(i); const SGPropertyNode * node = instrument_group->getChild(i);
FGPath path( globals->get_options()->get_fg_root() ); FGPath path( globals->get_fg_root() );
path.append(node->getStringValue("path")); path.append(node->getStringValue("path"));
FG_LOG(FG_INPUT, FG_INFO, "Reading instrument " FG_LOG(FG_INPUT, FG_INFO, "Reading instrument "
@ -811,7 +812,7 @@ FGPanel *
fgReadPanel (const string &relative_path) fgReadPanel (const string &relative_path)
{ {
FGPanel * panel = 0; FGPanel * panel = 0;
FGPath path(globals->get_options()->get_fg_root()); FGPath path(globals->get_fg_root());
path.append(relative_path); path.append(relative_path);
ifstream input(path.c_str()); ifstream input(path.c_str());
if (!input.good()) { if (!input.good()) {

View file

@ -69,9 +69,9 @@ FGRadioStack::FGRadioStack() {
nav2_radial = 0.0; nav2_radial = 0.0;
nav2_dme_dist = 0.0; nav2_dme_dist = 0.0;
need_update = true; need_update = true;
longitudeVal = globals->get_props()->getValue("/position/longitude"); longitudeVal = fgGetValue("/position/longitude");
latitudeVal = globals->get_props()->getValue("/position/latitude"); latitudeVal = fgGetValue("/position/latitude");
altitudeVal = globals->get_props()->getValue("/position/altitude"); altitudeVal = fgGetValue("/position/altitude");
} }

View file

@ -34,7 +34,6 @@
#include <simgear/misc/props.hxx> #include <simgear/misc/props.hxx>
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Main/bfi.hxx> #include <Main/bfi.hxx>
#include <Main/globals.hxx>
#include <NetworkOLK/features.hxx> #include <NetworkOLK/features.hxx>
FG_USING_NAMESPACE(std); FG_USING_NAMESPACE(std);
@ -98,38 +97,25 @@ int FGSteam::_UpdatesPending = 1000000; /* Forces filter to reset */
// FIXME: no need to use static // FIXME: no need to use static
// functions any longer. // functions any longer.
#define DF1(getter) SGRawValueFunctions<double>(getter,0)
#define DF2(getter, setter) SGRawValueFunctions<double>(getter,setter)
void FGSteam::update ( int timesteps ) void FGSteam::update ( int timesteps )
{ {
if (!isTied) { if (!isTied) {
isTied = true; isTied = true;
globals->get_props()->tie("/steam/airspeed", fgTie("/steam/airspeed", FGSteam::get_ASI_kias);
DF1(FGSteam::get_ASI_kias)); fgTie("/steam/altitude", FGSteam::get_ALT_ft);
globals->get_props()->tie("/steam/altitude", fgTie("/steam/turn-rate", FGSteam::get_TC_std);
DF1(FGSteam::get_ALT_ft)); fgTie("/steam/slip-skid", FGSteam::get_TC_rad);
globals->get_props()->tie("/steam/turn-rate", fgTie("/steam/vertical-speed", FGSteam::get_VSI_fps);
DF1(FGSteam::get_TC_std)); fgTie("/steam/gyro-compass", FGSteam::get_DG_deg);
globals->get_props()->tie("/steam/slip-skid", fgTie("/steam/vor1", FGSteam::get_HackVOR1_deg);
DF1(FGSteam::get_TC_rad)); fgTie("/steam/vor2", FGSteam::get_HackVOR2_deg);
globals->get_props()->tie("/steam/vertical-speed", fgTie("/steam/glidescope1", FGSteam::get_HackGS_deg);
DF1(FGSteam::get_VSI_fps)); fgTie("/steam/adf", FGSteam::get_HackADF_deg);
globals->get_props()->tie("/steam/gyro-compass", fgTie("/steam/gyro-compass-error",
DF1(FGSteam::get_DG_deg)); FGSteam::get_DG_err,
globals->get_props()->tie("/steam/vor1", FGSteam::set_DG_err);
DF1(FGSteam::get_HackVOR1_deg)); fgTie("/steam/mag-compass", FGSteam::get_MH_deg);
globals->get_props()->tie("/steam/vor2",
DF1(FGSteam::get_HackVOR2_deg));
globals->get_props()->tie("/steam/glidescope1",
DF1(FGSteam::get_HackGS_deg));
globals->get_props()->tie("/steam/adf",
DF1(FGSteam::get_HackADF_deg));
globals->get_props()->tie("/steam/gyro-compass-error",
DF2(FGSteam::get_DG_err,
FGSteam::set_DG_err));
globals->get_props()->tie("/steam/mag-compass",
DF1(FGSteam::get_MH_deg));
} }
_UpdatesPending += timesteps; _UpdatesPending += timesteps;
} }
@ -175,7 +161,7 @@ void FGSteam::set_lowpass ( double *outthe, double inthe, double tc )
void FGSteam::_CatchUp() void FGSteam::_CatchUp()
{ if ( _UpdatesPending != 0 ) { if ( _UpdatesPending != 0 )
{ double dt = _UpdatesPending * 1.0 / { double dt = _UpdatesPending * 1.0 /
globals->get_options()->get_model_hz(); fgGetInt("/sim/model-hz"); // FIXME: inefficient
double AccN, AccE, AccU; double AccN, AccE, AccU;
int i /*,j*/; int i /*,j*/;
double d, the_ENGINE_rpm; double d, the_ENGINE_rpm;

View file

@ -38,15 +38,6 @@ FGControls::FGControls() :
rudder( 0.0 ), rudder( 0.0 ),
throttle_idle( true ) throttle_idle( true )
{ {
for ( int engine = 0; engine < MAX_ENGINES; engine++ ) {
throttle[engine] = 0.0;
mixture[engine] = 1.0;
prop_advance[engine] = 1.0;
}
for ( int wheel = 0; wheel < MAX_WHEELS; wheel++ ) {
brake[wheel] = 0.0;
}
} }
@ -69,6 +60,17 @@ FGControls::~FGControls() {
void void
FGControls::init () FGControls::init ()
{ {
for ( int engine = 0; engine < MAX_ENGINES; engine++ ) {
throttle[engine] = 0.0;
mixture[engine] = 1.0;
prop_advance[engine] = 1.0;
}
for ( int wheel = 0; wheel < MAX_WHEELS; wheel++ ) {
brake[wheel] = 0.0;
}
auto_coordination = fgGetValue("/sim/auto-coordination", true);
} }

View file

@ -24,8 +24,8 @@
#ifndef _CONTROLS_HXX #ifndef _CONTROLS_HXX
#define _CONTROLS_HXX #define _CONTROLS_HXX
#include <simgear/misc/props.hxx>
#include <Main/fgfs.hxx> #include <Main/fgfs.hxx>
#include <Main/globals.hxx>
#ifndef __cplusplus #ifndef __cplusplus
# error This library requires C++ # error This library requires C++
@ -64,6 +64,8 @@ private:
double brake[MAX_WHEELS]; double brake[MAX_WHEELS];
bool throttle_idle; bool throttle_idle;
SGValue * auto_coordination;
inline void CLAMP(double *x, double min, double max ) { inline void CLAMP(double *x, double min, double max ) {
if ( *x < min ) { *x = min; } if ( *x < min ) { *x = min; }
if ( *x > max ) { *x = max; } if ( *x > max ) { *x = max; }
@ -102,8 +104,7 @@ public:
CLAMP( &aileron, -1.0, 1.0 ); CLAMP( &aileron, -1.0, 1.0 );
// check for autocoordination // check for autocoordination
if ( globals->get_options()->get_auto_coordination() == if ( auto_coordination->getBoolValue() )
FGOptions::FG_AUTO_COORD_ENABLED )
{ {
set_rudder( aileron / 2.0 ); set_rudder( aileron / 2.0 );
} }
@ -113,8 +114,7 @@ public:
CLAMP( &aileron, -1.0, 1.0 ); CLAMP( &aileron, -1.0, 1.0 );
// check for autocoordination // check for autocoordination
if ( globals->get_options()->get_auto_coordination() == if ( auto_coordination->getBoolValue() )
FGOptions::FG_AUTO_COORD_ENABLED )
{ {
set_rudder( aileron / 2.0 ); set_rudder( aileron / 2.0 );
} }

View file

@ -53,6 +53,7 @@ HISTORY
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Controls/controls.hxx> #include <Controls/controls.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include "Balloon.h" #include "Balloon.h"
@ -89,9 +90,9 @@ bool FGBalloonSim::init( double dt ) {
//set velocities //set velocities
sgSetVec3( temp, sgSetVec3( temp,
globals->get_options()->get_uBody(), fgGetDouble("/velocities/uBody"),
globals->get_options()->get_vBody(), fgGetDouble("/velocities/vBody"),
globals->get_options()->get_wBody() ); fgGetDouble("/velocities/wBody") );
current_balloon.setVelocity( temp ); current_balloon.setVelocity( temp );
FG_LOG( FG_FLIGHT, FG_INFO, "Finished initializing BalloonSim" ); FG_LOG( FG_FLIGHT, FG_INFO, "Finished initializing BalloonSim" );

View file

@ -45,7 +45,6 @@ HISTORY
#include <simgear/constants.h> #include <simgear/constants.h>
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Main/options.hxx>
#include <WeatherCM/FGLocalWeatherDatabase.h> #include <WeatherCM/FGLocalWeatherDatabase.h>
#include "BalloonSim.h" #include "BalloonSim.h"

View file

@ -42,7 +42,7 @@ bool FGExternal::init( double dt ) {
bool FGExternal::update( int multiloop ) { bool FGExternal::update( int multiloop ) {
// cout << "FGExternal::update()" << endl; // cout << "FGExternal::update()" << endl;
// double time_step = (1.0 / globals->get_options()->get_model_hz()) // double time_step = (1.0 / fgGetInt("/sim/model-hz"))
// * multiloop; // * multiloop;

View file

@ -39,6 +39,7 @@
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Controls/controls.hxx> #include <Controls/controls.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <FDM/JSBSim/FGFDMExec.h> #include <FDM/JSBSim/FGFDMExec.h>
#include <FDM/JSBSim/FGAircraft.h> #include <FDM/JSBSim/FGAircraft.h>
@ -66,17 +67,17 @@ FGJSBsim::FGJSBsim(void) {
fgic=new FGInitialCondition(fdmex); fgic=new FGInitialCondition(fdmex);
needTrim=true; needTrim=true;
FGPath aircraft_path( globals->get_options()->get_fg_root() ); FGPath aircraft_path( globals->get_fg_root() );
aircraft_path.append( "Aircraft" ); aircraft_path.append( "Aircraft" );
FGPath engine_path( globals->get_options()->get_fg_root() ); FGPath engine_path( globals->get_fg_root() );
engine_path.append( "Engine" ); engine_path.append( "Engine" );
float dt = 1.0 / globals->get_options()->get_model_hz(); float dt = 1.0 / fgGetInt("/sim/model-hz");
fdmex->GetState()->Setdt( dt ); fdmex->GetState()->Setdt( dt );
result = fdmex->LoadModel( aircraft_path.str(), result = fdmex->LoadModel( aircraft_path.str(),
engine_path.str(), engine_path.str(),
globals->get_options()->get_aircraft() ); fgGetString("/sim/aircraft") );
int Neng=fdmex->GetAircraft()->GetNumEngines(); int Neng=fdmex->GetAircraft()->GetNumEngines();
FG_LOG(FG_FLIGHT,FG_INFO, "Neng: " << Neng ); FG_LOG(FG_FLIGHT,FG_INFO, "Neng: " << Neng );
for(int i=0;i<Neng;i++) { for(int i=0;i<Neng;i++) {
@ -105,24 +106,24 @@ bool FGJSBsim::init( double dt ) {
FG_LOG( FG_FLIGHT, FG_INFO, "Starting and initializing JSBsim" ); FG_LOG( FG_FLIGHT, FG_INFO, "Starting and initializing JSBsim" );
#if 0 #if 0
FGPath aircraft_path( globals->get_options()->get_fg_root() ); FGPath aircraft_path( globals->get_fg_root() );
aircraft_path.append( "Aircraft" ); aircraft_path.append( "Aircraft" );
FGPath engine_path( globals->get_options()->get_fg_root() ); FGPath engine_path( globals->get_fg_root() );
engine_path.append( "Engine" ); engine_path.append( "Engine" );
fdmex->GetState()->Setdt( dt ); fdmex->GetState()->Setdt( dt );
result = fdmex->LoadModel( aircraft_path.str(), result = fdmex->LoadModel( aircraft_path.str(),
engine_path.str(), engine_path.str(),
globals->get_options()->get_aircraft() ); fgGetString("/sim/aircraft") );
#endif #endif
if (result) { if (result) {
FG_LOG( FG_FLIGHT, FG_INFO, " loaded aircraft " << globals->get_options()->get_aircraft() ); FG_LOG( FG_FLIGHT, FG_INFO, " loaded aircraft " << fgGetString("/sim/aircraft") );
} else { } else {
FG_LOG( FG_FLIGHT, FG_INFO, " aircraft " FG_LOG( FG_FLIGHT, FG_INFO, " aircraft "
<< globals->get_options()->get_aircraft() << fgGetString("/sim/aircraft")
<< " does not exist" ); << " does not exist" );
return false; return false;
} }
@ -156,7 +157,6 @@ bool FGJSBsim::init( double dt ) {
} }
//FG_LOG( FG_FLIGHT, FG_INFO, " gamma: " << globals->get_options()->get_Gamma());
FG_LOG( FG_FLIGHT, FG_INFO, " Bank Angle: " FG_LOG( FG_FLIGHT, FG_INFO, " Bank Angle: "
<< fdmex->GetRotation()->Getphi()*RADTODEG << " deg"); << fdmex->GetRotation()->Getphi()*RADTODEG << " deg");
FG_LOG( FG_FLIGHT, FG_INFO, " Pitch Angle: " FG_LOG( FG_FLIGHT, FG_INFO, " Pitch Angle: "
@ -180,8 +180,8 @@ bool FGJSBsim::init( double dt ) {
FG_LOG( FG_FLIGHT, FG_DEBUG, " Calculated Aircraft AGL: " << endl FG_LOG( FG_FLIGHT, FG_DEBUG, " Calculated Aircraft AGL: " << endl
<< " " << "get_Altitude() + get_Sea_level_radius() - scenery.cur_radius*METER_TO_FEET= " << " " << "get_Altitude() + get_Sea_level_radius() - scenery.cur_radius*METER_TO_FEET= "
<< get_Altitude() + get_Sea_level_radius()- scenery.cur_radius*METER_TO_FEET ); << get_Altitude() + get_Sea_level_radius()- scenery.cur_radius*METER_TO_FEET );
FG_LOG( FG_FLIGHT, FG_DEBUG, " globals->get_options()->get_altitude(): " FG_LOG( FG_FLIGHT, FG_DEBUG, " fgGetDouble("/position/altitude"): "
<< globals->get_options()->get_altitude() ); << fgGetDouble("/position/altitude") );
FG_LOG( FG_FLIGHT, FG_DEBUG, " FGBFI::getAltitude(): " FG_LOG( FG_FLIGHT, FG_DEBUG, " FGBFI::getAltitude(): "
<< FGBFI::getAltitude() ); */ << FGBFI::getAltitude() ); */
@ -208,7 +208,7 @@ bool FGJSBsim::update( int multiloop ) {
copy_to_JSBsim(); copy_to_JSBsim();
if(needTrim && (globals->get_options()->get_trim_mode() > 0)) { if(needTrim && fgGetBool("/sim/startup/trim")) {
//fgic->SetSeaLevelRadiusFtIC( get_Sea_level_radius() ); //fgic->SetSeaLevelRadiusFtIC( get_Sea_level_radius() );
//fgic->SetTerrainAltitudeFtIC( scenery.cur_elev * METER_TO_FEET ); //fgic->SetTerrainAltitudeFtIC( scenery.cur_elev * METER_TO_FEET );
FGTrim *fgtrim; FGTrim *fgtrim;

View file

@ -26,6 +26,7 @@
#include <Scenery/scenery.hxx> #include <Scenery/scenery.hxx>
#include <Main/fg_props.hxx>
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Controls/controls.hxx> #include <Controls/controls.hxx>
#include <FDM/flight.hxx> #include <FDM/flight.hxx>
@ -39,7 +40,7 @@
FGLaRCsim::FGLaRCsim(void) { FGLaRCsim::FGLaRCsim(void) {
ls_toplevel_init( 0.0, ls_toplevel_init( 0.0,
(char *)globals->get_options()->get_aircraft().c_str() ); (char *)fgGetString("/sim/aircraft").c_str() );
lsic=new LaRCsimIC; //this needs to be brought up after LaRCsim is lsic=new LaRCsimIC; //this needs to be brought up after LaRCsim is
copy_to_LaRCsim(); // initialize all of LaRCsim's vars copy_to_LaRCsim(); // initialize all of LaRCsim's vars
//this should go away someday -- formerly done in fg_init.cxx //this should go away someday -- formerly done in fg_init.cxx
@ -59,6 +60,8 @@ FGLaRCsim::~FGLaRCsim(void) {
// Initialize the LaRCsim flight model, dt is the time increment for // Initialize the LaRCsim flight model, dt is the time increment for
// each subsequent iteration through the EOM // each subsequent iteration through the EOM
bool FGLaRCsim::init( double dt ) { bool FGLaRCsim::init( double dt ) {
speed_up = fgGetValue("/sim/speed-up", true);
ls_set_model_dt(dt); ls_set_model_dt(dt);
// Initialize our little engine that hopefully might // Initialize our little engine that hopefully might
@ -84,7 +87,7 @@ bool FGLaRCsim::init( double dt ) {
copy_to_LaRCsim(); copy_to_LaRCsim();
// actual LaRCsim top level init // actual LaRCsim top level init
// ls_toplevel_init( dt, (char *)globals->get_options()->get_aircraft().c_str() ); // ls_toplevel_init( dt, (char *)fgGetString("/sim/aircraft").c_str() );
FG_LOG( FG_FLIGHT, FG_INFO, "FG pos = " << FG_LOG( FG_FLIGHT, FG_INFO, "FG pos = " <<
get_Latitude() ); get_Latitude() );
@ -107,7 +110,7 @@ bool FGLaRCsim::init( double dt ) {
// Run an iteration of the EOM (equations of motion) // Run an iteration of the EOM (equations of motion)
bool FGLaRCsim::update( int multiloop ) { bool FGLaRCsim::update( int multiloop ) {
if ( globals->get_options()->get_aircraft() == "c172" ) { if ( fgGetString("/sim/aircraft") == "c172" ) {
// set control inputs // set control inputs
eng.set_IAS( V_calibrated_kts ); eng.set_IAS( V_calibrated_kts );
eng.set_Throttle_Lever_Pos( controls.get_throttle( 0 ) * 100.0 ); eng.set_Throttle_Lever_Pos( controls.get_throttle( 0 ) * 100.0 );
@ -161,14 +164,14 @@ bool FGLaRCsim::update( int multiloop ) {
// copy control positions into the LaRCsim structure // copy control positions into the LaRCsim structure
Lat_control = controls.get_aileron() / Lat_control = controls.get_aileron() /
globals->get_options()->get_speed_up(); speed_up->getIntValue();
Long_control = controls.get_elevator(); Long_control = controls.get_elevator();
Long_trim = controls.get_elevator_trim(); Long_trim = controls.get_elevator_trim();
Rudder_pedal = controls.get_rudder() / Rudder_pedal = controls.get_rudder() /
globals->get_options()->get_speed_up(); speed_up->getIntValue();
Flap_handle = 30.0 * controls.get_flaps(); Flap_handle = 30.0 * controls.get_flaps();
if ( globals->get_options()->get_aircraft() == "c172" ) { if ( fgGetString("/sim/aircraft") == "c172" ) {
Use_External_Engine = 1; Use_External_Engine = 1;
} else { } else {
Use_External_Engine = 0; Use_External_Engine = 0;

View file

@ -38,6 +38,7 @@ class FGLaRCsim: public FGInterface {
void set_ls(void); void set_ls(void);
void snap_shot(void); void snap_shot(void);
double time_step; double time_step;
SGValue * speed_up;
public: public:
FGLaRCsim(void); FGLaRCsim(void);

View file

@ -27,6 +27,7 @@
#include <Controls/controls.hxx> #include <Controls/controls.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include "MagicCarpet.hxx" #include "MagicCarpet.hxx"
@ -36,6 +37,7 @@
bool FGMagicCarpet::init( double dt ) { bool FGMagicCarpet::init( double dt ) {
// set valid time for this record // set valid time for this record
stamp_time(); stamp_time();
model_hz = fgGetValue("/sim/model-hz", true);
return true; return true;
} }
@ -45,7 +47,7 @@ bool FGMagicCarpet::init( double dt ) {
bool FGMagicCarpet::update( int multiloop ) { bool FGMagicCarpet::update( int multiloop ) {
// cout << "FGLaRCsim::update()" << endl; // cout << "FGLaRCsim::update()" << endl;
double time_step = (1.0 / globals->get_options()->get_model_hz()) * double time_step = (1.0 / model_hz->getIntValue()) *
multiloop; multiloop;
// speed and distance traveled // speed and distance traveled

View file

@ -36,6 +36,9 @@ public:
// update position based on inputs, positions, velocities, etc. // update position based on inputs, positions, velocities, etc.
bool update( int multiloop ); bool update( int multiloop );
private:
SGValue * model_hz;
}; };

View file

@ -241,7 +241,7 @@ void FGInterface::extrapolate( int time_offset ) {
// Set the altitude (force) // Set the altitude (force)
void fgFDMForceAltitude(int model, double alt_meters) { void fgFDMForceAltitude(const string &model, double alt_meters) {
double sea_level_radius_meters; double sea_level_radius_meters;
double lat_geoc; double lat_geoc;
@ -255,14 +255,14 @@ void fgFDMForceAltitude(int model, double alt_meters) {
// additional work needed for some flight models // additional work needed for some flight models
if ( model == FGInterface::FG_LARCSIM ) { if ( model == "larcsim" ) {
ls_ForceAltitude( base_fdm_state.get_Altitude() ); ls_ForceAltitude( base_fdm_state.get_Altitude() );
} }
} }
// Set the local ground elevation // Set the local ground elevation
void fgFDMSetGroundElevation(int model, double ground_meters) { void fgFDMSetGroundElevation(const string &model, double ground_meters) {
FG_LOG( FG_FLIGHT,FG_INFO, "fgFDMSetGroundElevation: " FG_LOG( FG_FLIGHT,FG_INFO, "fgFDMSetGroundElevation: "
<< ground_meters*METER_TO_FEET ); << ground_meters*METER_TO_FEET );
base_fdm_state.set_Runway_altitude( ground_meters * METER_TO_FEET ); base_fdm_state.set_Runway_altitude( ground_meters * METER_TO_FEET );

View file

@ -87,11 +87,13 @@
#include <list> #include <list>
#include <vector> #include <vector>
#include <string>
#include <simgear/timing/timestamp.hxx> #include <simgear/timing/timestamp.hxx>
FG_USING_STD(list); FG_USING_STD(list);
FG_USING_STD(vector); FG_USING_STD(vector);
FG_USING_STD(string);
typedef double FG_VECTOR_3[3]; typedef double FG_VECTOR_3[3];
@ -1027,17 +1029,11 @@ extern FGInterface * cur_fdm_state;
// General interface to the flight model routines // General interface to the flight model routines
// Initialize the flight model parameters
int fgFDMInit(int model, FGInterface& f, double dt);
// Run multiloop iterations of the flight model
int fgFDMUpdate(int model, FGInterface& f, int multiloop, int jitter);
// Set the altitude (force) // Set the altitude (force)
void fgFDMForceAltitude(int model, double alt_meters); void fgFDMForceAltitude(const string &model, double alt_meters);
// Set the local ground elevation // Set the local ground elevation
void fgFDMSetGroundElevation(int model, double alt_meters); void fgFDMSetGroundElevation(const string &model, double alt_meters);
#endif // _FLIGHT_HXX #endif // _FLIGHT_HXX

View file

@ -22,8 +22,8 @@
#include <Airports/simple.hxx> #include <Airports/simple.hxx>
#include <FDM/flight.hxx> #include <FDM/flight.hxx>
#include <Main/fg_init.hxx> #include <Main/fg_init.hxx>
#include <Main/fg_props.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/options.hxx>
//#include <Time/fg_time.hxx> //#include <Time/fg_time.hxx>
#include "gui.h" #include "gui.h"
@ -51,7 +51,7 @@ void AptDialog_Cancel(puObject *)
void AptDialog_OK (puObject *) void AptDialog_OK (puObject *)
{ {
FGPath path( globals->get_options()->get_fg_root() ); FGPath path( globals->get_fg_root() );
path.append( "Airports" ); path.append( "Airports" );
path.append( "simple.mk4" ); path.append( "simple.mk4" );
FGAirports airports( path.c_str() ); FGAirports airports( path.c_str() );
@ -78,8 +78,8 @@ void AptDialog_OK (puObject *)
if ( airports.search( AptId, &a ) ) if ( airports.search( AptId, &a ) )
{ {
globals->get_options()->set_airport_id( AptId.c_str() ); fgSetString("/sim/startup/airport-id", AptId.c_str() );
globals->get_options()->set_altitude( -9999.0 ); fgSetDouble("/position/altitude", -9999.0 );
// fgSetPosFromAirportID( AptId ); // fgSetPosFromAirportID( AptId );
fgSetPosFromAirportIDandHdg( AptId, fgSetPosFromAirportIDandHdg( AptId,
cur_fdm_state->get_Psi() * RAD_TO_DEG); cur_fdm_state->get_Psi() * RAD_TO_DEG);
@ -97,16 +97,16 @@ void AptDialog_OK (puObject *)
void AptDialog_Reset(puObject *) void AptDialog_Reset(puObject *)
{ {
// strncpy( NewAirportId, globals->get_options()->get_airport_id().c_str(), 16 ); // strncpy( NewAirportId, fgGetString("/sim/startup/airport-id").c_str(), 16 );
sprintf( NewAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
AptDialogInput->setValue ( NewAirportId ); AptDialogInput->setValue ( NewAirportId );
AptDialogInput->setCursor( 0 ) ; AptDialogInput->setCursor( 0 ) ;
} }
void NewAirport(puObject *cb) void NewAirport(puObject *cb)
{ {
// strncpy( NewAirportId, globals->get_options()->get_airport_id().c_str(), 16 ); // strncpy( NewAirportId, fgGetString("/sim/startup/airport-id").c_str(), 16 );
sprintf( NewAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
// cout << "NewAirport " << NewAirportId << endl; // cout << "NewAirport " << NewAirportId << endl;
AptDialogInput->setValue( NewAirportId ); AptDialogInput->setValue( NewAirportId );
@ -115,7 +115,7 @@ void NewAirport(puObject *cb)
void NewAirportInit(void) void NewAirportInit(void)
{ {
sprintf( NewAirportId, "%s", globals->get_options()->get_airport_id().c_str() ); sprintf( NewAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
int len = 150 - puGetStringWidth( puGetDefaultLabelFont(), int len = 150 - puGetStringWidth( puGetDefaultLabelFont(),
NewAirportLabel ) / 2; NewAirportLabel ) / 2;

View file

@ -315,7 +315,10 @@ static void loadFlight(puObject *cb)
// This is the accessor function // This is the accessor function
void guiTogglePanel(puObject *cb) void guiTogglePanel(puObject *cb)
{ {
globals->get_options()->toggle_panel(); if (fgGetBool("/sim/panel/visibility"))
fgSetBool("/sim/panel/visiblity", false);
else
fgSetBool("/sim/panel/visibility", true);
} }
//void MenuHideMenuCb(puObject *cb) //void MenuHideMenuCb(puObject *cb)
@ -331,7 +334,7 @@ void goodBye(puObject *)
cout << "Program exiting normally at user request." << endl; cout << "Program exiting normally at user request." << endl;
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
if ( globals->get_options()->get_network_olk() ) { if ( fgGetBool("/sim/networking/network-olk") ) {
if ( net_is_registered == 0 ) fgd_send_com( "8", FGFS_host); if ( net_is_registered == 0 ) fgd_send_com( "8", FGFS_host);
} }
#endif #endif
@ -351,8 +354,8 @@ void goAwayCb (puObject *me)
void mkDialogInit (void) void mkDialogInit (void)
{ {
// printf("mkDialogInit\n"); // printf("mkDialogInit\n");
int x = (globals->get_options()->get_xsize()/2 - 400/2); int x = (fgGetInt("/sim/startup/xsize")/2 - 400/2);
int y = (globals->get_options()->get_ysize()/2 - 100/2); int y = (fgGetInt("/sim/startup/ysize")/2 - 100/2);
dialogBox = new puDialogBox (x, y); // 150, 50 dialogBox = new puDialogBox (x, y); // 150, 50
{ {
dialogFrame = new puFrame (0,0,400,100); dialogFrame = new puFrame (0,0,400,100);
@ -384,8 +387,8 @@ void ConfirmExitDialogInit(void)
// printf("ConfirmExitDialogInit\n"); // printf("ConfirmExitDialogInit\n");
int len = 200 - puGetStringWidth( puGetDefaultLabelFont(), msg )/2; int len = 200 - puGetStringWidth( puGetDefaultLabelFont(), msg )/2;
int x = (globals->get_options()->get_xsize()/2 - 400/2); int x = (fgGetInt("/sim/startup/xsize")/2 - 400/2);
int y = (globals->get_options()->get_ysize()/2 - 100/2); int y = (fgGetInt("/sim/startup/ysize")/2 - 100/2);
YNdialogBox = new puDialogBox (x, y); // 150, 50 YNdialogBox = new puDialogBox (x, y); // 150, 50
// YNdialogBox = new puDialogBox (150, 50); // YNdialogBox = new puDialogBox (150, 50);
@ -457,13 +460,13 @@ static GlBitmap *b1 = NULL;
extern FGInterface cur_view_fdm; extern FGInterface cur_view_fdm;
GLubyte *hiResScreenCapture( int multiplier ) GLubyte *hiResScreenCapture( int multiplier )
{ {
float oldfov = globals->get_options()->get_fov(); float oldfov = fgGetDouble("/sim/field-of-view");
float fov = oldfov / multiplier; float fov = oldfov / multiplier;
FGViewer *v = globals->get_current_view(); FGViewer *v = globals->get_current_view();
globals->get_options()->set_fov(fov); fgSetDouble("/sim/field-of-view", fov);
fgInitVisuals(); fgInitVisuals();
int cur_width = globals->get_options()->get_xsize( ); int cur_width = fgGetInt("/sim/startup/xsize");
int cur_height = globals->get_options()->get_ysize( ); int cur_height = fgGetInt("/sim/startup/ysize");
if (b1) delete( b1 ); if (b1) delete( b1 );
// New empty (mostly) bitmap // New empty (mostly) bitmap
b1 = new GlBitmap( GL_RGB, 1, 1, (unsigned char *)"123" ); b1 = new GlBitmap( GL_RGB, 1, 1, (unsigned char *)"123" );
@ -479,7 +482,7 @@ GLubyte *hiResScreenCapture( int multiplier )
b1->copyBitmap( &b2, cur_width*x, cur_height*y ); b1->copyBitmap( &b2, cur_width*x, cur_height*y );
} }
} }
globals->get_options()->set_fov(oldfov); fgSetDouble("/sim/field-of-view", oldfov);
return b1->getBitmap(); return b1->getBitmap();
} }
#endif #endif
@ -498,8 +501,8 @@ void printScreen ( puObject *obj ) {
mainMenuBar->hide(); mainMenuBar->hide();
CGlPrinter p( CGlPrinter::PRINT_BITMAP ); CGlPrinter p( CGlPrinter::PRINT_BITMAP );
int cur_width = globals->get_options()->get_xsize( ); int cur_width = fgGetInt("/sim/startup/xsize");
int cur_height = globals->get_options()->get_ysize( ); int cur_height = fgGetInt("/sim/startup/ysize");
p.Begin( "FlightGear", cur_width*3, cur_height*3 ); p.Begin( "FlightGear", cur_width*3, cur_height*3 );
p.End( hiResScreenCapture(3) ); p.End( hiResScreenCapture(3) );
@ -536,8 +539,8 @@ void fgDumpSnapShot () {
} }
fgInitVisuals(); fgInitVisuals();
fgReshape( globals->get_options()->get_xsize(), fgReshape( fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
// we need two render frames here to clear the menu and cursor // we need two render frames here to clear the menu and cursor
// ... not sure why but doing an extra fgFenderFrame() shoulnd't // ... not sure why but doing an extra fgFenderFrame() shoulnd't
@ -546,8 +549,8 @@ void fgDumpSnapShot () {
fgRenderFrame(); fgRenderFrame();
my_glDumpWindow( "fgfs-screen.ppm", my_glDumpWindow( "fgfs-screen.ppm",
globals->get_options()->get_xsize(), fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
mkDialog ("Snap shot saved to fgfs-screen.ppm"); mkDialog ("Snap shot saved to fgfs-screen.ppm");
@ -725,7 +728,7 @@ void guiInit()
if ( envp != NULL ) { if ( envp != NULL ) {
fntpath.set( envp ); fntpath.set( envp );
} else { } else {
fntpath.set( globals->get_options()->get_fg_root() ); fntpath.set( globals->get_fg_root() );
fntpath.append( "Fonts" ); fntpath.append( "Fonts" );
} }
@ -737,7 +740,7 @@ void guiInit()
puSetDefaultFonts( GuiFont, GuiFont ) ; puSetDefaultFonts( GuiFont, GuiFont ) ;
guiFnt = puGetDefaultLabelFont(); guiFnt = puGetDefaultLabelFont();
if ( globals->get_options()->get_mouse_pointer() == 0 ) { if (!fgHasValue("/sim/startup/mouse-pointer")) {
// no preference specified for mouse pointer, attempt to autodetect... // no preference specified for mouse pointer, attempt to autodetect...
// Determine if we need to render the cursor, or if the windowing // Determine if we need to render the cursor, or if the windowing
// system will do it. First test if we are rendering with glide. // system will do it. First test if we are rendering with glide.
@ -752,9 +755,9 @@ void guiInit()
} }
} }
// mouse_active = ~mouse_active; // mouse_active = ~mouse_active;
} else if ( globals->get_options()->get_mouse_pointer() == 1 ) { } else if ( !fgGetBool("/sim/startup/mouse-pointer") ) {
// don't show pointer // don't show pointer
} else if ( globals->get_options()->get_mouse_pointer() == 2 ) { } else {
// force showing pointer // force showing pointer
puShowCursor(); puShowCursor();
// mouse_active = ~mouse_active; // mouse_active = ~mouse_active;
@ -782,7 +785,7 @@ void guiInit()
mainMenuBar -> add_submenu ("Autopilot", autopilotSubmenu, autopilotSubmenuCb); mainMenuBar -> add_submenu ("Autopilot", autopilotSubmenu, autopilotSubmenuCb);
// mainMenuBar -> add_submenu ("Options", optionsSubmenu, optionsSubmenuCb); // mainMenuBar -> add_submenu ("Options", optionsSubmenu, optionsSubmenuCb);
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
if ( globals->get_options()->get_network_olk() ) { if ( fgGetBool("/sim/networking/network-olk") ) {
mainMenuBar -> add_submenu ("Network", networkSubmenu, networkSubmenuCb); mainMenuBar -> add_submenu ("Network", networkSubmenu, networkSubmenuCb);
} }
#endif #endif

View file

@ -64,8 +64,8 @@
#include <Cockpit/panel.hxx> #include <Cockpit/panel.hxx>
#include <Controls/controls.hxx> #include <Controls/controls.hxx>
#include <FDM/flight.hxx> #include <FDM/flight.hxx>
#include <Main/options.hxx>
#include <Main/fg_init.hxx> #include <Main/fg_init.hxx>
#include <Main/fg_props.hxx>
//#include <Main/views.hxx> //#include <Main/views.hxx>
//#include <Network/network.h> //#include <Network/network.h>
//#include <Time/fg_time.hxx> //#include <Time/fg_time.hxx>
@ -194,8 +194,8 @@ void TurnCursorOn( void )
} }
#endif #endif
#if defined(X_CURSOR_TWEAKS) #if defined(X_CURSOR_TWEAKS)
glutWarpPointer( globals->get_options()->get_xsize()/2, glutWarpPointer( fgGetInt("/sim/startup/xsize")/2,
globals->get_options()->get_ysize()/2); fgGetInt("/sim/startup/ysize")/2);
#endif #endif
} }
@ -205,8 +205,8 @@ void TurnCursorOff( void )
#if defined(WIN32_CURSOR_TWEAKS) #if defined(WIN32_CURSOR_TWEAKS)
glutSetCursor(GLUT_CURSOR_NONE); glutSetCursor(GLUT_CURSOR_NONE);
#elif defined(X_CURSOR_TWEAKS) #elif defined(X_CURSOR_TWEAKS)
glutWarpPointer( globals->get_options()->get_xsize(), glutWarpPointer( fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize()); fgGetInt("/sim/startup/ysize"));
#endif #endif
} }
@ -255,8 +255,8 @@ void BusyCursor( int restore )
void CenterView( void ) { void CenterView( void ) {
if( mouse_mode = MOUSE_VIEW ) { if( mouse_mode = MOUSE_VIEW ) {
mouse_mode = MOUSE_POINTER; mouse_mode = MOUSE_POINTER;
_savedX = globals->get_options()->get_xsize()/2; _savedX = fgGetInt("/sim/startup/xsize")/2;
_savedY = globals->get_options()->get_ysize()/2; _savedY = fgGetInt("/sim/startup/ysize")/2;
_mVtoggle = 0; _mVtoggle = 0;
Quat0(); Quat0();
build_rotmatrix(GuiQuat_mat, curGuiQuat); build_rotmatrix(GuiQuat_mat, curGuiQuat);
@ -288,14 +288,14 @@ void guiMotionFunc ( int x, int y )
// reset left click MOUSE_VIEW toggle feature // reset left click MOUSE_VIEW toggle feature
_mVtoggle = 0; _mVtoggle = 0;
ww = globals->get_options()->get_xsize(); ww = fgGetInt("/sim/startup/xsize");
wh = globals->get_options()->get_ysize(); wh = fgGetInt("/sim/startup/ysize");
switch (mouse_mode) { switch (mouse_mode) {
case MOUSE_YOKE: case MOUSE_YOKE:
if( !mouse_joystick_control ) { if( !mouse_joystick_control ) {
mouse_joystick_control = 1; mouse_joystick_control = 1;
globals->get_options()->set_control_mode( FGOptions::FG_MOUSE ); fgSetString("/sim/control-mode", "mouse");
} else { } else {
if ( left_button() ) { if ( left_button() ) {
offset = (_mX - x) * brake_sensitivity; offset = (_mX - x) * brake_sensitivity;
@ -464,8 +464,8 @@ void guiMouseFunc(int button, int updown, int x, int y)
_quat[1] = curGuiQuat[1]; _quat[1] = curGuiQuat[1];
_quat[2] = curGuiQuat[2]; _quat[2] = curGuiQuat[2];
_quat[3] = curGuiQuat[3]; _quat[3] = curGuiQuat[3];
x = globals->get_options()->get_xsize()/2; x = fgGetInt("/sim/startup/xsize")/2;
y = globals->get_options()->get_ysize()/2; y = fgGetInt("/sim/startup/ysize")/2;
Quat0(); Quat0();
_view_offset = _view_offset =
globals->get_current_view()->get_goal_view_offset(); globals->get_current_view()->get_goal_view_offset();
@ -487,8 +487,8 @@ void guiMouseFunc(int button, int updown, int x, int y)
_savedX = x; _savedX = x;
_savedY = y; _savedY = y;
// start with zero point in center of screen // start with zero point in center of screen
_mX = globals->get_options()->get_xsize()/2; _mX = fgGetInt("/sim/startup/xsize")/2;
_mY = globals->get_options()->get_ysize()/2; _mY = fgGetInt("/sim/startup/ysize")/2;
// try to have the MOUSE_YOKE position // try to have the MOUSE_YOKE position
// reflect the current stick position // reflect the current stick position
@ -503,9 +503,9 @@ void guiMouseFunc(int button, int updown, int x, int y)
case MOUSE_YOKE: case MOUSE_YOKE:
mouse_mode = MOUSE_VIEW; mouse_mode = MOUSE_VIEW;
globals->get_options()->set_control_mode( FGOptions::FG_JOYSTICK ); fgSetString("/sim/control/mode", "joystick");
x = globals->get_options()->get_xsize()/2; x = fgGetInt("/sim/startup/xsize")/2;
y = globals->get_options()->get_ysize()/2; y = fgGetInt("/sim/startup/ysize")/2;
_mVtoggle = 0; _mVtoggle = 0;
Quat0(); Quat0();
build_rotmatrix(GuiQuat_mat, curGuiQuat); build_rotmatrix(GuiQuat_mat, curGuiQuat);

View file

@ -39,7 +39,7 @@
#include <simgear/xgl/xgl.h> #include <simgear/xgl/xgl.h>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/options.hxx> #include <Main/fg_props.hxx>
#include <NetworkOLK/network.h> #include <NetworkOLK/network.h>
#include "gui.h" #include "gui.h"
@ -80,9 +80,9 @@ void NetIdDialog_OK (puObject *)
NetId = net_callsign; NetId = net_callsign;
NetIdDialog_Cancel( NULL ); NetIdDialog_Cancel( NULL );
globals->get_options()->set_net_id( NetId.c_str() ); fgSetString("/networking/call-sign", NetId.c_str() );
strcpy( fgd_callsign, net_callsign); strcpy( fgd_callsign, net_callsign);
// strcpy( fgd_callsign, globals->get_options()->get_net_id().c_str()); // strcpy( fgd_callsign, fgGetString("/sim/networking/call-sign").c_str());
/* Entering a callsign indicates : user wants Net HUD Info */ /* Entering a callsign indicates : user wants Net HUD Info */
net_hud_display = 1; net_hud_display = 1;
@ -92,7 +92,7 @@ void NetIdDialog_OK (puObject *)
void NewCallSign(puObject *cb) void NewCallSign(puObject *cb)
{ {
sprintf( NewNetId, "%s", globals->get_options()->get_net_id().c_str() ); sprintf( NewNetId, "%s", fgGetString("/sim/networking/call-sign").c_str() );
// sprintf( NewNetId, "%s", fgd_callsign ); // sprintf( NewNetId, "%s", fgd_callsign );
NetIdDialogInput->setValue( NewNetId ); NetIdDialogInput->setValue( NewNetId );
@ -101,7 +101,7 @@ void NewCallSign(puObject *cb)
void NewNetIdInit(void) void NewNetIdInit(void)
{ {
sprintf( NewNetId, "%s", globals->get_options()->get_net_id().c_str() ); sprintf( NewNetId, "%s", fgGetString("/sim/networking/call-sign").c_str() );
// sprintf( NewNetId, "%s", fgd_callsign ); // sprintf( NewNetId, "%s", fgd_callsign );
int len = 150 - puGetStringWidth( puGetDefaultLabelFont(), int len = 150 - puGetStringWidth( puGetDefaultLabelFont(),
NewNetIdLabel ) / 2; NewNetIdLabel ) / 2;
@ -234,7 +234,7 @@ void net_fgd_scan(puObject *cb)
void NewNetFGDInit(void) void NewNetFGDInit(void)
{ {
// sprintf( NewNetId, "%s", globals->get_options()->get_net_id().c_str() ); // sprintf( NewNetId, "%s", fgGetString("/sim/networking/call-sign").c_str() );
// sprintf( NewNetId, "%s", fgd_callsign ); // sprintf( NewNetId, "%s", fgd_callsign );
int len = 170 - puGetStringWidth( puGetDefaultLabelFont(), int len = 170 - puGetStringWidth( puGetDefaultLabelFont(),
NewNetFGDLabel ) / 2; NewNetFGDLabel ) / 2;

View file

@ -35,11 +35,11 @@
#include <string> #include <string>
#include <Main/globals.hxx> #include <Main/fg_props.hxx>
#include <simgear/misc/props.hxx>
#include <simgear/debug/logstream.hxx> #include <simgear/debug/logstream.hxx>
#include <plib/js.h> #include <plib/js.h>
#include "joystick.hxx" #include "joystick.hxx"
FG_USING_STD(string); FG_USING_STD(string);
@ -200,19 +200,19 @@ fgJoystickInit()
// Control property // Control property
string name = base; string name = base;
name += "/control"; name += "/control";
SGValue * value = globals->get_props()->getValue(name); SGValue * value = fgGetValue(name);
if (value == 0) { if (value == 0) {
FG_LOG(FG_INPUT, FG_INFO, " no control defined"); FG_LOG(FG_INPUT, FG_INFO, " no control defined");
continue; continue;
} }
const string &control = value->getStringValue(); const string &control = value->getStringValue();
a.value = globals->get_props()->getValue(control, true); a.value = fgGetValue(control, true);
FG_LOG(FG_INPUT, FG_INFO, " using control " << control); FG_LOG(FG_INPUT, FG_INFO, " using control " << control);
// Dead band // Dead band
name = base; name = base;
name += "/dead-band"; name += "/dead-band";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
js->setDeadBand(j, value->getDoubleValue()); js->setDeadBand(j, value->getDoubleValue());
FG_LOG(FG_INPUT, FG_INFO, " dead-band is " << js->getDeadBand(j)); FG_LOG(FG_INPUT, FG_INFO, " dead-band is " << js->getDeadBand(j));
@ -220,7 +220,7 @@ fgJoystickInit()
// Offset // Offset
name = base; name = base;
name += "/offset"; name += "/offset";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
a.offset = value->getDoubleValue(); a.offset = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " offset is " << a.offset); FG_LOG(FG_INPUT, FG_INFO, " offset is " << a.offset);
@ -229,7 +229,7 @@ fgJoystickInit()
// Factor // Factor
name = base; name = base;
name += "/factor"; name += "/factor";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
a.factor = value->getDoubleValue(); a.factor = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " factor is " << a.factor); FG_LOG(FG_INPUT, FG_INFO, " factor is " << a.factor);
@ -238,7 +238,7 @@ fgJoystickInit()
// Tolerance // Tolerance
name = base; name = base;
name += "/tolerance"; name += "/tolerance";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
a.tolerance = value->getDoubleValue(); a.tolerance = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " tolerance is " << a.tolerance); FG_LOG(FG_INPUT, FG_INFO, " tolerance is " << a.tolerance);
@ -247,7 +247,7 @@ fgJoystickInit()
// Saturation // Saturation
name = base; name = base;
name += "/saturation"; name += "/saturation";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
js->setSaturation(j, value->getDoubleValue()); js->setSaturation(j, value->getDoubleValue());
FG_LOG(FG_INPUT, FG_INFO, " saturation is " << js->getSaturation(j)); FG_LOG(FG_INPUT, FG_INFO, " saturation is " << js->getSaturation(j));
@ -255,7 +255,7 @@ fgJoystickInit()
// Minimum range // Minimum range
name = base; name = base;
name += "/min-range"; name += "/min-range";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
minRange[j] = value->getDoubleValue(); minRange[j] = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " min-range is " << minRange[j]); FG_LOG(FG_INPUT, FG_INFO, " min-range is " << minRange[j]);
@ -263,7 +263,7 @@ fgJoystickInit()
// Maximum range // Maximum range
name = base; name = base;
name += "/max-range"; name += "/max-range";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
maxRange[j] = value->getDoubleValue(); maxRange[j] = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " max-range is " << maxRange[j]); FG_LOG(FG_INPUT, FG_INFO, " max-range is " << maxRange[j]);
@ -271,7 +271,7 @@ fgJoystickInit()
// Center // Center
name = base; name = base;
name += "/center"; name += "/center";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
center[j] = value->getDoubleValue(); center[j] = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " center is " << center[j]); FG_LOG(FG_INPUT, FG_INFO, " center is " << center[j]);
@ -294,19 +294,19 @@ fgJoystickInit()
string name = base; string name = base;
name += "/control"; name += "/control";
cout << "Trying name " << name << endl; cout << "Trying name " << name << endl;
SGValue * value = globals->get_props()->getValue(name); SGValue * value = fgGetValue(name);
if (value == 0) { if (value == 0) {
FG_LOG(FG_INPUT, FG_INFO, " no control defined"); FG_LOG(FG_INPUT, FG_INFO, " no control defined");
continue; continue;
} }
const string &control = value->getStringValue(); const string &control = value->getStringValue();
b.value = globals->get_props()->getValue(control, true); b.value = fgGetValue(control, true);
FG_LOG(FG_INPUT, FG_INFO, " using control " << control); FG_LOG(FG_INPUT, FG_INFO, " using control " << control);
// Step // Step
name = base; name = base;
name += "/step"; name += "/step";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
b.step = value->getDoubleValue(); b.step = value->getDoubleValue();
FG_LOG(FG_INPUT, FG_INFO, " step is " << b.step); FG_LOG(FG_INPUT, FG_INFO, " step is " << b.step);
@ -314,7 +314,7 @@ fgJoystickInit()
// Type // Type
name = base; name = base;
name += "/action"; name += "/action";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
string action = "adjust"; string action = "adjust";
if (value != 0) if (value != 0)
action = value->getStringValue(); action = value->getStringValue();
@ -338,7 +338,7 @@ fgJoystickInit()
// Repeatability. // Repeatability.
name = base; name = base;
name += "/repeatable"; name += "/repeatable";
value = globals->get_props()->getValue(name); value = fgGetValue(name);
if (value != 0) if (value != 0)
b.isRepeatable = value->getBoolValue(); b.isRepeatable = value->getBoolValue();
FG_LOG(FG_INPUT, FG_INFO, (b.isRepeatable ? FG_LOG(FG_INPUT, FG_INFO, (b.isRepeatable ?

View file

@ -90,13 +90,10 @@ reinit ()
double apHeadingMag = FGBFI::getAPHeadingMag(); double apHeadingMag = FGBFI::getAPHeadingMag();
bool apAltitudeLock = FGBFI::getAPAltitudeLock(); bool apAltitudeLock = FGBFI::getAPAltitudeLock();
double apAltitude = FGBFI::getAPAltitude(); double apAltitude = FGBFI::getAPAltitude();
const string &targetAirport = FGBFI::getTargetAirport();
bool gpsLock = FGBFI::getGPSLock(); bool gpsLock = FGBFI::getGPSLock();
// double gpsLatitude = FGBFI::getGPSTargetLatitude(); // double gpsLatitude = FGBFI::getGPSTargetLatitude();
// double gpsLongitude = FGBFI::getGPSTargetLongitude(); // double gpsLongitude = FGBFI::getGPSTargetLongitude();
FGBFI::setTargetAirport("");
fgReInitSubsystems(); fgReInitSubsystems();
// FIXME: this is wrong. // FIXME: this is wrong.
@ -115,7 +112,6 @@ reinit ()
FGBFI::setAPHeadingMag(apHeadingMag); FGBFI::setAPHeadingMag(apHeadingMag);
FGBFI::setAPAltitudeLock(apAltitudeLock); FGBFI::setAPAltitudeLock(apAltitudeLock);
FGBFI::setAPAltitude(apAltitude); FGBFI::setAPAltitude(apAltitude);
FGBFI::setTargetAirport(targetAirport);
FGBFI::setGPSLock(gpsLock); FGBFI::setGPSLock(gpsLock);
_needReinit = false; _needReinit = false;
@ -211,15 +207,11 @@ FGBFI::init ()
{ {
FG_LOG(FG_GENERAL, FG_INFO, "Starting BFI init"); FG_LOG(FG_GENERAL, FG_INFO, "Starting BFI init");
// Simulation // Simulation
// fgTie("/sim/flight-model", getFlightModel, setFlightModel);
// fgTie("/sim/aircraft", getAircraft, setAircraft);
fgTie("/sim/aircraft-dir", getAircraftDir, setAircraftDir); fgTie("/sim/aircraft-dir", getAircraftDir, setAircraftDir);
fgTie("/sim/time/gmt", getDateString, setDateString); fgTie("/sim/time/gmt", getDateString, setDateString);
fgTie("/sim/time/gmt-string", getGMTString); fgTie("/sim/time/gmt-string", getGMTString);
// fgTie("/sim/hud/visibility", getHUDVisible, setHUDVisible);
// Position // Position
// fgTie("/position/airport-id", getTargetAirport, setTargetAirport);
fgTie("/position/latitude", getLatitude, setLatitude); fgTie("/position/latitude", getLatitude, setLatitude);
fgTie("/position/longitude", getLongitude, setLongitude); fgTie("/position/longitude", getLongitude, setLongitude);
fgTie("/position/altitude", getAltitude, setAltitude); fgTie("/position/altitude", getAltitude, setAltitude);
@ -298,65 +290,13 @@ FGBFI::update ()
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
/**
* Return the flight model as an integer.
*
* TODO: use a string instead.
*/
int
FGBFI::getFlightModel ()
{
return globals->get_options()->get_flight_model();
}
/**
* Return the current aircraft as a string.
*/
string
FGBFI::getAircraft ()
{
_temp = globals->get_options()->get_aircraft();
return _temp;
}
/** /**
* Return the current aircraft directory (UIUC) as a string. * Return the current aircraft directory (UIUC) as a string.
*/ */
string string
FGBFI::getAircraftDir () FGBFI::getAircraftDir ()
{ {
_temp = aircraft_dir; return aircraft_dir;
return _temp;
}
/**
* Set the flight model as an integer.
*
* TODO: use a string instead.
*/
void
FGBFI::setFlightModel (int model)
{
if (getFlightModel() != model) {
globals->get_options()->set_flight_model(model);
needReinit();
}
}
/**
* Set the current aircraft.
*/
void
FGBFI::setAircraft (string aircraft)
{
if (getAircraft() != aircraft) {
globals->get_options()->set_aircraft(aircraft);
needReinit();
}
} }
@ -453,26 +393,6 @@ FGBFI::getGMTString ()
} }
/**
* Return true if the HUD is visible.
*/
bool
FGBFI::getHUDVisible ()
{
return globals->get_options()->get_hud_status();
}
/**
* Ensure that the HUD is visible or hidden.
*/
void
FGBFI::setHUDVisible (bool visible)
{
globals->get_options()->set_hud_status(visible);
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// Position // Position
@ -1282,30 +1202,6 @@ FGBFI::setGPSLock (bool lock)
} }
/**
* Get the GPS target airport code.
*/
string
FGBFI::getTargetAirport ()
{
// FIXME: not thread-safe
static string out;
out = globals->get_options()->get_airport_id();
return out;
}
/**
* Set the GPS target airport code.
*/
void
FGBFI::setTargetAirport (string airportId)
{
globals->get_options()->set_airport_id(airportId);
}
/** /**
* Get the GPS target latitude in degrees (negative for south). * Get the GPS target latitude in degrees (negative for south).
*/ */

View file

@ -72,9 +72,6 @@ public:
// deprecated // deprecated
static string getGMTString (); static string getGMTString ();
static bool getHUDVisible ();
static void setHUDVisible (bool hudVisible);
// Position // Position
static double getLatitude (); // degrees static double getLatitude (); // degrees
static void setLatitude (double latitude); // degrees static void setLatitude (double latitude); // degrees

View file

@ -92,6 +92,7 @@
#include "fg_init.hxx" #include "fg_init.hxx"
#include "fg_io.hxx" #include "fg_io.hxx"
#include "options.hxx"
#include "globals.hxx" #include "globals.hxx"
#include "bfi.hxx" #include "bfi.hxx"
@ -106,23 +107,45 @@ extern const char *default_root;
// Read in configuration (file and command line) and just set fg_root // Read in configuration (file and command line) and just set fg_root
bool fgInitFGRoot ( int argc, char **argv ) { bool fgInitFGRoot ( int argc, char **argv ) {
// Attempt to locate and parse a config file string root;
// First check fg_root char* envp;
FGPath config( globals->get_options()->get_fg_root() );
config.append( "system.fgfsrc" );
globals->get_options()->scan_config_file_for_root( config.str() );
// Next check home directory // First parse command line options looking for fg-root, this will
char* envp = ::getenv( "HOME" ); // override anything specified in a config file
if ( envp != NULL ) { root = fgScanForRoot(argc, argv);
config.set( envp );
config.append( ".fgfsrc" ); // Next check home directory for .fgfsrc file
globals->get_options()->scan_config_file_for_root( config.str() ); if ( root == "" ) {
envp = ::getenv( "HOME" );
if ( envp != NULL ) {
FGPath config( envp );
config.append( ".fgfsrc" );
root = fgScanForRoot(config.str());
}
}
// Next check if fg-root is set as an env variable
if ( root == "" ) {
envp = ::getenv( "FG_ROOT" );
if ( envp != NULL ) {
root = envp;
}
} }
// Parse remaining command line options // Otherwise, default to a random compiled-in location if we can't
// These will override anything specified in a config file // find fg-root any other way.
globals->get_options()->scan_command_line_for_root(argc, argv); if ( root == "" ) {
#if defined( WIN32 )
root = "\\FlightGear";
#elif defined( macintosh )
root = "";
#else
root = PKGLIBDIR;
#endif
}
FG_LOG(FG_INPUT, FG_INFO, "fg_root = " << root );
globals->set_fg_root(root);
return true; return true;
} }
@ -132,10 +155,10 @@ bool fgInitFGRoot ( int argc, char **argv ) {
bool fgInitConfig ( int argc, char **argv ) { bool fgInitConfig ( int argc, char **argv ) {
// First, set some sane default values // First, set some sane default values
globals->get_options()->set_default_props(); fgSetDefaults();
// Read global preferences from $FG_ROOT/preferences.xml // Read global preferences from $FG_ROOT/preferences.xml
FGPath props_path(globals->get_options()->get_fg_root()); FGPath props_path(globals->get_fg_root());
props_path.append("preferences.xml"); props_path.append("preferences.xml");
FG_LOG(FG_INPUT, FG_INFO, "Reading global preferences"); FG_LOG(FG_INPUT, FG_INFO, "Reading global preferences");
if (!readProperties(props_path.str(), globals->get_props())) { if (!readProperties(props_path.str(), globals->get_props())) {
@ -147,29 +170,21 @@ bool fgInitConfig ( int argc, char **argv ) {
// Attempt to locate and parse a config file // Attempt to locate and parse a config file
// First check fg_root // First check fg_root
FGPath config( globals->get_options()->get_fg_root() ); FGPath config( globals->get_fg_root() );
config.append( "system.fgfsrc" ); config.append( "system.fgfsrc" );
globals->get_options()->parse_config_file( config.str() ); fgParseOptions(config.str());
// Next check home directory // Next check home directory
char* envp = ::getenv( "HOME" ); char* envp = ::getenv( "HOME" );
if ( envp != NULL ) { if ( envp != NULL ) {
config.set( envp ); config.set( envp );
config.append( ".fgfsrc" ); config.append( ".fgfsrc" );
globals->get_options()->parse_config_file( config.str() ); fgParseOptions(config.str());
} }
// Parse remaining command line options // Parse remaining command line options
// These will override anything specified in a config file // These will override anything specified in a config file
if ( globals->get_options()->parse_command_line(argc, argv) != fgParseOptions(argc, argv);
FGOptions::FG_OPTIONS_OK )
{
// Something must have gone horribly wrong with the command
// line parsing or maybe the user just requested help ... :-)
globals->get_options()->usage();
FG_LOG( FG_GENERAL, FG_ALERT, "\nExiting ...");
return false;
}
return true; return true;
} }
@ -178,7 +193,7 @@ bool fgInitConfig ( int argc, char **argv ) {
// find basic airport location info from airport database // find basic airport location info from airport database
bool fgFindAirportID( const string& id, FGAirport *a ) { bool fgFindAirportID( const string& id, FGAirport *a ) {
if ( id.length() ) { if ( id.length() ) {
FGPath path( globals->get_options()->get_fg_root() ); FGPath path( globals->get_fg_root() );
path.append( "Airports" ); path.append( "Airports" );
path.append( "simple.mk4" ); path.append( "simple.mk4" );
FGAirports airports( path.c_str() ); FGAirports airports( path.c_str() );
@ -212,13 +227,8 @@ bool fgSetPosFromAirportID( const string& id ) {
"Attempting to set starting position from airport code " << id ); "Attempting to set starting position from airport code " << id );
if ( fgFindAirportID( id, &a ) ) { if ( fgFindAirportID( id, &a ) ) {
globals->get_options()->set_lon( a.longitude ); fgSetDouble("/position/longitude", a.longitude );
globals->get_options()->set_lat( a.latitude ); fgSetDouble("/position/latitude", a.latitude );
globals->get_props()->setDoubleValue("/position/longitude",
a.longitude);
globals->get_props()->setDoubleValue("/position/latitude",
a.latitude);
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"Position for " << id << " is (" "Position for " << id << " is ("
<< a.longitude << ", " << a.longitude << ", "
@ -241,7 +251,7 @@ bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
if ( id.length() ) { if ( id.length() ) {
// set initial position from runway and heading // set initial position from runway and heading
FGPath path( globals->get_options()->get_fg_root() ); FGPath path( globals->get_fg_root() );
path.append( "Airports" ); path.append( "Airports" );
path.append( "runways.mk4" ); path.append( "runways.mk4" );
FGRunways runways( path.c_str() ); FGRunways runways( path.c_str() );
@ -250,12 +260,12 @@ bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
"Attempting to set starting position from runway code " "Attempting to set starting position from runway code "
<< id << " heading " << tgt_hdg ); << id << " heading " << tgt_hdg );
// FGPath inpath( globals->get_options()->get_fg_root() ); // FGPath inpath( globals->get_fg_root() );
// inpath.append( "Airports" ); // inpath.append( "Airports" );
// inpath.append( "apt_simple" ); // inpath.append( "apt_simple" );
// airports.load( inpath.c_str() ); // airports.load( inpath.c_str() );
// FGPath outpath( globals->get_options()->get_fg_root() ); // FGPath outpath( globals->get_fg_root() );
// outpath.append( "Airports" ); // outpath.append( "Airports" );
// outpath.append( "simple.gdbm" ); // outpath.append( "simple.gdbm" );
// airports.dump_gdbm( outpath.c_str() ); // airports.dump_gdbm( outpath.c_str() );
@ -323,12 +333,9 @@ bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
geo_direct_wgs_84 ( 0, found_r.lat, found_r.lon, geo_direct_wgs_84 ( 0, found_r.lat, found_r.lon,
azimuth, found_r.length * FEET_TO_METER * 0.5 - 5.0, azimuth, found_r.length * FEET_TO_METER * 0.5 - 5.0,
&lat2, &lon2, &az2 ); &lat2, &lon2, &az2 );
globals->get_options()->set_lon( lon2 ); fgSetDouble("/position/longitude", lon2 );
globals->get_options()->set_lat( lat2 ); fgSetDouble("/position/latitude", lat2 );
globals->get_options()->set_heading( heading ); fgSetDouble("/orientation/heading", heading );
globals->get_props()->setDoubleValue("/position/longitude", lon2);
globals->get_props()->setDoubleValue("/position/latitude", lat2);
globals->get_props()->setDoubleValue("/orientation/heading", heading);
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"Position for " << id << " is (" "Position for " << id << " is ("
@ -343,32 +350,20 @@ bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
// Set initial position and orientation // Set initial position and orientation
bool fgInitPosition( void ) { bool fgInitPosition( void ) {
FGInterface *f = current_aircraft.fdm_state; FGInterface *f = current_aircraft.fdm_state;
string id = globals->get_options()->get_airport_id(); string id = fgGetString("/sim/startup/airport-id");
// set initial position from default or command line coordinates // set initial position from default or command line coordinates
f->set_Longitude( globals->get_options()->get_lon() * DEG_TO_RAD ); f->set_Longitude( fgGetDouble("/position/longitude") * DEG_TO_RAD );
f->set_Latitude( globals->get_options()->get_lat() * DEG_TO_RAD ); f->set_Latitude( fgGetDouble("/position/latitude") * DEG_TO_RAD );
if ( scenery.cur_elev > globals->get_options()->get_altitude() - 1) { if ( scenery.cur_elev > fgGetDouble("/position/altitude") - 1) {
globals->get_options()->set_altitude( scenery.cur_elev + 1 ); fgSetDouble("/position/altitude", scenery.cur_elev + 1 );
} }
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"starting altitude is = " << globals->get_options()->get_altitude() ); "starting altitude is = " << fgGetDouble("/position/altitude") );
f->set_Altitude( globals->get_options()->get_altitude() * METER_TO_FEET );
// fgFDMSetGroundElevation( globals->get_options()->get_flight_model(),
// f->get_Altitude() * FEET_TO_METER );
#if 0
globals->get_props()->setDoubleValue("/position/longitude",
f->get_Longitude() * RAD_TO_DEG);
globals->get_props()->setDoubleValue("/position/latitude",
f->get_Latitude() * RAD_TO_DEG);
globals->get_props()->setDoubleValue("/position/altitude",
f->get_Altitude() * RAD_TO_DEG);
#endif
f->set_Altitude( fgGetDouble("/position/altitude") * METER_TO_FEET );
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"Initial position is: (" "Initial position is: ("
<< (f->get_Longitude() * RAD_TO_DEG) << ", " << (f->get_Longitude() * RAD_TO_DEG) << ", "
@ -390,7 +385,7 @@ bool fgInitGeneral( void ) {
FG_LOG( FG_GENERAL, FG_INFO, "General Initialization" ); FG_LOG( FG_GENERAL, FG_INFO, "General Initialization" );
FG_LOG( FG_GENERAL, FG_INFO, "======= ==============" ); FG_LOG( FG_GENERAL, FG_INFO, "======= ==============" );
root = globals->get_options()->get_fg_root(); root = globals->get_fg_root();
if ( ! root.length() ) { if ( ! root.length() ) {
// No root path set? Then bail ... // No root path set? Then bail ...
FG_LOG( FG_GENERAL, FG_ALERT, FG_LOG( FG_GENERAL, FG_ALERT,
@ -420,32 +415,36 @@ bool fgInitGeneral( void ) {
// set initial aircraft speed // set initial aircraft speed
bool fgVelocityInit( void ) { void
switch(globals->get_options()->get_speedset()) { fgVelocityInit( void )
case FGOptions::FG_VC: {
current_aircraft.fdm_state->set_V_calibrated_kts( if (!fgHasValue("/sim/startup/speed-set")) {
globals->get_options()->get_vc() ); current_aircraft.fdm_state->set_V_calibrated_kts(0.0);
break; return;
case FGOptions::FG_MACH: }
current_aircraft.fdm_state->set_Mach_number(
globals->get_options()->get_mach() ); const string speedset = fgGetString("/sim/startup/speed-set");
break; if (speedset == "knots" || speedset == "KNOTS") {
case FGOptions::FG_VTUVW: current_aircraft.fdm_state
current_aircraft.fdm_state->set_Velocities_Wind_Body( ->set_V_calibrated_kts(fgGetDouble("/velocities/airspeed"));
globals->get_options()->get_uBody(), } else if (speedset == "mach" || speedset == "MACH") {
globals->get_options()->get_vBody(), current_aircraft.fdm_state
globals->get_options()->get_wBody() ); ->set_Mach_number(fgGetDouble("/velocities/mach"));
break; } else if (speedset == "UVW" || speedset == "uvw") {
case FGOptions::FG_VTNED: current_aircraft.fdm_state
current_aircraft.fdm_state->set_Velocities_Local( ->set_Velocities_Wind_Body(fgGetDouble("/velocities/uBody"),
globals->get_options()->get_vNorth(), fgGetDouble("/velocities/vBody"),
globals->get_options()->get_vEast(), fgGetDouble("/velocities/wBody"));
globals->get_options()->get_vDown() ); } else if (speedset == "NED" || speedset == "ned") {
break; current_aircraft.fdm_state
default: ->set_Velocities_Local(fgGetDouble("/velocities/speed-north"),
current_aircraft.fdm_state->set_V_calibrated_kts( 0.0 ); fgGetDouble("/velocities/speed-east"),
} fgGetDouble("/velocities/speed-down"));
return true; } else {
FG_LOG(FG_GENERAL, FG_ALERT,
"Unrecognized value for /sim/startup/speed-set: " << speedset);
current_aircraft.fdm_state->set_V_calibrated_kts(0.0);
}
} }
@ -460,7 +459,7 @@ bool fgInitSubsystems( void ) {
FG_LOG( FG_GENERAL, FG_INFO, "========== =========="); FG_LOG( FG_GENERAL, FG_INFO, "========== ==========");
// Initialize the material property lib // Initialize the material property lib
FGPath mpath( globals->get_options()->get_fg_root() ); FGPath mpath( globals->get_fg_root() );
mpath.append( "materials" ); mpath.append( "materials" );
if ( material_lib.load( mpath.str() ) ) { if ( material_lib.load( mpath.str() ) ) {
} else { } else {
@ -478,8 +477,8 @@ bool fgInitSubsystems( void ) {
if ( global_tile_mgr.init() ) { if ( global_tile_mgr.init() ) {
// Load the local scenery data // Load the local scenery data
global_tile_mgr.update( globals->get_options()->get_lon(), global_tile_mgr.update( fgGetDouble("/position/longitude"),
globals->get_options()->get_lat() ); fgGetDouble("/position/latitude") );
} else { } else {
FG_LOG( FG_GENERAL, FG_ALERT, "Error in Tile Manager initialization!" ); FG_LOG( FG_GENERAL, FG_ALERT, "Error in Tile Manager initialization!" );
exit(-1); exit(-1);
@ -489,24 +488,23 @@ bool fgInitSubsystems( void ) {
"Current terrain elevation after tile mgr init " << "Current terrain elevation after tile mgr init " <<
scenery.cur_elev ); scenery.cur_elev );
if ( globals->get_options()->get_flight_model() == FGInterface::FG_LARCSIM ) { const string &model = fgGetString("/sim/flight-model");
if (model == "larcsim") {
cur_fdm_state = new FGLaRCsim; cur_fdm_state = new FGLaRCsim;
} else if ( globals->get_options()->get_flight_model() == FGInterface::FG_JSBSIM ) { } else if (model == "jsb") {
cur_fdm_state = new FGJSBsim; cur_fdm_state = new FGJSBsim;
} else if ( globals->get_options()->get_flight_model() == FGInterface::FG_ADA ) { } else if (model == "ada") {
cur_fdm_state = new FGADA; cur_fdm_state = new FGADA;
} else if ( globals->get_options()->get_flight_model() == } else if (model == "balloon") {
FGInterface::FG_BALLOONSIM ) {
cur_fdm_state = new FGBalloonSim; cur_fdm_state = new FGBalloonSim;
} else if ( globals->get_options()->get_flight_model() == } else if (model == "magic") {
FGInterface::FG_MAGICCARPET ) {
cur_fdm_state = new FGMagicCarpet; cur_fdm_state = new FGMagicCarpet;
} else if ( globals->get_options()->get_flight_model() == } else if (model == "external") {
FGInterface::FG_EXTERNAL ) {
cur_fdm_state = new FGExternal; cur_fdm_state = new FGExternal;
} else { } else {
FG_LOG( FG_GENERAL, FG_ALERT, FG_LOG(FG_GENERAL, FG_ALERT,
"No flight model, can't init aircraft" ); "Unrecognized flight model '" << model
<< ", can't init aircraft");
exit(-1); exit(-1);
} }
@ -514,7 +512,7 @@ bool fgInitSubsystems( void ) {
// model or control parameters are set // model or control parameters are set
fgAircraftInit(); // In the future this might not be the case. fgAircraftInit(); // In the future this might not be the case.
fgFDMSetGroundElevation( globals->get_options()->get_flight_model(), fgFDMSetGroundElevation( fgGetString("/sim/flight-model"),
scenery.cur_elev ); scenery.cur_elev );
// set the initial position // set the initial position
@ -566,9 +564,9 @@ bool fgInitSubsystems( void ) {
// Initial Orientation // Initial Orientation
cur_fdm_state-> cur_fdm_state->
set_Euler_Angles( globals->get_options()->get_roll() * DEG_TO_RAD, set_Euler_Angles( fgGetDouble("/orientation/roll") * DEG_TO_RAD,
globals->get_options()->get_pitch() * DEG_TO_RAD, fgGetDouble("/orientation/pitch") * DEG_TO_RAD,
globals->get_options()->get_heading() * DEG_TO_RAD ); fgGetDouble("/orientation/heading") * DEG_TO_RAD );
// Initialize the event manager // Initialize the event manager
global_events.Init(); global_events.Init();
@ -582,8 +580,8 @@ bool fgInitSubsystems( void ) {
// Initialize win_ratio parameters // Initialize win_ratio parameters
for ( int i = 0; i < globals->get_viewmgr()->size(); ++i ) { for ( int i = 0; i < globals->get_viewmgr()->size(); ++i ) {
globals->get_viewmgr()->get_view(i)-> globals->get_viewmgr()->get_view(i)->
set_win_ratio( globals->get_options()->get_xsize() / set_win_ratio( fgGetInt("/sim/startup/xsize") /
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
} }
// Initialize pilot view // Initialize pilot view
@ -638,14 +636,14 @@ bool fgInitSubsystems( void ) {
current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER ); current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER );
FGLocalWeatherDatabase::theFGLocalWeatherDatabase = FGLocalWeatherDatabase::theFGLocalWeatherDatabase =
new FGLocalWeatherDatabase( position, new FGLocalWeatherDatabase( position,
globals->get_options()->get_fg_root() ); globals->get_fg_root() );
// cout << theFGLocalWeatherDatabase << endl; // cout << theFGLocalWeatherDatabase << endl;
// cout << "visibility = " // cout << "visibility = "
// << theFGLocalWeatherDatabase->getWeatherVisibility() << endl; // << theFGLocalWeatherDatabase->getWeatherVisibility() << endl;
WeatherDatabase = FGLocalWeatherDatabase::theFGLocalWeatherDatabase; WeatherDatabase = FGLocalWeatherDatabase::theFGLocalWeatherDatabase;
double init_vis = globals->get_options()->get_default_visibility(); double init_vis = fgGetDouble("/environment/visibility");
if ( init_vis > 0 ) { if ( init_vis > 0 ) {
WeatherDatabase->setWeatherVisibility( init_vis ); WeatherDatabase->setWeatherVisibility( init_vis );
} }
@ -662,19 +660,19 @@ bool fgInitSubsystems( void ) {
FG_LOG(FG_GENERAL, FG_INFO, " VOR/NDB"); FG_LOG(FG_GENERAL, FG_INFO, " VOR/NDB");
current_navlist = new FGNavList; current_navlist = new FGNavList;
FGPath p_nav( globals->get_options()->get_fg_root() ); FGPath p_nav( globals->get_fg_root() );
p_nav.append( "Navaids/default.nav" ); p_nav.append( "Navaids/default.nav" );
current_navlist->init( p_nav ); current_navlist->init( p_nav );
FG_LOG(FG_GENERAL, FG_INFO, " ILS"); FG_LOG(FG_GENERAL, FG_INFO, " ILS");
current_ilslist = new FGILSList; current_ilslist = new FGILSList;
FGPath p_ils( globals->get_options()->get_fg_root() ); FGPath p_ils( globals->get_fg_root() );
p_ils.append( "Navaids/default.ils" ); p_ils.append( "Navaids/default.ils" );
current_ilslist->init( p_ils ); current_ilslist->init( p_ils );
FG_LOG(FG_GENERAL, FG_INFO, " Fixes"); FG_LOG(FG_GENERAL, FG_INFO, " Fixes");
current_fixlist = new FGFixList; current_fixlist = new FGFixList;
FGPath p_fix( globals->get_options()->get_fg_root() ); FGPath p_fix( globals->get_fg_root() );
p_fix.append( "Navaids/default.fix" ); p_fix.append( "Navaids/default.fix" );
current_fixlist->init( p_fix ); current_fixlist->init( p_fix );
@ -694,7 +692,7 @@ bool fgInitSubsystems( void ) {
// Initialize the flight model subsystem data structures base on // Initialize the flight model subsystem data structures base on
// above values // above values
if ( cur_fdm_state->init( 1.0 / globals->get_options()->get_model_hz() ) ) { if ( cur_fdm_state->init( 1.0 / fgGetInt("/sim/model-hz") ) ) {
// fdm init successful // fdm init successful
} else { } else {
FG_LOG( FG_GENERAL, FG_ALERT, "FDM init() failed! Cannot continue." ); FG_LOG( FG_GENERAL, FG_ALERT, "FDM init() failed! Cannot continue." );
@ -741,9 +739,8 @@ bool fgInitSubsystems( void ) {
#endif #endif
// Initialize the 2D panel. // Initialize the 2D panel.
string panel_path = string panel_path = fgGetString("/sim/panel/path",
globals->get_props()->getStringValue("/sim/panel/path", "Panels/Default/default.xml");
"Panels/Default/default.xml");
current_panel = fgReadPanel(panel_path); current_panel = fgReadPanel(panel_path);
if (current_panel == 0) { if (current_panel == 0) {
FG_LOG( FG_INPUT, FG_ALERT, FG_LOG( FG_INPUT, FG_ALERT,
@ -774,8 +771,8 @@ void fgReInitSubsystems( void )
if( global_tile_mgr.init() ) { if( global_tile_mgr.init() ) {
// Load the local scenery data // Load the local scenery data
global_tile_mgr.update( globals->get_options()->get_lon(), global_tile_mgr.update( fgGetDouble("/position/longitude"),
globals->get_options()->get_lat() ); fgGetDouble("/position/latitude") );
} else { } else {
FG_LOG( FG_GENERAL, FG_ALERT, "Error in Tile Manager initialization!" ); FG_LOG( FG_GENERAL, FG_ALERT, "Error in Tile Manager initialization!" );
exit(-1); exit(-1);
@ -784,7 +781,7 @@ void fgReInitSubsystems( void )
// cout << "current scenery elev = " << scenery.cur_elev << endl; // cout << "current scenery elev = " << scenery.cur_elev << endl;
fgInitPosition(); fgInitPosition();
fgFDMSetGroundElevation( globals->get_options()->get_flight_model(), fgFDMSetGroundElevation( fgGetString("/sim/flight-model"),
scenery.cur_elev ); scenery.cur_elev );
// Reset our altitude if we are below ground // Reset our altitude if we are below ground
@ -814,9 +811,9 @@ void fgReInitSubsystems( void )
// Initial Orientation // Initial Orientation
cur_fdm_state-> cur_fdm_state->
set_Euler_Angles( globals->get_options()->get_roll() * DEG_TO_RAD, set_Euler_Angles( fgGetDouble("/orientation/roll") * DEG_TO_RAD,
globals->get_options()->get_pitch() * DEG_TO_RAD, fgGetDouble("/orientation/pitch") * DEG_TO_RAD,
globals->get_options()->get_heading() * DEG_TO_RAD ); fgGetDouble("/orientation/heading") * DEG_TO_RAD );
// Initialize view parameters // Initialize view parameters
FGViewerRPH *pilot_view = FGViewerRPH *pilot_view =
@ -841,7 +838,7 @@ void fgReInitSubsystems( void )
FG_LOG( FG_GENERAL, FG_DEBUG, " abs_view_pos = " FG_LOG( FG_GENERAL, FG_DEBUG, " abs_view_pos = "
<< globals->get_current_view()->get_abs_view_pos()); << globals->get_current_view()->get_abs_view_pos());
cur_fdm_state->init( 1.0 / globals->get_options()->get_model_hz() ); cur_fdm_state->init( 1.0 / fgGetInt("/sim/model-hz") );
scenery.cur_elev = cur_fdm_state->get_Runway_altitude() * FEET_TO_METER; scenery.cur_elev = cur_fdm_state->get_Runway_altitude() * FEET_TO_METER;

View file

@ -195,7 +195,7 @@ static FGProtocol *parse_port_config( const string& config )
void fgIOInit() { void fgIOInit() {
FGProtocol *p; FGProtocol *p;
string_list channel_options_list = string_list channel_options_list =
globals->get_options()->get_channel_options_list(); globals->get_channel_options_list();
// we could almost do this in a single step except pushing a valid // we could almost do this in a single step except pushing a valid
// port onto the port list copies the structure and destroys the // port onto the port list copies the structure and destroys the

View file

@ -14,6 +14,78 @@ extern bool fgSaveFlight (ostream &output);
extern bool fgLoadFlight (istream &input); extern bool fgLoadFlight (istream &input);
////////////////////////////////////////////////////////////////////////
// Convenience functions for getting property values.
////////////////////////////////////////////////////////////////////////
/**
* Get an SGValue pointer that can be queried repeatedly.
*
* If the property value is going to be accessed within the loop,
* it is best to use this method for maximum efficiency.
*/
inline SGValue * fgGetValue (const string &name, bool create = false)
{
return globals->get_props()->getValue(name, create);
}
inline bool fgHasValue (const string &name)
{
return globals->get_props()->hasValue(name);
}
inline bool fgGetBool (const string &name, bool defaultValue = false)
{
return globals->get_props()->getBoolValue(name, defaultValue);
}
inline int fgGetInt (const string &name, int defaultValue = 0)
{
return globals->get_props()->getIntValue(name, defaultValue);
}
inline float fgGetFloat (const string &name, float defaultValue = 0.0)
{
return globals->get_props()->getFloatValue(name, defaultValue);
}
inline double fgGetDouble (const string &name, double defaultValue = 0.0)
{
return globals->get_props()->getDoubleValue(name, defaultValue);
}
inline string fgGetString (const string &name, string defaultValue = "")
{
return globals->get_props()->getStringValue(name, defaultValue);
}
inline bool fgSetBool (const string &name, bool val)
{
return globals->get_props()->setBoolValue(name, val);
}
inline bool fgSetInt (const string &name, int val)
{
return globals->get_props()->setIntValue(name, val);
}
inline bool fgSetFloat (const string &name, float val)
{
return globals->get_props()->setFloatValue(name, val);
}
inline bool fgSetDouble (const string &name, double val)
{
return globals->get_props()->setDoubleValue(name, val);
}
inline bool fgSetString (const string &name, const string &val)
{
return globals->get_props()->setStringValue(name, val);
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// Convenience functions for tying properties, with logging. // Convenience functions for tying properties, with logging.

View file

@ -24,6 +24,11 @@
#ifndef _GLOBALS_HXX #ifndef _GLOBALS_HXX
#define _GLOBALS_HXX #define _GLOBALS_HXX
#include <simgear/compiler.h>
#include <vector>
#include STL_STRING
#include <simgear/ephemeris/ephemeris.hxx> #include <simgear/ephemeris/ephemeris.hxx>
#include <simgear/magvar/magvar.hxx> #include <simgear/magvar/magvar.hxx>
@ -31,9 +36,13 @@
#include <simgear/timing/sg_time.hxx> #include <simgear/timing/sg_time.hxx>
#include <simgear/misc/props.hxx> #include <simgear/misc/props.hxx>
#include "options.hxx"
#include "viewmgr.hxx" #include "viewmgr.hxx"
FG_USING_STD( vector );
FG_USING_STD( string );
typedef vector<string> string_list;
class FGGlobals { class FGGlobals {
@ -68,9 +77,6 @@ private:
// Global autopilot "route" // Global autopilot "route"
SGRoute *route; SGRoute *route;
// options
class FGOptions *options;
// viewer maneger // viewer maneger
FGViewMgr *viewmgr; FGViewMgr *viewmgr;
FGViewer *current_view; FGViewer *current_view;
@ -117,9 +123,6 @@ public:
inline SGRoute *get_route() const { return route; } inline SGRoute *get_route() const { return route; }
inline void set_route( SGRoute *r ) { route = r; } inline void set_route( SGRoute *r ) { route = r; }
inline FGOptions *get_options() const { return options; }
inline void set_options( FGOptions *o ) { options = o; }
inline FGViewMgr *get_viewmgr() const { return viewmgr; } inline FGViewMgr *get_viewmgr() const { return viewmgr; }
inline void set_viewmgr( FGViewMgr *vm ) { viewmgr = vm; } inline void set_viewmgr( FGViewMgr *vm ) { viewmgr = vm; }
inline FGViewer *get_current_view() const { return current_view; } inline FGViewer *get_current_view() const { return current_view; }

View file

@ -147,7 +147,7 @@ void GLUTkey(unsigned char k, int x, int y) {
// unflipping yourself :-) // unflipping yourself :-)
{ {
double alt = cur_fdm_state->get_Altitude() + 1000; double alt = cur_fdm_state->get_Altitude() + 1000;
fgFDMForceAltitude( globals->get_options()->get_flight_model(), fgFDMForceAltitude( fgGetString("/sim/flight-model"),
alt * FEET_TO_METER ); alt * FEET_TO_METER );
} }
return; return;
@ -176,16 +176,14 @@ void GLUTkey(unsigned char k, int x, int y) {
v->set_goal_view_offset( FG_PI * 1.75 ); v->set_goal_view_offset( FG_PI * 1.75 );
return; return;
case 65: // A key case 65: // A key
speed = globals->get_options()->get_speed_up(); speed = fgGetInt("/sim/speed-up");
speed--; speed--;
if ( speed < 1 ) { if ( speed < 1 ) {
speed = 1; speed = 1;
} }
globals->get_options()->set_speed_up( speed ); fgSetInt("/sim/speed-up", speed);
return; return;
case 72: // H key case 72: // H key
// status = globals->get_options()->get_hud_status();
// globals->get_options()->set_hud_status(!status);
HUD_brightkey( true ); HUD_brightkey( true );
return; return;
case 73: // I key case 73: // I key
@ -197,7 +195,12 @@ void GLUTkey(unsigned char k, int x, int y) {
fgUpdateSkyAndLightingParams(); fgUpdateSkyAndLightingParams();
return; return;
case 80: // P key case 80: // P key
globals->get_options()->toggle_panel(); if (fgGetBool("/sim/panel/visibility"))
fgSetBool("/sim/panel/visibility", false);
else
fgSetBool("/sim/panel/visibility", true);
fgReshape(fgGetInt("/sim/startup/xsize"),
fgGetInt("/sim/startup/ysize"));
break; break;
case 84: // T key case 84: // T key
globals->inc_warp_delta( -30 ); globals->inc_warp_delta( -30 );
@ -306,9 +309,9 @@ void GLUTkey(unsigned char k, int x, int y) {
"Set flaps to " << controls.get_flaps() ); "Set flaps to " << controls.get_flaps() );
return; return;
case 97: // a key case 97: // a key
speed = globals->get_options()->get_speed_up(); speed = fgGetInt("/sim/speed-up");
speed++; speed++;
globals->get_options()->set_speed_up( speed ); fgSetInt("/sim/speed-up", speed);
return; return;
case 98: // b key case 98: // b key
int b_ret; int b_ret;
@ -347,7 +350,7 @@ void GLUTkey(unsigned char k, int x, int y) {
{ {
SGBucket p( f->get_Longitude() * RAD_TO_DEG, SGBucket p( f->get_Longitude() * RAD_TO_DEG,
f->get_Latitude() * RAD_TO_DEG ); f->get_Latitude() * RAD_TO_DEG );
FGPath tile_path( globals->get_options()->get_fg_root() ); FGPath tile_path( globals->get_fg_root() );
tile_path.append( "Scenery" ); tile_path.append( "Scenery" );
tile_path.append( p.gen_base_path() ); tile_path.append( p.gen_base_path() );
tile_path.append( p.gen_index_str() ); tile_path.append( p.gen_index_str() );
@ -373,8 +376,8 @@ void GLUTkey(unsigned char k, int x, int y) {
// handles GUI state as well as Viewer LookAt Direction // handles GUI state as well as Viewer LookAt Direction
CenterView(); CenterView();
globals->set_current_view( globals->get_viewmgr()->next_view() ); globals->set_current_view( globals->get_viewmgr()->next_view() );
fgReshape( globals->get_options()->get_xsize(), fgReshape( fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
return; return;
case 120: // x key case 120: // x key
fov = globals->get_current_view()->get_fov(); fov = globals->get_current_view()->get_fov();
@ -447,8 +450,7 @@ void GLUTspecialkey(int k, int x, int y) {
} }
case GLUT_KEY_F3: { case GLUT_KEY_F3: {
string panel_path = string panel_path =
globals->get_props()->getStringValue("/sim/panel/path", fgGetString("/sim/panel/path", "Panels/Default/default.xml");
"Panels/Default/default.xml");
FGPanel * new_panel = fgReadPanel(panel_path); FGPanel * new_panel = fgReadPanel(panel_path);
if (new_panel == 0) { if (new_panel == 0) {
FG_LOG(FG_INPUT, FG_ALERT, FG_LOG(FG_INPUT, FG_ALERT,
@ -462,7 +464,7 @@ void GLUTspecialkey(int k, int x, int y) {
return; return;
} }
case GLUT_KEY_F4: { case GLUT_KEY_F4: {
FGPath props_path(globals->get_options()->get_fg_root()); FGPath props_path(globals->get_fg_root());
props_path.append("preferences.xml"); props_path.append("preferences.xml");
FG_LOG(FG_INPUT, FG_INFO, "Rereading global preferences"); FG_LOG(FG_INPUT, FG_INFO, "Rereading global preferences");
if (!readProperties(props_path.str(), globals->get_props())) { if (!readProperties(props_path.str(), globals->get_props())) {
@ -476,14 +478,14 @@ void GLUTspecialkey(int k, int x, int y) {
} }
case GLUT_KEY_F5: { case GLUT_KEY_F5: {
current_panel->setYOffset(current_panel->getYOffset() - 5); current_panel->setYOffset(current_panel->getYOffset() - 5);
fgReshape(globals->get_options()->get_xsize(), fgReshape(fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize()); fgGetInt("/sim/startup/ysize"));
return; return;
} }
case GLUT_KEY_F6: { case GLUT_KEY_F6: {
current_panel->setYOffset(current_panel->getYOffset() + 5); current_panel->setYOffset(current_panel->getYOffset() + 5);
fgReshape(globals->get_options()->get_xsize(), fgReshape(fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize()); fgGetInt("/sim/startup/ysize"));
return; return;
} }
case GLUT_KEY_F7: { case GLUT_KEY_F7: {
@ -560,33 +562,31 @@ void GLUTspecialkey(int k, int x, int y) {
FGAutopilot::FG_HEADING_LOCK ); FGAutopilot::FG_HEADING_LOCK );
} }
return; return;
case GLUT_KEY_F8: // F8 toggles fog ... off fastest nicest... case GLUT_KEY_F8: {// F8 toggles fog ... off fastest nicest...
globals->get_options()->cycle_fog(); const string &fog = fgGetString("/sim/rendering/fog");
if (fog == "disabled") {
if ( globals->get_options()->get_fog() == fgSetString("/sim/rendering/fog", "fastest");
FGOptions::FG_FOG_DISABLED ) FG_LOG(FG_INPUT, FG_INFO, "Fog enabled, hint=fastest");
{ } else if (fog == "fastest") {
FG_LOG( FG_INPUT, FG_INFO, "Fog disabled" ); fgSetString("/sim/rendering/fog", "nicest");
} else if ( globals->get_options()->get_fog() == FG_LOG(FG_INPUT, FG_INFO, "Fog enabled, hint=nicest");
FGOptions::FG_FOG_FASTEST ) } else if (fog == "nicest") {
{ fgSetString("/sim/rendering/fog", "disabled");
FG_LOG( FG_INPUT, FG_INFO, FG_LOG(FG_INPUT, FG_INFO, "Fog disabled");
"Fog enabled, hint set to fastest" ); } else {
} else if ( globals->get_options()->get_fog() == fgSetString("/sim/rendering/fog", "disabled");
FGOptions::FG_FOG_NICEST ) FG_LOG(FG_INPUT, FG_ALERT, "Unrecognized fog type "
{ << fog << ", changed to 'disabled'");
FG_LOG( FG_INPUT, FG_INFO,
"Fog enabled, hint set to nicest" );
} }
return; return;
}
case GLUT_KEY_F9: // F9 toggles textures on and off... case GLUT_KEY_F9: // F9 toggles textures on and off...
FG_LOG( FG_INPUT, FG_INFO, "Toggling texture" ); FG_LOG( FG_INPUT, FG_INFO, "Toggling texture" );
if ( globals->get_options()->get_textures() ) { if ( fgGetBool("/sim/rendering/textures")) {
globals->get_options()->set_textures( false ); fgSetBool("/sim/rendering/textures", false);
material_lib.set_step( 1 ); material_lib.set_step( 1 );
} else { } else {
globals->get_options()->set_textures( true ); fgSetBool("/sim/rendering/textures", true);
material_lib.set_step( 0 ); material_lib.set_step( 0 );
} }
return; return;

View file

@ -271,7 +271,7 @@ void fgInitVisuals( void ) {
#ifndef GLUT_WRONG_VERSION #ifndef GLUT_WRONG_VERSION
// Go full screen if requested ... // Go full screen if requested ...
if ( globals->get_options()->get_fullscreen() ) { if ( fgGetBool("/sim/startup/fullscreen") ) {
glutFullScreen(); glutFullScreen();
} }
#endif #endif
@ -290,14 +290,14 @@ void fgInitVisuals( void ) {
// glFogi (GL_FOG_MODE, GL_LINEAR); // glFogi (GL_FOG_MODE, GL_LINEAR);
glFogi (GL_FOG_MODE, GL_EXP2); glFogi (GL_FOG_MODE, GL_EXP2);
if ( (globals->get_options()->get_fog() == 1) || if ( (fgGetString("/sim/rendering/fog") == "disabled") ||
(globals->get_options()->get_shading() == 0) ) { (!fgGetBool("/sim/rendering/shading"))) {
// if fastest fog requested, or if flat shading force fastest // if fastest fog requested, or if flat shading force fastest
glHint ( GL_FOG_HINT, GL_FASTEST ); glHint ( GL_FOG_HINT, GL_FASTEST );
} else if ( globals->get_options()->get_fog() == 2 ) { } else if ( fgGetString("/sim/rendering/fog") == "nicest" ) {
glHint ( GL_FOG_HINT, GL_NICEST ); glHint ( GL_FOG_HINT, GL_NICEST );
} }
if ( globals->get_options()->get_wireframe() ) { if ( fgGetBool("/sim/rendering/wireframe") ) {
// draw wire frame // draw wire frame
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
} }
@ -333,7 +333,7 @@ void fgRenderFrame( void ) {
if ( idle_state != 1000 ) { if ( idle_state != 1000 ) {
// still initializing, draw the splash screen // still initializing, draw the splash screen
if ( globals->get_options()->get_splash_screen() == 1 ) { if ( fgGetBool("/sim/startup/splash-screen") ) {
fgSplashUpdate(0.0); fgSplashUpdate(0.0);
} }
} else { } else {
@ -418,24 +418,24 @@ void fgRenderFrame( void ) {
#endif #endif
// update view port // update view port
fgReshape( globals->get_options()->get_xsize(), fgReshape( fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
#if 0 #if 0
// swing and a miss // swing and a miss
if ( ! fgPanelVisible() ) { if ( ! fgPanelVisible() ) {
xglViewport( 0, 0 , xglViewport( 0, 0 ,
(GLint)(globals->get_options()->get_xsize()), (GLint)(fgGetInt("/sim/startup/xsize")),
(GLint)(globals->get_options()->get_ysize()) ); (GLint)(fgGetInt("/sim/startup/ysize")) );
} else { } else {
int view_h = int view_h =
int( (current_panel->getViewHeight() - int( (current_panel->getViewHeight() -
current_panel->getYOffset()) current_panel->getYOffset())
* (globals->get_options()->get_ysize() / 768.0) ); * (fgGetInt("/sim/startup/ysize") / 768.0) );
glViewport( 0, glViewport( 0,
(GLint)(globals->get_options()->get_ysize() - view_h), (GLint)(fgGetInt("/sim/startup/ysize") - view_h),
(GLint)(globals->get_options()->get_xsize()), (GLint)(fgGetInt("/sim/startup/xsize")),
(GLint)(view_h) ); (GLint)(view_h) );
} }
#endif #endif
@ -444,12 +444,12 @@ void fgRenderFrame( void ) {
glLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec ); glLightfv( GL_LIGHT0, GL_POSITION, l->sun_vec );
clear_mask = GL_DEPTH_BUFFER_BIT; clear_mask = GL_DEPTH_BUFFER_BIT;
if ( globals->get_options()->get_wireframe() ) { if ( fgGetBool("/sim/rendering/wireframe") ) {
clear_mask |= GL_COLOR_BUFFER_BIT; clear_mask |= GL_COLOR_BUFFER_BIT;
} }
if ( globals->get_options()->get_skyblend() ) { if ( fgGetBool("/sim/rendering/skyblend") ) {
if ( globals->get_options()->get_textures() ) { if ( fgGetBool("/sim/rendering/textures") ) {
// glClearColor(black[0], black[1], black[2], black[3]); // glClearColor(black[0], black[1], black[2], black[3]);
glClearColor(l->adj_fog_color[0], l->adj_fog_color[1], glClearColor(l->adj_fog_color[0], l->adj_fog_color[1],
l->adj_fog_color[2], l->adj_fog_color[3]); l->adj_fog_color[2], l->adj_fog_color[3]);
@ -485,8 +485,8 @@ void fgRenderFrame( void ) {
thesky->modify_vis( cur_fdm_state->get_Altitude() * FEET_TO_METER, thesky->modify_vis( cur_fdm_state->get_Altitude() * FEET_TO_METER,
( global_multi_loop * ( global_multi_loop *
globals->get_options()->get_speed_up() ) / fgGetInt("/sim/speed-up") ) /
(double)globals->get_options()->get_model_hz() ); (double)fgGetInt("/sim/model-hz") );
double actual_visibility = thesky->get_visibility(); double actual_visibility = thesky->get_visibility();
// cout << "actual visibility = " << actual_visibility << endl; // cout << "actual visibility = " << actual_visibility << endl;
@ -509,7 +509,7 @@ void fgRenderFrame( void ) {
glFogf (GL_FOG_DENSITY, fog_exp2_density); glFogf (GL_FOG_DENSITY, fog_exp2_density);
// update the sky dome // update the sky dome
if ( globals->get_options()->get_skyblend() ) { if ( fgGetBool("/sim/rendering/skyblend") ) {
/* cout << "thesky->repaint() sky_color = " /* cout << "thesky->repaint() sky_color = "
<< cur_light_params.sky_color[0] << " " << cur_light_params.sky_color[0] << " "
<< cur_light_params.sky_color[1] << " " << cur_light_params.sky_color[1] << " "
@ -562,7 +562,7 @@ void fgRenderFrame( void ) {
} }
glEnable( GL_DEPTH_TEST ); glEnable( GL_DEPTH_TEST );
if ( globals->get_options()->get_fog() > 0 ) { if ( fgGetString("/sim/rendering/fog") != "disabled" ) {
glEnable( GL_FOG ); glEnable( GL_FOG );
glFogi( GL_FOG_MODE, GL_EXP2 ); glFogi( GL_FOG_MODE, GL_EXP2 );
glFogfv( GL_FOG_COLOR, l->adj_fog_color ); glFogfv( GL_FOG_COLOR, l->adj_fog_color );
@ -662,7 +662,7 @@ void fgRenderFrame( void ) {
// $$$ end - added VS Renganthan 17 Oct 2K // $$$ end - added VS Renganthan 17 Oct 2K
# ifdef FG_NETWORK_OLK # ifdef FG_NETWORK_OLK
if ( globals->get_options()->get_network_olk() ) { if ( fgGetBool("/sim/networking/network-olk") ) {
sgCoord fgdpos; sgCoord fgdpos;
other = head->next; /* put listpointer to start */ other = head->next; /* put listpointer to start */
while ( other != tail) { /* display all except myself */ while ( other != tail) { /* display all except myself */
@ -747,17 +747,10 @@ void fgUpdateTimeDepCalcs(int multi_loop, int remainder) {
// run Autopilot system // run Autopilot system
current_autopilot->run(); current_autopilot->run();
// printf("updating flight model x %d\n", multi_loop);
/* fgFDMUpdate( globals->get_options()->get_flight_model(),
fdm_state,
multi_loop * globals->get_options()->get_speed_up(),
remainder ); */
cur_fdm_state->update( multi_loop * cur_fdm_state->update( multi_loop *
globals->get_options()->get_speed_up() ); fgGetInt("/sim/speed-up") );
FGSteam::update( multi_loop * globals->get_options()->get_speed_up() ); FGSteam::update( multi_loop * fgGetInt("/sim/speed-up") );
} else { } else {
// fgFDMUpdate( globals->get_options()->get_flight_model(),
// fdm_state, 0, remainder );
cur_fdm_state->update( 0 ); cur_fdm_state->update( 0 );
FGSteam::update( 0 ); FGSteam::update( 0 );
@ -771,11 +764,10 @@ void fgUpdateTimeDepCalcs(int multi_loop, int remainder) {
fdm_list.pop_front(); fdm_list.pop_front();
} }
if ( globals->get_options()->get_view_mode() == FGOptions::FG_VIEW_PILOT ) { if ( fgGetString("/sim/view-mode") == "pilot" ) {
cur_view_fdm = *cur_fdm_state; cur_view_fdm = *cur_fdm_state;
// do nothing // do nothing
} else if ( globals->get_options()->get_view_mode() } else if ( fgGetString("/sim/view-mode") == "follow" )
== FGOptions::FG_VIEW_FOLLOW )
{ {
cur_view_fdm = fdm_list.front(); cur_view_fdm = fdm_list.front();
} }
@ -839,7 +831,7 @@ void fgInitTimeDepCalcs( void ) {
// initialize timer // initialize timer
// #ifdef HAVE_SETITIMER // #ifdef HAVE_SETITIMER
// fgTimerInit( 1.0 / globals->get_options()->get_model_hz(), // fgTimerInit( 1.0 / fgGetInt("/sim/model-hz"),
// fgUpdateTimeDepCalcs ); // fgUpdateTimeDepCalcs );
// #endif HAVE_SETITIMER // #endif HAVE_SETITIMER
} }
@ -868,7 +860,7 @@ static void fgMainLoop( void ) {
FG_LOG( FG_ALL, FG_DEBUG, "======= ==== ===="); FG_LOG( FG_ALL, FG_DEBUG, "======= ==== ====");
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
if ( globals->get_options()->get_network_olk() ) { if ( fgGetBool("/sim/networking/network-olk") ) {
if ( net_is_registered == 0 ) { // We first have to reg. to fgd if ( net_is_registered == 0 ) { // We first have to reg. to fgd
// printf("FGD: Netupdate\n"); // printf("FGD: Netupdate\n");
fgd_send_com( "A", FGFS_host); // Send Mat4 data fgd_send_com( "A", FGFS_host); // Send Mat4 data
@ -879,7 +871,7 @@ static void fgMainLoop( void ) {
#if defined( ENABLE_PLIB_JOYSTICK ) #if defined( ENABLE_PLIB_JOYSTICK )
// Read joystick and update control settings // Read joystick and update control settings
if ( globals->get_options()->get_control_mode() == FGOptions::FG_JOYSTICK ) if ( fgGetString("/sim/control-mode") == "joystick" )
{ {
fgJoystickRead(); fgJoystickRead();
} }
@ -909,7 +901,7 @@ static void fgMainLoop( void ) {
cur_fdm_state->get_Altitude() * FEET_TO_METER, cur_fdm_state->get_Altitude() * FEET_TO_METER,
scenery.cur_elev + alt_adjust_m - 3.0, scenery.cur_elev + alt_adjust_m - 3.0,
scenery.cur_elev + alt_adjust_m ); scenery.cur_elev + alt_adjust_m );
fgFDMForceAltitude( globals->get_options()->get_flight_model(), fgFDMForceAltitude( fgGetString("/sim/flight-model"),
scenery.cur_elev + alt_adjust_m ); scenery.cur_elev + alt_adjust_m );
FG_LOG( FG_ALL, FG_DEBUG, FG_LOG( FG_ALL, FG_DEBUG,
@ -917,8 +909,6 @@ static void fgMainLoop( void ) {
<< cur_fdm_state->get_Altitude() * FEET_TO_METER << cur_fdm_state->get_Altitude() * FEET_TO_METER
<< " meters" ); << " meters" );
} }
//fgFDMSetGroundElevation( globals->get_options()->get_flight_model(),
// scenery.cur_elev ); // meters
} }
/* printf("Adjustment - ground = %.2f runway = %.2f alt = %.2f\n", /* printf("Adjustment - ground = %.2f runway = %.2f alt = %.2f\n",
@ -987,9 +977,9 @@ static void fgMainLoop( void ) {
elapsed += remainder; elapsed += remainder;
global_multi_loop = (int)(((double)elapsed * 0.000001) * global_multi_loop = (int)(((double)elapsed * 0.000001) *
globals->get_options()->get_model_hz()); fgGetInt("/sim/model-hz"));
remainder = elapsed - ( (global_multi_loop*1000000) / remainder = elapsed - ( (global_multi_loop*1000000) /
globals->get_options()->get_model_hz() ); fgGetInt("/sim/model-hz") );
FG_LOG( FG_ALL, FG_DEBUG, FG_LOG( FG_ALL, FG_DEBUG,
"Model iterations needed = " << global_multi_loop "Model iterations needed = " << global_multi_loop
<< ", new remainder = " << remainder ); << ", new remainder = " << remainder );
@ -1017,9 +1007,9 @@ static void fgMainLoop( void ) {
// Run audio scheduler // Run audio scheduler
#ifdef ENABLE_AUDIO_SUPPORT #ifdef ENABLE_AUDIO_SUPPORT
if ( globals->get_options()->get_sound() && !audio_sched->not_working() ) { if ( fgGetBool("/sim/sound") && !audio_sched->not_working() ) {
if ( globals->get_options()->get_aircraft() == "c172" ) { if ( fgGetString("/sim/aircraft") == "c172" ) {
// pitch corresponds to rpm // pitch corresponds to rpm
// volume corresponds to manifold pressure // volume corresponds to manifold pressure
@ -1089,7 +1079,7 @@ static void fgIdleFunction ( void ) {
if ( idle_state == 0 ) { if ( idle_state == 0 ) {
// Initialize the splash screen right away // Initialize the splash screen right away
if ( globals->get_options()->get_splash_screen() ) { if ( fgGetBool("/sim/startup/splash-screen") ) {
fgSplashInit(); fgSplashInit();
} }
@ -1097,9 +1087,9 @@ static void fgIdleFunction ( void ) {
} else if ( idle_state == 1 ) { } else if ( idle_state == 1 ) {
// Start the intro music // Start the intro music
#if !defined(WIN32) #if !defined(WIN32)
if ( globals->get_options()->get_intro_music() ) { if ( fgGetBool("/sim/startup/intro-music") ) {
string lockfile = "/tmp/mpg123.running"; string lockfile = "/tmp/mpg123.running";
FGPath mp3file( globals->get_options()->get_fg_root() ); FGPath mp3file( globals->get_fg_root() );
mp3file.append( "Sounds/intro.mp3" ); mp3file.append( "Sounds/intro.mp3" );
string command = "(touch " + lockfile + "; mpg123 " string command = "(touch " + lockfile + "; mpg123 "
@ -1154,7 +1144,7 @@ static void fgIdleFunction ( void ) {
#ifdef ENABLE_AUDIO_SUPPORT #ifdef ENABLE_AUDIO_SUPPORT
#if !defined(WIN32) #if !defined(WIN32)
if ( globals->get_options()->get_intro_music() ) { if ( fgGetBool("/sim/startup/intro-music") ) {
// Let's wait for mpg123 to finish // Let's wait for mpg123 to finish
string lockfile = "/tmp/mpg123.running"; string lockfile = "/tmp/mpg123.running";
struct stat stat_buf; struct stat stat_buf;
@ -1170,13 +1160,13 @@ static void fgIdleFunction ( void ) {
} }
#endif // WIN32 #endif // WIN32
if ( globals->get_options()->get_sound() ) { if ( fgGetBool("/sim/sound") ) {
audio_sched = new slScheduler ( 8000 ); audio_sched = new slScheduler ( 8000 );
audio_mixer = new smMixer; audio_mixer = new smMixer;
audio_mixer -> setMasterVolume ( 80 ) ; /* 80% of max volume. */ audio_mixer -> setMasterVolume ( 80 ) ; /* 80% of max volume. */
audio_sched -> setSafetyMargin ( 1.0 ) ; audio_sched -> setSafetyMargin ( 1.0 ) ;
FGPath slfile( globals->get_options()->get_fg_root() ); FGPath slfile( globals->get_fg_root() );
slfile.append( "Sounds/wasp.wav" ); slfile.append( "Sounds/wasp.wav" );
s1 = new slSample ( (char *)slfile.c_str() ); s1 = new slSample ( (char *)slfile.c_str() );
@ -1212,8 +1202,8 @@ static void fgIdleFunction ( void ) {
idle_state = 1000; idle_state = 1000;
cout << "Panel visible = " << fgPanelVisible() << endl; cout << "Panel visible = " << fgPanelVisible() << endl;
fgReshape( globals->get_options()->get_xsize(), fgReshape( fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
} }
if ( idle_state == 1000 ) { if ( idle_state == 1000 ) {
@ -1222,7 +1212,7 @@ static void fgIdleFunction ( void ) {
fgMainLoop(); fgMainLoop();
} else { } else {
if ( globals->get_options()->get_splash_screen() == 1 ) { if ( fgGetBool("/sim/startup/splash-screen") ) {
fgSplashUpdate(0.0); fgSplashUpdate(0.0);
} }
} }
@ -1256,8 +1246,8 @@ void fgReshape( int width, int height ) {
(GLint)(width), (GLint)(view_h) ); (GLint)(width), (GLint)(view_h) );
} }
globals->get_options()->set_xsize( width ); fgSetInt("/sim/startup/xsize", width);
globals->get_options()->set_ysize( height ); fgSetInt("/sim/startup/ysize", height);
float fov = globals->get_current_view()->get_fov(); float fov = globals->get_current_view()->get_fov();
ssgSetFOV(fov, fov * globals->get_current_view()->get_win_ratio()); ssgSetFOV(fov, fov * globals->get_current_view()->get_win_ratio());
@ -1279,15 +1269,15 @@ int fgGlutInit( int *argc, char **argv ) {
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
FG_LOG( FG_GENERAL, FG_INFO, "Opening a window: " << FG_LOG( FG_GENERAL, FG_INFO, "Opening a window: " <<
globals->get_options()->get_xsize() << "x" fgGetInt("/sim/startup/xsize") << "x"
<< globals->get_options()->get_ysize() ); << fgGetInt("/sim/startup/ysize") );
// Define initial window size // Define initial window size
glutInitWindowSize( globals->get_options()->get_xsize(), glutInitWindowSize( fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize() ); fgGetInt("/sim/startup/ysize") );
// Initialize windows // Initialize windows
if ( globals->get_options()->get_game_mode() == 0 ) { if ( !fgGetBool("/sim/startup/game-mode")) {
// Open the regular window // Open the regular window
glutCreateWindow("FlightGear"); glutCreateWindow("FlightGear");
#ifndef GLUT_WRONG_VERSION #ifndef GLUT_WRONG_VERSION
@ -1295,9 +1285,9 @@ int fgGlutInit( int *argc, char **argv ) {
// Open the cool new 'game mode' window // Open the cool new 'game mode' window
char game_mode_str[256]; char game_mode_str[256];
sprintf( game_mode_str, "width=%d height=%d bpp=%d", sprintf( game_mode_str, "width=%d height=%d bpp=%d",
globals->get_options()->get_xsize(), fgGetInt("/sim/startup/xsize"),
globals->get_options()->get_ysize(), fgGetInt("/sim/startup/ysize"),
globals->get_options()->get_bpp()); fgGetInt("/sim/rendering/bits-per-pixel"));
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"game mode params = " << game_mode_str ); "game mode params = " << game_mode_str );
@ -1377,9 +1367,6 @@ int main( int argc, char **argv ) {
FG_LOG( FG_GENERAL, FG_INFO, "FlightGear: Version " FG_LOG( FG_GENERAL, FG_INFO, "FlightGear: Version "
<< version << endl ); << version << endl );
// seed the random number generater
sg_srandom_time();
// Allocate global data structures. This needs to happen before // Allocate global data structures. This needs to happen before
// we parse command line options // we parse command line options
@ -1387,13 +1374,12 @@ int main( int argc, char **argv ) {
globals = new FGGlobals; globals = new FGGlobals;
globals->set_props( props ); globals->set_props( props );
// seed the random number generater
sg_srandom_time();
SGRoute *route = new SGRoute; SGRoute *route = new SGRoute;
globals->set_route( route ); globals->set_route( route );
FGOptions *options = new FGOptions;
globals->set_options( options );
options->init();
FGViewMgr *viewmgr = new FGViewMgr; FGViewMgr *viewmgr = new FGViewMgr;
globals->set_viewmgr( viewmgr ); globals->set_viewmgr( viewmgr );
@ -1442,18 +1428,18 @@ int main( int argc, char **argv ) {
guiInit(); guiInit();
// set current_options lon/lat if an airport id is specified // set current_options lon/lat if an airport id is specified
// cout << "3. airport_id = " << globals->get_options()->get_airport_id() << endl; // cout << "3. airport_id = " << fgGetString("/sim/startup/airport-id") << endl;
if ( globals->get_options()->get_airport_id().length() ) { if ( fgGetString("/sim/startup/airport-id").length() ) {
// fgSetPosFromAirportID( globals->get_options()->get_airport_id() ); // fgSetPosFromAirportID( fgGetString("/sim/startup/airport-id") );
fgSetPosFromAirportIDandHdg( globals->get_options()->get_airport_id(), fgSetPosFromAirportIDandHdg( fgGetString("/sim/startup/airport-id"),
globals->get_options()->get_heading() ); fgGetDouble("/orientation/heading") );
} }
// Initialize time // Initialize time
FGPath zone( globals->get_options()->get_fg_root() ); FGPath zone( globals->get_fg_root() );
zone.append( "Timezone" ); zone.append( "Timezone" );
SGTime *t = new SGTime( globals->get_options()->get_lon() * DEG_TO_RAD, SGTime *t = new SGTime( fgGetDouble("/position/longitude") * DEG_TO_RAD,
globals->get_options()->get_lat() * DEG_TO_RAD, fgGetDouble("/position/latitude") * DEG_TO_RAD,
zone.str() ); zone.str() );
// Handle potential user specified time offsets // Handle potential user specified time offsets
@ -1464,34 +1450,24 @@ int main( int argc, char **argv ) {
sgTimeGetGMT( fgLocaltime(&cur_time, t->get_zonename() ) ); sgTimeGetGMT( fgLocaltime(&cur_time, t->get_zonename() ) );
// Okay, we now have six possible scenarios // Okay, we now have six possible scenarios
switch ( globals->get_options()->get_time_offset_type() ) { int offset = fgGetInt("/sim/startup/time-offset");
case FGOptions::FG_TIME_SYS_OFFSET: const string &offset_type = fgGetString("/sim/startup/time-offset-type");
globals->set_warp( globals->get_options()->get_time_offset() ); if (offset_type == "system-offset") {
break; globals->set_warp( offset );
case FGOptions::FG_TIME_GMT_OFFSET: } else if (offset_type == "gmt-offset") {
globals->set_warp( globals->get_options()->get_time_offset() - globals->set_warp( offset - (currGMT - systemLocalTime) );
(currGMT - systemLocalTime) ); } else if (offset_type == "latitude-offset") {
break; globals->set_warp( offset - (aircraftLocalTime - systemLocalTime) );
case FGOptions::FG_TIME_LAT_OFFSET: } else if (offset_type == "system") {
globals->set_warp( globals->get_options()->get_time_offset() - globals->set_warp( offset - cur_time );
(aircraftLocalTime - systemLocalTime) ); } else if (offset_type == "gmt") {
break; globals->set_warp( offset - currGMT );
case FGOptions::FG_TIME_SYS_ABSOLUTE: } else if (offset_type == "latitude") {
globals->set_warp( globals->get_options()->get_time_offset() - globals->set_warp( offset - (aircraftLocalTime - systemLocalTime) -
cur_time );
//printf("warp = %d\n", warp);
break;
case FGOptions::FG_TIME_GMT_ABSOLUTE:
globals->set_warp( globals->get_options()->get_time_offset() -
currGMT );
break;
case FGOptions::FG_TIME_LAT_ABSOLUTE:
globals->set_warp( globals->get_options()->get_time_offset() -
(aircraftLocalTime - systemLocalTime) -
cur_time ); cur_time );
break; } else {
default: FG_LOG( FG_GENERAL, FG_ALERT,
FG_LOG( FG_GENERAL, FG_ALERT, "Unsupported type" ); "Unsupported offset type " << offset_type );
exit( -1 ); exit( -1 );
} }
@ -1511,7 +1487,7 @@ int main( int argc, char **argv ) {
exit(-1); exit(-1);
} }
FGPath modelpath( globals->get_options()->get_fg_root() ); FGPath modelpath( globals->get_fg_root() );
ssgModelPath( (char *)modelpath.c_str() ); ssgModelPath( (char *)modelpath.c_str() );
// Scene graph root // Scene graph root
@ -1522,7 +1498,7 @@ int main( int argc, char **argv ) {
lighting->setName( "Lighting" ); lighting->setName( "Lighting" );
// Initialize the sky // Initialize the sky
FGPath ephem_data_path( globals->get_options()->get_fg_root() ); FGPath ephem_data_path( globals->get_fg_root() );
ephem_data_path.append( "Astro" ); ephem_data_path.append( "Astro" );
SGEphemeris *ephem = new SGEphemeris( ephem_data_path.c_str() ); SGEphemeris *ephem = new SGEphemeris( ephem_data_path.c_str() );
ephem->update( globals->get_time_params()->getMjd(), ephem->update( globals->get_time_params()->getMjd(),
@ -1530,7 +1506,7 @@ int main( int argc, char **argv ) {
0.0 ); 0.0 );
globals->set_ephem( ephem ); globals->set_ephem( ephem );
FGPath sky_tex_path( globals->get_options()->get_fg_root() ); FGPath sky_tex_path( globals->get_fg_root() );
sky_tex_path.append( "Textures" ); sky_tex_path.append( "Textures" );
sky_tex_path.append( "Sky" ); sky_tex_path.append( "Sky" );
thesky = new SGSky; thesky = new SGSky;
@ -1542,7 +1518,7 @@ int main( int argc, char **argv ) {
globals->get_ephem()->getNumStars(), globals->get_ephem()->getNumStars(),
globals->get_ephem()->getStars(), 60000.0 ); globals->get_ephem()->getStars(), 60000.0 );
if ( globals->get_options()->get_clouds() == true ) { if ( fgGetBool("/environment/clouds/status") ) {
thesky->add_cloud_layer( 2600.0, 200.0, 50.0, 40000.0, thesky->add_cloud_layer( 2600.0, 200.0, 50.0, 40000.0,
SG_CLOUD_MOSTLY_SUNNY ); SG_CLOUD_MOSTLY_SUNNY );
thesky->add_cloud_layer( 6000.0, 20.0, 10.0, 40000.0, thesky->add_cloud_layer( 6000.0, 20.0, 10.0, 40000.0,
@ -1576,10 +1552,9 @@ int main( int argc, char **argv ) {
acmodel_pos = new ssgTransform; acmodel_pos = new ssgTransform;
string acmodel_path = string acmodel_path =
globals->get_props()->getStringValue("/sim/model/path", fgGetString("/sim/model/path", "Models/Geometry/glider.ac");
"Models/Geometry/glider.ac");
string full_model = globals->get_options()->get_fg_root() + "/" string full_model = globals->get_fg_root() + "/"
+ acmodel_path; + acmodel_path;
int pos = full_model.rfind("/"); int pos = full_model.rfind("/");
@ -1618,18 +1593,12 @@ int main( int argc, char **argv ) {
sgMat4 rot_matrix; sgMat4 rot_matrix;
sgMat4 off_matrix; sgMat4 off_matrix;
sgMat4 res_matrix; sgMat4 res_matrix;
float h_rot = float h_rot = fgGetFloat("/sim/model/h-rotation", 0.0);
globals->get_props()->getFloatValue("/sim/model/h-rotation", 0.0); float p_rot = fgGetFloat("/sim/model/p-rotation", 0.0);
float p_rot = float r_rot = fgGetFloat("/sim/model/r-rotation", 0.0);
globals->get_props()->getFloatValue("/sim/model/p-rotation", 0.0); float x_off = fgGetFloat("/sim/model/x-offset", 0.0);
float r_rot = float y_off = fgGetFloat("/sim/model/y-offset", 0.0);
globals->get_props()->getFloatValue("/sim/model/r-rotation", 0.0); float z_off = fgGetFloat("/sim/model/z-offset", 0.0);
float x_off =
globals->get_props()->getFloatValue("/sim/model/x-offset", 0.0);
float y_off =
globals->get_props()->getFloatValue("/sim/model/y-offset", 0.0);
float z_off =
globals->get_props()->getFloatValue("/sim/model/z-offset", 0.0);
sgMakeRotMat4(rot_matrix, h_rot, p_rot, r_rot); sgMakeRotMat4(rot_matrix, h_rot, p_rot, r_rot);
sgMakeTransMat4(off_matrix, x_off, y_off, z_off); sgMakeTransMat4(off_matrix, x_off, y_off, z_off);
sgMultMat4(res_matrix, off_matrix, rot_matrix); sgMultMat4(res_matrix, off_matrix, rot_matrix);
@ -1648,7 +1617,7 @@ int main( int argc, char **argv ) {
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
// Do the network intialization // Do the network intialization
if ( globals->get_options()->get_network_olk() ) { if ( fgGetBool("/sim/networking/network-olk") ) {
printf("Multipilot mode %s\n", fg_net_init( scene ) ); printf("Multipilot mode %s\n", fg_net_init( scene ) );
} }
#endif #endif
@ -1680,7 +1649,7 @@ void fgLoadDCS(void) {
ship_pos[k]=NULL; ship_pos[k]=NULL;
} }
FGPath tile_path( globals->get_options()->get_fg_root()); FGPath tile_path( globals->get_fg_root());
tile_path.append( "Scenery" ); tile_path.append( "Scenery" );
tile_path.append( "Objects.txt" ); tile_path.append( "Objects.txt" );
fg_gzifstream in( tile_path.str() ); fg_gzifstream in( tile_path.str() );
@ -1688,11 +1657,11 @@ void fgLoadDCS(void) {
FG_LOG( FG_TERRAIN, FG_ALERT, "Cannot open file: " << tile_path.str() ); FG_LOG( FG_TERRAIN, FG_ALERT, "Cannot open file: " << tile_path.str() );
} }
FGPath modelpath( globals->get_options()->get_fg_root() ); FGPath modelpath( globals->get_fg_root() );
modelpath.append( "Models" ); modelpath.append( "Models" );
modelpath.append( "Geometry" ); modelpath.append( "Geometry" );
FGPath texturepath( globals->get_options()->get_fg_root() ); FGPath texturepath( globals->get_fg_root() );
texturepath.append( "Models" ); texturepath.append( "Models" );
texturepath.append( "Textures" ); texturepath.append( "Textures" );
@ -1760,7 +1729,7 @@ void fgUpdateDCS (void) {
// Deck should be the first object in objects.txt in case of fdm=ada // Deck should be the first object in objects.txt in case of fdm=ada
if ((globals->get_options()->get_flight_model()) == 4 ) if (fgGetString("/sim/flight-model") == "ada")
{ {
obj_lon[0] = fdm->get_aux5()*DEG_TO_RAD; obj_lon[0] = fdm->get_aux5()*DEG_TO_RAD;
obj_lat[0] = fdm->get_aux6()*DEG_TO_RAD; obj_lat[0] = fdm->get_aux6()*DEG_TO_RAD;

View file

@ -25,10 +25,6 @@
# include <config.h> # include <config.h>
#endif #endif
#if defined(FX) && defined(XMESA)
bool global_fullscreen = true;
#endif
#include <simgear/compiler.h> #include <simgear/compiler.h>
#include <math.h> // rint() #include <math.h> // rint()
@ -38,32 +34,36 @@ bool global_fullscreen = true;
#include STL_STRING #include STL_STRING
#include <simgear/constants.h>
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/fgstream.hxx> #include <simgear/misc/fgstream.hxx>
#include <simgear/misc/props.hxx>
#include <simgear/timing/sg_time.hxx>
#include <Include/general.hxx> // #include <Include/general.hxx>
#include <Airports/simple.hxx> // #include <Airports/simple.hxx>
#include <Cockpit/cockpit.hxx> // #include <Cockpit/cockpit.hxx>
#include <FDM/flight.hxx> // #include <FDM/flight.hxx>
#include <FDM/UIUCModel/uiuc_aircraftdir.h> // #include <FDM/UIUCModel/uiuc_aircraftdir.h>
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
# include <NetworkOLK/network.h> # include <NetworkOLK/network.h>
#endif #endif
#include "fg_init.hxx"
#include "globals.hxx" #include "globals.hxx"
#include "fg_init.hxx"
#include "fg_props.hxx"
#include "options.hxx" #include "options.hxx"
FG_USING_STD(string); FG_USING_STD(string);
FG_USING_NAMESPACE(std); FG_USING_NAMESPACE(std);
// from main.cxx
extern void fgReshape( int width, int height );
inline double #define NEW_DEFAULT_MODEL_HZ 120
enum
{
FG_OPTIONS_OK = 0,
FG_OPTIONS_HELP = 1,
FG_OPTIONS_ERROR = 2
};
static double
atof( const string& str ) atof( const string& str )
{ {
@ -75,7 +75,7 @@ atof( const string& str )
#endif #endif
} }
inline int static int
atoi( const string& str ) atoi( const string& str )
{ {
#ifdef __MWERKS__ #ifdef __MWERKS__
@ -87,37 +87,18 @@ atoi( const string& str )
} }
// Defined the shared options class here /**
// FGOptions current_options; * Set a few fail-safe default property values.
*
#define PROP(name) (globals->get_props()->getValue(name, true)) * These should all be set in $FG_ROOT/preferences.xml, but just
* in case, we provide some initial sane values here. This method
* should be invoked *before* reading any init files.
// Constructor */
FGOptions::FGOptions() void
fgSetDefaults ()
{ {
char* envp = ::getenv( "FG_ROOT" );
if ( envp != NULL ) {
// fg_root could be anywhere, so default to environmental
// variable $FG_ROOT if it is set.
globals->set_fg_root(envp);
} else {
// Otherwise, default to a random compiled-in location if
// $FG_ROOT is not set. This can still be overridden from the
// command line or a config file.
#if defined( WIN32 )
globals->set_fg_root("\\FlightGear");
#elif defined( macintosh )
globals->set_fg_root("");
#else
globals->set_fg_root(PKGLIBDIR);
#endif
}
// set a possibly independent location for scenery data // set a possibly independent location for scenery data
envp = ::getenv( "FG_SCENERY" ); char *envp = ::getenv( "FG_SCENERY" );
if ( envp != NULL ) { if ( envp != NULL ) {
// fg_root could be anywhere, so default to environmental // fg_root could be anywhere, so default to environmental
@ -127,170 +108,78 @@ FGOptions::FGOptions()
// Otherwise, default to Scenery being in $FG_ROOT/Scenery // Otherwise, default to Scenery being in $FG_ROOT/Scenery
globals->set_fg_scenery(""); globals->set_fg_scenery("");
} }
}
void
FGOptions::init ()
{
// These are all deprecated, and will
// be removed gradually.
airport_id = PROP("/sim/startup/airport-id");
lon = PROP("/position/longitude");
lat = PROP("/position/latitude");
altitude = PROP("/position/altitude");
heading = PROP("/orientation/heading");
roll = PROP("/orientation/roll");
pitch = PROP("/orientation/pitch");
speedset = PROP("/sim/startup/speed-set");
uBody = PROP("/velocities/uBody");
vBody = PROP("/velocities/vBody");
wBody = PROP("/velocities/wBody");
vNorth = PROP("/velocities/speed-north");
vEast = PROP("/velocities/speed-east");
vDown = PROP("/velocities/speed-down");
vkcas = PROP("/velocities/knots");
mach = PROP("/velocities/mach");
game_mode = PROP("/sim/startup/game-mode");
splash_screen = PROP("/sim/startup/splash-screen");
intro_music = PROP("/sim/startup/intro-music");
mouse_pointer = PROP("/sim/startup/mouse-pointer");
control_mode = PROP("/sim/control-mode");
auto_coordination = PROP("/sim/auto-coordination");
hud_status = PROP("/sim/hud/visibility");
panel_status = PROP("/sim/panel/visibility");
sound = PROP("/sim/sound");
anti_alias_hud = PROP("/sim/hud/antialiased");
flight_model = PROP("/sim/flight-model");
aircraft = PROP("/sim/aircraft");
model_hz = PROP("/sim/model-hz");
speed_up = PROP("/sim/speed-up");
trim = PROP("/sim/startup/trim");
fog = PROP("/sim/rendering/fog");
clouds = PROP("/environment/clouds/enabled");
clouds_asl = PROP("/environments/clouds/altitude");
fullscreen = PROP("/sim/startup/fullscreen");
shading = PROP("/sim/rendering/shading");
skyblend = PROP("/sim/rendering/skyblend");
textures = PROP("/sim/rendering/textures");
wireframe = PROP("/sim/rendering/wireframe");
xsize = PROP("/sim/startup/xsize");
ysize = PROP("/sim/startup/ysize");
bpp = PROP("/sim/rendering/bits-per-pixel");
view_mode = PROP("/sim/view-mode");
default_view_offset = PROP("/sim/startup/view-offset");
visibility = PROP("/environment/visibility");
units = PROP("/sim/startup/units");
tris_or_culled = PROP("/sim/hud/frame-stat-type");
time_offset = PROP("/sim/startup/time-offset");
time_offset_type = PROP("/sim/startup/time-offset-type");
network_olk = PROP("/sim/networking/network-olk");
net_id = PROP("/sim/networking/call-sign");
}
/**
* Set a few fail-safe default property values.
*
* These should all be set in $FG_ROOT/preferences.xml, but just
* in case, we provide some initial sane values here. This method
* should be invoked *before* reading any init files.
*/
void
FGOptions::set_default_props ()
{
SGPropertyNode * props = globals->get_props();
// Position (Globe, AZ) // Position (Globe, AZ)
props->setDoubleValue("/position/longitude", -110.6642444); fgSetDouble("/position/longitude", -110.6642444);
props->setDoubleValue("/position/latitude", 33.3528917); fgSetDouble("/position/latitude", 33.3528917);
props->setDoubleValue("/position/altitude", -9999.0); fgSetDouble("/position/altitude", -9999.0);
// Orientation // Orientation
props->setDoubleValue("/orientation/heading", 270); fgSetDouble("/orientation/heading", 270);
props->setDoubleValue("/orientation/roll", 0); fgSetDouble("/orientation/roll", 0);
props->setDoubleValue("/orientation/pitch", 0.424); fgSetDouble("/orientation/pitch", 0.424);
// Velocities // Velocities
props->setStringValue("/sim/startup/speed-set", "knots"); fgSetString("/sim/startup/speed-set", "knots");
props->setDoubleValue("/velocities/uBody", 0.0); fgSetDouble("/velocities/uBody", 0.0);
props->setDoubleValue("/velocities/vBody", 0.0); fgSetDouble("/velocities/vBody", 0.0);
props->setDoubleValue("/velocities/wBody", 0.0); fgSetDouble("/velocities/wBody", 0.0);
props->setDoubleValue("/velocities/speed-north", 0.0); fgSetDouble("/velocities/speed-north", 0.0);
props->setDoubleValue("/velocities/speed-east", 0.0); fgSetDouble("/velocities/speed-east", 0.0);
props->setDoubleValue("/velocities/speed-down", 0.0); fgSetDouble("/velocities/speed-down", 0.0);
props->setDoubleValue("/velocities/airspeed", 0.0); fgSetDouble("/velocities/airspeed", 0.0);
props->setDoubleValue("/velocities/mach", 0.0); fgSetDouble("/velocities/mach", 0.0);
// Miscellaneous // Miscellaneous
props->setBoolValue("/sim/startup/game-mode", false); fgSetBool("/sim/startup/game-mode", false);
props->setBoolValue("/sim/startup/splash-screen", true); fgSetBool("/sim/startup/splash-screen", true);
props->setBoolValue("/sim/startup/intro-music", true); fgSetBool("/sim/startup/intro-music", true);
props->setStringValue("/sim/startup/mouse-pointer", "disabled"); fgSetString("/sim/startup/mouse-pointer", "disabled");
props->setStringValue("/sim/control-mode", "joystick"); fgSetString("/sim/control-mode", "joystick");
props->setBoolValue("/sim/auto-coordination", false); fgSetBool("/sim/auto-coordination", false);
// Features // Features
props->setBoolValue("/sim/hud/visibility", false); fgSetBool("/sim/hud/visibility", false);
props->setBoolValue("/sim/panel/visibility", true); fgSetBool("/sim/panel/visibility", true);
props->setBoolValue("/sim/sound", true); fgSetBool("/sim/sound", true);
props->setBoolValue("/sim/hud/antialiased", false); fgSetBool("/sim/hud/antialiased", false);
// Flight Model options // Flight Model options
props->setStringValue("/sim/flight-model", "larcsim"); fgSetString("/sim/flight-model", "larcsim");
props->setStringValue("/sim/aircraft", "c172"); fgSetString("/sim/aircraft", "c172");
props->setIntValue("/sim/model-hz", NEW_DEFAULT_MODEL_HZ); fgSetInt("/sim/model-hz", NEW_DEFAULT_MODEL_HZ);
props->setIntValue("/sim/speed-up", 1); fgSetInt("/sim/speed-up", 1);
props->setBoolValue("/sim/startup/trim", false); fgSetBool("/sim/startup/trim", false);
// Rendering options // Rendering options
props->setStringValue("/sim/rendering/fog", "nicest"); fgSetString("/sim/rendering/fog", "nicest");
props->setBoolValue("/environment/clouds/enabled", true); fgSetBool("/environment/clouds/status", true);
props->setDoubleValue("/environment/clouds/altitude", 5000); fgSetDouble("/environment/clouds/altitude", 5000);
props->setBoolValue("/sim/startup/fullscreen", false); fgSetBool("/sim/startup/fullscreen", false);
props->setBoolValue("/sim/rendering/shading", true); fgSetBool("/sim/rendering/shading", true);
props->setBoolValue("/sim/rendering/skyblend", true); fgSetBool("/sim/rendering/skyblend", true);
props->setBoolValue("/sim/rendering/textures", true); fgSetBool("/sim/rendering/textures", true);
props->setBoolValue("/sim/rendering/wireframe", false); fgSetBool("/sim/rendering/wireframe", false);
props->setIntValue("/sim/startup/xsize", 800); fgSetInt("/sim/startup/xsize", 800);
props->setIntValue("/sim/startup/ysize", 600); fgSetInt("/sim/startup/ysize", 600);
props->setIntValue("/sim/rendering/bits-per-pixel", 16); fgSetInt("/sim/rendering/bits-per-pixel", 16);
props->setIntValue("/sim/view-mode", (int)FG_VIEW_PILOT); fgSetString("/sim/view-mode", "pilot");
props->setDoubleValue("/sim/startup/view-offset", 0); fgSetDouble("/sim/startup/view-offset", 0);
props->setDoubleValue("/environment/visibility", 20000); fgSetDouble("/environment/visibility", 20000);
// HUD options // HUD options
props->setStringValue("/sim/startup/units", "feet"); fgSetString("/sim/startup/units", "feet");
props->setStringValue("/sim/hud/frame-stat-type", "tris"); fgSetString("/sim/hud/frame-stat-type", "tris");
// Time options // Time options
props->setIntValue("/sim/startup/time-offset", 0); fgSetInt("/sim/startup/time-offset", 0);
fgSetString("/sim/startup/time-offset-type", "system-offset");
props->setBoolValue("/sim/networking/network-olk", false); fgSetBool("/sim/networking/network-olk", false);
props->setStringValue("/sim/networking/call-sign", "Johnny"); fgSetString("/sim/networking/call-sign", "Johnny");
} }
void static double
FGOptions::toggle_panel() { parse_time(const string& time_in) {
SGPropertyNode * props = globals->get_props();
bool freeze = globals->get_freeze();
if( !freeze )
globals->set_freeze(true);
if(props->getBoolValue("/sim/panel/visibility"))
props->setBoolValue("/sim/panel/visibility", false);
else
props->setBoolValue("/sim/panel/visibility", true);
fgReshape(props->getIntValue("/sim/startup/xsize"),
props->getIntValue("/sim/startup/ysize"));
if( !freeze )
globals->set_freeze( false );
}
double
FGOptions::parse_time(const string& time_in) {
char *time_str, num[256]; char *time_str, num[256];
double hours, minutes, seconds; double hours, minutes, seconds;
double result = 0.0; double result = 0.0;
@ -368,7 +257,8 @@ FGOptions::parse_time(const string& time_in) {
} }
long int FGOptions::parse_date( const string& date) static long int
parse_date( const string& date)
{ {
struct tm gmt; struct tm gmt;
char * date_str, num[256]; char * date_str, num[256];
@ -476,8 +366,8 @@ long int FGOptions::parse_date( const string& date)
/// parse degree in the form of [+/-]hhh:mm:ss /// parse degree in the form of [+/-]hhh:mm:ss
double static double
FGOptions::parse_degree( const string& degree_str) { parse_degree( const string& degree_str) {
double result = parse_time( degree_str ); double result = parse_time( degree_str );
// printf("Degree = %.4f\n", result); // printf("Degree = %.4f\n", result);
@ -487,8 +377,8 @@ FGOptions::parse_degree( const string& degree_str) {
// parse time offset command line option // parse time offset command line option
int static int
FGOptions::parse_time_offset( const string& time_str) { parse_time_offset( const string& time_str) {
int result; int result;
// printf("time offset = %s\n", time_str); // printf("time offset = %s\n", time_str);
@ -505,42 +395,15 @@ FGOptions::parse_time_offset( const string& time_str) {
} }
// Parse --fdm=abcdefg type option
int
FGOptions::parse_fdm( const string& fm ) const {
// cout << "fdm = " << fm << endl;
if ( fm == "ada" ) {
return FGInterface::FG_ADA;
} else if ( fm == "balloon" ) {
return FGInterface::FG_BALLOONSIM;
} else if ( fm == "external" ) {
return FGInterface::FG_EXTERNAL;
} else if ( fm == "jsb" ) {
return FGInterface::FG_JSBSIM;
} else if ( (fm == "larcsim") || (fm == "LaRCsim") ) {
return FGInterface::FG_LARCSIM;
} else if ( fm == "magic" ) {
return FGInterface::FG_MAGICCARPET;
} else {
FG_LOG( FG_GENERAL, FG_ALERT, "Unknown fdm = " << fm );
exit(-1);
}
// we'll never get here, but it makes the compiler happy.
return -1;
}
// Parse --fov=x.xx type option // Parse --fov=x.xx type option
double static double
FGOptions::parse_fov( const string& arg ) { parse_fov( const string& arg ) {
double fov = atof(arg); double fov = atof(arg);
if ( fov < FG_FOV_MIN ) { fov = FG_FOV_MIN; } if ( fov < FG_FOV_MIN ) { fov = FG_FOV_MIN; }
if ( fov > FG_FOV_MAX ) { fov = FG_FOV_MAX; } if ( fov > FG_FOV_MAX ) { fov = FG_FOV_MAX; }
globals->get_props()->setDoubleValue("/sim/field-of-view", fov); fgSetDouble("/sim/field-of-view", fov);
// printf("parse_fov(): result = %.4f\n", fov); // printf("parse_fov(): result = %.4f\n", fov);
@ -573,8 +436,8 @@ FGOptions::parse_fov( const string& arg ) {
// //
// filename = file system file name // filename = file system file name
bool static bool
FGOptions::parse_channel( const string& type, const string& channel_str ) { parse_channel( const string& type, const string& channel_str ) {
// cout << "Channel string = " << channel_str << endl; // cout << "Channel string = " << channel_str << endl;
globals->get_channel_options_list().push_back( type + "," + channel_str ); globals->get_channel_options_list().push_back( type + "," + channel_str );
@ -584,7 +447,8 @@ FGOptions::parse_channel( const string& type, const string& channel_str ) {
// Parse --wp=ID[,alt] // Parse --wp=ID[,alt]
bool FGOptions::parse_wp( const string& arg ) { static bool
parse_wp( const string& arg ) {
string id, alt_str; string id, alt_str;
double alt = 0.0; double alt = 0.0;
@ -594,8 +458,7 @@ bool FGOptions::parse_wp( const string& arg ) {
alt_str = arg.substr( pos + 1 ); alt_str = arg.substr( pos + 1 );
// cout << "id str = " << id << " alt str = " << alt_str << endl; // cout << "id str = " << id << " alt str = " << alt_str << endl;
alt = atof( alt_str.c_str() ); alt = atof( alt_str.c_str() );
if ( globals->get_props()->getStringValue("/sim/startup/units") if ( fgGetString("/sim/startup/units") == "feet" ) {
== "feet" ) {
alt *= FEET_TO_METER; alt *= FEET_TO_METER;
} }
} else { } else {
@ -615,7 +478,8 @@ bool FGOptions::parse_wp( const string& arg ) {
// Parse --flight-plan=[file] // Parse --flight-plan=[file]
bool FGOptions::parse_flightplan(const string& arg) static bool
parse_flightplan(const string& arg)
{ {
fg_gzifstream infile(arg.c_str()); fg_gzifstream infile(arg.c_str());
if (!infile) { if (!infile) {
@ -641,193 +505,190 @@ bool FGOptions::parse_flightplan(const string& arg)
// Parse a single option // Parse a single option
int FGOptions::parse_option( const string& arg ) { static int
SGPropertyNode * props = globals->get_props(); parse_option (const string& arg)
{
// General Options // General Options
if ( (arg == "--help") || (arg == "-h") ) { if ( (arg == "--help") || (arg == "-h") ) {
// help/usage request // help/usage request
return(FG_OPTIONS_HELP); return(FG_OPTIONS_HELP);
} else if ( arg == "--disable-game-mode") { } else if ( arg == "--disable-game-mode") {
props->setBoolValue("/sim/startup/game-mode", false); fgSetBool("/sim/startup/game-mode", false);
} else if ( arg == "--enable-game-mode" ) { } else if ( arg == "--enable-game-mode" ) {
props->setBoolValue("/sim/startup/game-mode", true); fgSetBool("/sim/startup/game-mode", true);
} else if ( arg == "--disable-splash-screen" ) { } else if ( arg == "--disable-splash-screen" ) {
props->setBoolValue("/sim/startup/splash-screen", false); fgSetBool("/sim/startup/splash-screen", false);
} else if ( arg == "--enable-splash-screen" ) { } else if ( arg == "--enable-splash-screen" ) {
props->setBoolValue("/sim/startup/splash-screen", true); fgSetBool("/sim/startup/splash-screen", true);
} else if ( arg == "--disable-intro-music" ) { } else if ( arg == "--disable-intro-music" ) {
props->setBoolValue("/sim/startup/intro-music", false); fgSetBool("/sim/startup/intro-music", false);
} else if ( arg == "--enable-intro-music" ) { } else if ( arg == "--enable-intro-music" ) {
props->setBoolValue("/sim/startup/intro-music", true); fgSetBool("/sim/startup/intro-music", true);
} else if ( arg == "--disable-mouse-pointer" ) { } else if ( arg == "--disable-mouse-pointer" ) {
props->setStringValue("/sim/startup/mouse-pointer", "disabled"); fgSetString("/sim/startup/mouse-pointer", "disabled");
} else if ( arg == "--enable-mouse-pointer" ) { } else if ( arg == "--enable-mouse-pointer" ) {
props->setStringValue("/sim/startup/mouse-pointer", "enabled"); fgSetString("/sim/startup/mouse-pointer", "enabled");
} else if ( arg == "--disable-freeze" ) { } else if ( arg == "--disable-freeze" ) {
props->setBoolValue("/sim/freeze", false); fgSetBool("/sim/freeze", false);
} else if ( arg == "--enable-freeze" ) { } else if ( arg == "--enable-freeze" ) {
props->setBoolValue("/sim/freeze", true); fgSetBool("/sim/freeze", true);
} else if ( arg == "--disable-anti-alias-hud" ) { } else if ( arg == "--disable-anti-alias-hud" ) {
props->setBoolValue("/sim/hud/antialiased", false); fgSetBool("/sim/hud/antialiased", false);
} else if ( arg == "--enable-anti-alias-hud" ) { } else if ( arg == "--enable-anti-alias-hud" ) {
props->setBoolValue("/sim/hud/antialiased", true); fgSetBool("/sim/hud/antialiased", true);
} else if ( arg.find( "--control=") != string::npos ) { } else if ( arg.find( "--control=") != string::npos ) {
props->setStringValue("/sim/control-mode", arg.substr(10)); fgSetString("/sim/control-mode", arg.substr(10));
} else if ( arg == "--disable-auto-coordination" ) { } else if ( arg == "--disable-auto-coordination" ) {
props->setBoolValue("/sim/auto-coordination", false); fgSetBool("/sim/auto-coordination", false);
} else if ( arg == "--enable-auto-coordination" ) { } else if ( arg == "--enable-auto-coordination" ) {
props->setBoolValue("/sim/auto-coordination", true); fgSetBool("/sim/auto-coordination", true);
} else if ( arg == "--disable-hud" ) { } else if ( arg == "--disable-hud" ) {
props->setBoolValue("/sim/hud/visibility", false); fgSetBool("/sim/hud/visibility", false);
} else if ( arg == "--enable-hud" ) { } else if ( arg == "--enable-hud" ) {
props->setBoolValue("/sim/hud/visibility", true); fgSetBool("/sim/hud/visibility", true);
} else if ( arg == "--disable-panel" ) { } else if ( arg == "--disable-panel" ) {
props->setBoolValue("/sim/panel/visibility", false); fgSetBool("/sim/panel/visibility", false);
} else if ( arg == "--enable-panel" ) { } else if ( arg == "--enable-panel" ) {
props->setBoolValue("/sim/panel/visibility", true); fgSetBool("/sim/panel/visibility", true);
} else if ( arg == "--disable-sound" ) { } else if ( arg == "--disable-sound" ) {
props->setBoolValue("/sim/sound", false); fgSetBool("/sim/sound", false);
} else if ( arg == "--enable-sound" ) { } else if ( arg == "--enable-sound" ) {
props->setBoolValue("/sim/sound", true); fgSetBool("/sim/sound", true);
} else if ( arg.find( "--airport-id=") != string::npos ) { } else if ( arg.find( "--airport-id=") != string::npos ) {
// NB: changed property name!!! // NB: changed property name!!!
props->setStringValue("/sim/startup/airport-id", arg.substr(13)); fgSetString("/sim/startup/airport-id", arg.substr(13));
} else if ( arg.find( "--lon=" ) != string::npos ) { } else if ( arg.find( "--lon=" ) != string::npos ) {
props->setDoubleValue("/position/longitude", fgSetDouble("/position/longitude",
parse_degree(arg.substr(6))); parse_degree(arg.substr(6)));
props->setStringValue("/position/airport-id", ""); fgSetString("/position/airport-id", "");
} else if ( arg.find( "--lat=" ) != string::npos ) { } else if ( arg.find( "--lat=" ) != string::npos ) {
props->setDoubleValue("/position/latitude", fgSetDouble("/position/latitude",
parse_degree(arg.substr(6))); parse_degree(arg.substr(6)));
props->setStringValue("/position/airport-id", ""); fgSetString("/position/airport-id", "");
} else if ( arg.find( "--altitude=" ) != string::npos ) { } else if ( arg.find( "--altitude=" ) != string::npos ) {
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue(atof(arg.substr(11))); fgSetDouble("/position/altitude", atof(arg.substr(11)));
else else
props->setDoubleValue(atof(arg.substr(11)) * METER_TO_FEET); fgSetDouble("/position/altitude",
atof(arg.substr(11)) * METER_TO_FEET);
} else if ( arg.find( "--uBody=" ) != string::npos ) { } else if ( arg.find( "--uBody=" ) != string::npos ) {
props->setStringValue("/sim/startup/speed-set", "UVW"); fgSetString("/sim/startup/speed-set", "UVW");
// FIXME: the units are totally confused here // FIXME: the units are totally confused here
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/velocities/uBody", atof(arg.substr(8))); fgSetDouble("/velocities/uBody", atof(arg.substr(8)));
else else
props->setDoubleValue("/velocities/uBody", fgSetDouble("/velocities/uBody",
atof(arg.substr(8)) * FEET_TO_METER); atof(arg.substr(8)) * FEET_TO_METER);
} else if ( arg.find( "--vBody=" ) != string::npos ) { } else if ( arg.find( "--vBody=" ) != string::npos ) {
props->setStringValue("/sim/startup/speed-set", "UVW"); fgSetString("/sim/startup/speed-set", "UVW");
// FIXME: the units are totally confused here // FIXME: the units are totally confused here
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/velocities/vBody", atof(arg.substr(8))); fgSetDouble("/velocities/vBody", atof(arg.substr(8)));
else else
props->setDoubleValue("/velocities/vBody", fgSetDouble("/velocities/vBody",
atof(arg.substr(8)) * FEET_TO_METER); atof(arg.substr(8)) * FEET_TO_METER);
} else if ( arg.find( "--wBody=" ) != string::npos ) { } else if ( arg.find( "--wBody=" ) != string::npos ) {
props->setStringValue("/sim/startup/speed-set", "UVW"); fgSetString("/sim/startup/speed-set", "UVW");
// FIXME: the units are totally confused here // FIXME: the units are totally confused here
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/velocities/wBody", atof(arg.substr(8))); fgSetDouble("/velocities/wBody", atof(arg.substr(8)));
else else
props->setDoubleValue("/velocities/wBody", fgSetDouble("/velocities/wBody",
atof(arg.substr(8)) * FEET_TO_METER); atof(arg.substr(8)) * FEET_TO_METER);
} else if ( arg.find( "--vNorth=" ) != string::npos ) { } else if ( arg.find( "--vNorth=" ) != string::npos ) {
props->setStringValue("/sim/startup/speed-set", "NED"); fgSetString("/sim/startup/speed-set", "NED");
// FIXME: the units are totally confused here // FIXME: the units are totally confused here
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/velocities/speed-north", atof(arg.substr(8))); fgSetDouble("/velocities/speed-north", atof(arg.substr(8)));
else else
props->setDoubleValue("/velocities/speed-north", fgSetDouble("/velocities/speed-north",
atof(arg.substr(8)) * FEET_TO_METER); atof(arg.substr(8)) * FEET_TO_METER);
} else if ( arg.find( "--vEast=" ) != string::npos ) { } else if ( arg.find( "--vEast=" ) != string::npos ) {
props->setStringValue("/sim/startup/speed-set", "NED"); fgSetString("/sim/startup/speed-set", "NED");
// FIXME: the units are totally confused here // FIXME: the units are totally confused here
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/velocities/speed-east", atof(arg.substr(8))); fgSetDouble("/velocities/speed-east", atof(arg.substr(8)));
else else
props->setDoubleValue("/velocities/speed-east", fgSetDouble("/velocities/speed-east",
atof(arg.substr(8)) * FEET_TO_METER); atof(arg.substr(8)) * FEET_TO_METER);
} else if ( arg.find( "--vDown=" ) != string::npos ) { } else if ( arg.find( "--vDown=" ) != string::npos ) {
props->setStringValue("/sim/startup/speed-set", "NED"); fgSetString("/sim/startup/speed-set", "NED");
// FIXME: the units are totally confused here // FIXME: the units are totally confused here
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/velocities/speed-down", atof(arg.substr(8))); fgSetDouble("/velocities/speed-down", atof(arg.substr(8)));
else else
props->setDoubleValue("/velocities/speed-down", fgSetDouble("/velocities/speed-down",
atof(arg.substr(8)) * FEET_TO_METER); atof(arg.substr(8)) * FEET_TO_METER);
} else if ( arg.find( "--vc=" ) != string::npos) { } else if ( arg.find( "--vc=" ) != string::npos) {
props->setStringValue("/sim/startup/speed-set", "knots"); fgSetString("/sim/startup/speed-set", "knots");
props->setDoubleValue("/velocities/airspeed", atof(arg.substr(5))); fgSetDouble("/velocities/airspeed", atof(arg.substr(5)));
} else if ( arg.find( "--mach=" ) != string::npos) { } else if ( arg.find( "--mach=" ) != string::npos) {
props->setStringValue("/sim/startup/speed-set", "mach"); fgSetString("/sim/startup/speed-set", "mach");
props->setDoubleValue("/velocities/mach", atof(arg.substr(7))); fgSetDouble("/velocities/mach", atof(arg.substr(7)));
} else if ( arg.find( "--heading=" ) != string::npos ) { } else if ( arg.find( "--heading=" ) != string::npos ) {
props->setDoubleValue("/orientation/heading", atof(arg.substr(10))); fgSetDouble("/orientation/heading", atof(arg.substr(10)));
} else if ( arg.find( "--roll=" ) != string::npos ) { } else if ( arg.find( "--roll=" ) != string::npos ) {
props->setDoubleValue("/orientation/roll", atof(arg.substr(7))); fgSetDouble("/orientation/roll", atof(arg.substr(7)));
} else if ( arg.find( "--pitch=" ) != string::npos ) { } else if ( arg.find( "--pitch=" ) != string::npos ) {
props->setDoubleValue("/orientation/pitch", atof(arg.substr(8))); fgSetDouble("/orientation/pitch", atof(arg.substr(8)));
} else if ( arg.find( "--fg-root=" ) != string::npos ) { } else if ( arg.find( "--fg-root=" ) != string::npos ) {
globals->set_fg_root(arg.substr( 10 )); globals->set_fg_root(arg.substr( 10 ));
} else if ( arg.find( "--fg-scenery=" ) != string::npos ) { } else if ( arg.find( "--fg-scenery=" ) != string::npos ) {
globals->set_fg_scenery(arg.substr( 13 )); globals->set_fg_scenery(arg.substr( 13 ));
} else if ( arg.find( "--fdm=" ) != string::npos ) { } else if ( arg.find( "--fdm=" ) != string::npos ) {
props->setStringValue("/sim/flight-model", arg.substr(6)); fgSetString("/sim/flight-model", arg.substr(6));
// FIXME: reimplement this logic, somehow
// if((flight_model == FGInterface::FG_JSBSIM) && (get_trim_mode() == 0)) {
// props->
// set_trim_mode(1);
// } else {
// set_trim_mode(0);
// }
} else if ( arg.find( "--aircraft=" ) != string::npos ) { } else if ( arg.find( "--aircraft=" ) != string::npos ) {
props->setStringValue("/sim/aircraft", arg.substr(11)); fgSetString("/sim/aircraft", arg.substr(11));
} else if ( arg.find( "--aircraft-dir=" ) != string::npos ) { } else if ( arg.find( "--aircraft-dir=" ) != string::npos ) {
props->setStringValue("/sim/aircraft-dir", arg.substr(15)); fgSetString("/sim/aircraft-dir", arg.substr(15));
} else if ( arg.find( "--model-hz=" ) != string::npos ) { } else if ( arg.find( "--model-hz=" ) != string::npos ) {
props->setIntValue("/sim/model-hz", atoi(arg.substr(11))); fgSetInt("/sim/model-hz", atoi(arg.substr(11)));
} else if ( arg.find( "--speed=" ) != string::npos ) { } else if ( arg.find( "--speed=" ) != string::npos ) {
props->setIntValue("/sim/speed-up", atoi(arg.substr(8))); fgSetInt("/sim/speed-up", atoi(arg.substr(8)));
} else if ( arg.find( "--trim") != string::npos) {
fgSetInt("/sim/startup/trim", true);
} else if ( arg.find( "--notrim") != string::npos) { } else if ( arg.find( "--notrim") != string::npos) {
props->setIntValue("/sim/startup/trim", -1); fgSetInt("/sim/startup/trim", false);
} else if ( arg == "--fog-disable" ) { } else if ( arg == "--fog-disable" ) {
props->setStringValue("/sim/rendering/fog", "disabled"); fgSetString("/sim/rendering/fog", "disabled");
} else if ( arg == "--fog-fastest" ) { } else if ( arg == "--fog-fastest" ) {
props->setStringValue("/sim/rendering/fog", "fastest"); fgSetString("/sim/rendering/fog", "fastest");
} else if ( arg == "--fog-nicest" ) { } else if ( arg == "--fog-nicest" ) {
props->setStringValue("/sim/fog", "nicest"); fgSetString("/sim/fog", "nicest");
} else if ( arg == "--disable-clouds" ) { } else if ( arg == "--disable-clouds" ) {
props->setBoolValue("/environment/clouds/enabled", false); fgSetBool("/environment/clouds/status", false);
} else if ( arg == "--enable-clouds" ) { } else if ( arg == "--enable-clouds" ) {
props->setBoolValue("/environment/clouds/enabled", true); fgSetBool("/environment/clouds/status", true);
} else if ( arg.find( "--clouds-asl=" ) != string::npos ) { } else if ( arg.find( "--clouds-asl=" ) != string::npos ) {
// FIXME: check units // FIXME: check units
if ( props->getStringValue("/sim/startup/units") == "feet" ) if ( fgGetString("/sim/startup/units") == "feet" )
props->setDoubleValue("/environment/clouds/altitude", fgSetDouble("/environment/clouds/altitude",
atof(arg.substr(13)) * FEET_TO_METER); atof(arg.substr(13)) * FEET_TO_METER);
else else
props->setDoubleValue("/environment/clouds/altitude", fgSetDouble("/environment/clouds/altitude",
atof(arg.substr(13))); atof(arg.substr(13)));
} else if ( arg.find( "--fov=" ) != string::npos ) { } else if ( arg.find( "--fov=" ) != string::npos ) {
parse_fov( arg.substr(6) ); parse_fov( arg.substr(6) );
} else if ( arg == "--disable-fullscreen" ) { } else if ( arg == "--disable-fullscreen" ) {
props->setBoolValue("/sim/startup/fullscreen", false); fgSetBool("/sim/startup/fullscreen", false);
} else if ( arg== "--enable-fullscreen") { } else if ( arg== "--enable-fullscreen") {
props->setBoolValue("/sim/startup/fullscreen", true); fgSetBool("/sim/startup/fullscreen", true);
} else if ( arg == "--shading-flat") { } else if ( arg == "--shading-flat") {
props->setBoolValue("/sim/rendering/shading", false); fgSetBool("/sim/rendering/shading", false);
} else if ( arg == "--shading-smooth") { } else if ( arg == "--shading-smooth") {
props->setBoolValue("/sim/rendering/shading", true); fgSetBool("/sim/rendering/shading", true);
} else if ( arg == "--disable-skyblend") { } else if ( arg == "--disable-skyblend") {
props->setBoolValue("/sim/rendering/skyblend", false); fgSetBool("/sim/rendering/skyblend", false);
} else if ( arg== "--enable-skyblend" ) { } else if ( arg== "--enable-skyblend" ) {
props->setBoolValue("/sim/rendering/skyblend", true); fgSetBool("/sim/rendering/skyblend", true);
} else if ( arg == "--disable-textures" ) { } else if ( arg == "--disable-textures" ) {
props->setBoolValue("/sim/rendering/textures", false); fgSetBool("/sim/rendering/textures", false);
} else if ( arg == "--enable-textures" ) { } else if ( arg == "--enable-textures" ) {
props->setBoolValue("/sim/rendering/textures", true); fgSetBool("/sim/rendering/textures", true);
} else if ( arg == "--disable-wireframe" ) { } else if ( arg == "--disable-wireframe" ) {
props->setBoolValue("/sim/rendering/wireframe", false); fgSetBool("/sim/rendering/wireframe", false);
} else if ( arg == "--enable-wireframe" ) { } else if ( arg == "--enable-wireframe" ) {
props->setBoolValue("/sim/rendering/wireframe", true); fgSetBool("/sim/rendering/wireframe", true);
} else if ( arg.find( "--geometry=" ) != string::npos ) { } else if ( arg.find( "--geometry=" ) != string::npos ) {
bool geometry_ok = true; bool geometry_ok = true;
int xsize = 0, ysize = 0; int xsize = 0, ysize = 0;
@ -854,50 +715,50 @@ int FGOptions::parse_option( const string& arg ) {
} else { } else {
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"Setting geometry to " << xsize << 'x' << ysize << '\n'); "Setting geometry to " << xsize << 'x' << ysize << '\n');
props->setIntValue("/sim/startup/xsize", xsize); fgSetInt("/sim/startup/xsize", xsize);
props->setIntValue("/sim/startup/ysize", ysize); fgSetInt("/sim/startup/ysize", ysize);
} }
} else if ( arg.find( "--bpp=" ) != string::npos ) { } else if ( arg.find( "--bpp=" ) != string::npos ) {
string bits_per_pix = arg.substr( 6 ); string bits_per_pix = arg.substr( 6 );
if ( bits_per_pix == "16" ) { if ( bits_per_pix == "16" ) {
props->setIntValue("/sim/rendering/bits-per-pixel", 16); fgSetInt("/sim/rendering/bits-per-pixel", 16);
} else if ( bits_per_pix == "24" ) { } else if ( bits_per_pix == "24" ) {
props->setIntValue("/sim/rendering/bits-per-pixel", 24); fgSetInt("/sim/rendering/bits-per-pixel", 24);
} else if ( bits_per_pix == "32" ) { } else if ( bits_per_pix == "32" ) {
props->setIntValue("/sim/rendering/bits-per-pixel", 32); fgSetInt("/sim/rendering/bits-per-pixel", 32);
} else { } else {
FG_LOG(FG_GENERAL, FG_ALERT, "Unsupported bpp " << bits_per_pix); FG_LOG(FG_GENERAL, FG_ALERT, "Unsupported bpp " << bits_per_pix);
} }
} else if ( arg == "--units-feet" ) { } else if ( arg == "--units-feet" ) {
props->setStringValue("/sim/startup/units", "feet"); fgSetString("/sim/startup/units", "feet");
} else if ( arg == "--units-meters" ) { } else if ( arg == "--units-meters" ) {
props->setStringValue("/sim/startup/units", "meters"); fgSetString("/sim/startup/units", "meters");
} else if ( arg.find( "--time-offset" ) != string::npos ) { } else if ( arg.find( "--time-offset" ) != string::npos ) {
props->setIntValue("/sim/startup/time-offset", fgSetInt("/sim/startup/time-offset",
parse_time_offset( (arg.substr(14)) )); parse_time_offset( (arg.substr(14)) ));
} else if ( arg.find( "--time-match-real") != string::npos ) { } else if ( arg.find( "--time-match-real") != string::npos ) {
props->setStringValue("/sim/startup/time-offset_type", fgSetString("/sim/startup/time-offset_type",
"system-offset"); "system-offset");
} else if ( arg.find( "--time-match-local") != string::npos ) { } else if ( arg.find( "--time-match-local") != string::npos ) {
props->setStringValue("/sim/startup/time-offset_type", fgSetString("/sim/startup/time-offset_type",
"latitude-offset"); "latitude-offset");
} else if ( arg.find( "--start-date-sys=") != string::npos ) { } else if ( arg.find( "--start-date-sys=") != string::npos ) {
props->setIntValue("/sim/startup/time-offset", fgSetInt("/sim/startup/time-offset",
parse_date((arg.substr(17)))); parse_date((arg.substr(17))));
props->setStringValue("/sim/startup/time-offset-type", "system"); fgSetString("/sim/startup/time-offset-type", "system");
} else if ( arg.find( "--start-date-lat=") != string::npos ) { } else if ( arg.find( "--start-date-lat=") != string::npos ) {
props->setIntValue("/sim/startup/time-offset", fgSetInt("/sim/startup/time-offset",
parse_date((arg.substr(17)))); parse_date((arg.substr(17))));
props->setStringValue("/sim/startup/time-offset-type", fgSetString("/sim/startup/time-offset-type",
"latitude"); "latitude");
} else if ( arg.find( "--start-date-gmt=") != string::npos ) { } else if ( arg.find( "--start-date-gmt=") != string::npos ) {
props->setIntValue("/sim/startup/time-offset", fgSetInt("/sim/startup/time-offset",
parse_date((arg.substr(17)))); parse_date((arg.substr(17))));
props->setStringValue("/sim/startup/time-offset-type", "gmt"); fgSetString("/sim/startup/time-offset-type", "gmt");
} else if ( arg == "--hud-tris" ) { } else if ( arg == "--hud-tris" ) {
props->setStringValue("/sim/hud/frame-stat-type", "tris"); fgSetString("/sim/hud/frame-stat-type", "tris");
} else if ( arg == "--hud-culled" ) { } else if ( arg == "--hud-culled" ) {
props->setStringValue("/sim/hud/frame-stat-type", "culled"); fgSetString("/sim/hud/frame-stat-type", "culled");
} else if ( arg.find( "--native=" ) != string::npos ) { } else if ( arg.find( "--native=" ) != string::npos ) {
parse_channel( "native", arg.substr(9) ); parse_channel( "native", arg.substr(9) );
} else if ( arg.find( "--garmin=" ) != string::npos ) { } else if ( arg.find( "--garmin=" ) != string::npos ) {
@ -916,14 +777,14 @@ int FGOptions::parse_option( const string& arg ) {
parse_channel( "joyclient", arg.substr(12) ); parse_channel( "joyclient", arg.substr(12) );
#ifdef FG_NETWORK_OLK #ifdef FG_NETWORK_OLK
} else if ( arg == "--disable-network-olk" ) { } else if ( arg == "--disable-network-olk" ) {
props->setBoolValue("/sim/networking/olk", false); fgSetBool("/sim/networking/olk", false);
} else if ( arg== "--enable-network-olk") { } else if ( arg== "--enable-network-olk") {
props->setBoolValue("/sim/networking/olk", true); fgSetBool("/sim/networking/olk", true);
} else if ( arg == "--net-hud" ) { } else if ( arg == "--net-hud" ) {
props->setBoolValue("/sim/hud/net-display", true); fgSetBool("/sim/hud/net-display", true);
net_hud_display = 1; // FIXME net_hud_display = 1; // FIXME
} else if ( arg.find( "--net-id=") != string::npos ) { } else if ( arg.find( "--net-id=") != string::npos ) {
props->setStringValue("sim/networking/call-sign", arg.substr(9)); fgSetString("sim/networking/call-sign", arg.substr(9));
#endif #endif
} else if ( arg.find( "--prop:" ) == 0 ) { } else if ( arg.find( "--prop:" ) == 0 ) {
string assign = arg.substr(7); string assign = arg.substr(7);
@ -934,7 +795,7 @@ int FGOptions::parse_option( const string& arg ) {
} }
string name = assign.substr(0, pos); string name = assign.substr(0, pos);
string value = assign.substr(pos + 1); string value = assign.substr(pos + 1);
props->setStringValue(name.c_str(), value); fgSetString(name.c_str(), value);
FG_LOG(FG_GENERAL, FG_INFO, "Setting default value of property " FG_LOG(FG_GENERAL, FG_INFO, "Setting default value of property "
<< name << " to \"" << value << '"'); << name << " to \"" << value << '"');
// $$$ begin - added VS Renganathan, 14 Oct 2K // $$$ begin - added VS Renganathan, 14 Oct 2K
@ -955,13 +816,13 @@ int FGOptions::parse_option( const string& arg ) {
(FGViewerRPH *)globals->get_viewmgr()->get_view( 0 ); (FGViewerRPH *)globals->get_viewmgr()->get_view( 0 );
pilot_view->set_view_offset( default_view_offset ); pilot_view->set_view_offset( default_view_offset );
pilot_view->set_goal_view_offset( default_view_offset ); pilot_view->set_goal_view_offset( default_view_offset );
props->setDoubleValue("/sim/startup/view-offset", default_view_offset); fgSetDouble("/sim/startup/view-offset", default_view_offset);
// $$$ end - added VS Renganathan, 14 Oct 2K // $$$ end - added VS Renganathan, 14 Oct 2K
} else if ( arg.find( "--visibility=" ) != string::npos ) { } else if ( arg.find( "--visibility=" ) != string::npos ) {
props->setDoubleValue("/environment/visibility", atof(arg.substr(13))); fgSetDouble("/environment/visibility", atof(arg.substr(13)));
} else if ( arg.find( "--visibility-miles=" ) != string::npos ) { } else if ( arg.find( "--visibility-miles=" ) != string::npos ) {
double visibility = atof(arg.substr(19)) * 5280.0 * FEET_TO_METER; double visibility = atof(arg.substr(19)) * 5280.0 * FEET_TO_METER;
props->setDoubleValue("/environment/visibility", visibility); fgSetDouble("/environment/visibility", visibility);
} else if ( arg.find( "--wind=" ) == 0 ) { } else if ( arg.find( "--wind=" ) == 0 ) {
string val = arg.substr(7); string val = arg.substr(7);
int pos = val.find('@'); int pos = val.find('@');
@ -979,9 +840,9 @@ int FGOptions::parse_option( const string& arg ) {
if (dir >= 360) if (dir >= 360)
dir -= 360; dir -= 360;
dir *= DEG_TO_RAD; dir *= DEG_TO_RAD;
props->setDoubleValue("/environment/wind-north", fgSetDouble("/environment/wind-north",
speed * cos(dir)); speed * cos(dir));
props->setDoubleValue("/environment/wind-east", fgSetDouble("/environment/wind-east",
speed * sin(dir)); speed * sin(dir));
} else if ( arg.find( "--wp=" ) != string::npos ) { } else if ( arg.find( "--wp=" ) != string::npos ) {
parse_wp( arg.substr( 5 ) ); parse_wp( arg.substr( 5 ) );
@ -998,31 +859,35 @@ int FGOptions::parse_option( const string& arg ) {
// Scan the command line options for an fg_root definition and set // Scan the command line options for an fg_root definition and set
// just that. // just that.
int FGOptions::scan_command_line_for_root( int argc, char **argv ) { string
fgScanForRoot (int argc, char **argv)
{
int i = 1; int i = 1;
FG_LOG(FG_GENERAL, FG_INFO, "Processing command line arguments"); FG_LOG(FG_GENERAL, FG_INFO, "Scanning for root: command line");
while ( i < argc ) { while ( i < argc ) {
FG_LOG( FG_GENERAL, FG_DEBUG, "argv[" << i << "] = " << argv[i] ); FG_LOG( FG_GENERAL, FG_DEBUG, "argv[" << i << "] = " << argv[i] );
string arg = argv[i]; string arg = argv[i];
if ( arg.find( "--fg-root=" ) != string::npos ) { if ( arg.find( "--fg-root=" ) != string::npos ) {
globals->set_fg_root(arg.substr( 10 )); return arg.substr( 10 );
} }
i++; i++;
} }
return FG_OPTIONS_OK; return "";
} }
// Scan the config file for an fg_root definition and set just that. // Scan the config file for an fg_root definition and set just that.
int FGOptions::scan_config_file_for_root( const string& path ) { string
fgScanForRoot (const string& path)
{
fg_gzifstream in( path ); fg_gzifstream in( path );
if ( !in.is_open() ) if ( !in.is_open() )
return(FG_OPTIONS_ERROR); return "";
FG_LOG( FG_GENERAL, FG_INFO, "Scanning for root: " << path ); FG_LOG( FG_GENERAL, FG_INFO, "Scanning for root: " << path );
@ -1045,18 +910,19 @@ int FGOptions::scan_config_file_for_root( const string& path ) {
#endif #endif
if ( line.find( "--fg-root=" ) != string::npos ) { if ( line.find( "--fg-root=" ) != string::npos ) {
globals->set_fg_root(line.substr( 10 )); return line.substr( 10 );
} }
in >> skipcomment; in >> skipcomment;
} }
return FG_OPTIONS_OK; return "";
} }
// Parse the command line options // Parse the command line options
int FGOptions::parse_command_line( int argc, char **argv ) { void
fgParseOptions (int argc, char **argv) {
int i = 1; int i = 1;
int result; int result;
@ -1067,21 +933,21 @@ int FGOptions::parse_command_line( int argc, char **argv ) {
result = parse_option(argv[i]); result = parse_option(argv[i]);
if ( (result == FG_OPTIONS_HELP) || (result == FG_OPTIONS_ERROR) ) { if ( (result == FG_OPTIONS_HELP) || (result == FG_OPTIONS_ERROR) ) {
return(result); fgUsage();
exit(-1);
} }
i++; i++;
} }
return FG_OPTIONS_OK;
} }
// Parse config file options // Parse config file options
int FGOptions::parse_config_file( const string& path ) { void
fgParseOptions (const string& path) {
fg_gzifstream in( path ); fg_gzifstream in( path );
if ( !in.is_open() ) if ( !in.is_open() )
return(FG_OPTIONS_ERROR); return;
FG_LOG( FG_GENERAL, FG_INFO, "Processing config file: " << path ); FG_LOG( FG_GENERAL, FG_INFO, "Processing config file: " << path );
@ -1107,17 +973,18 @@ int FGOptions::parse_config_file( const string& path ) {
FG_LOG( FG_GENERAL, FG_ALERT, FG_LOG( FG_GENERAL, FG_ALERT,
"Config file parse error: " << path << " '" "Config file parse error: " << path << " '"
<< line << "'" ); << line << "'" );
fgUsage();
exit(-1); exit(-1);
} }
in >> skipcomment; in >> skipcomment;
} }
return FG_OPTIONS_OK;
} }
// Print usage message // Print usage message
void FGOptions::usage ( void ) { void
fgUsage ()
{
cout << "Usage: fg [ options ... ]" << endl; cout << "Usage: fg [ options ... ]" << endl;
cout << endl; cout << endl;
@ -1269,31 +1136,3 @@ void FGOptions::usage ( void ) {
cout << "\t\tinstances of --wp=" << endl; cout << "\t\tinstances of --wp=" << endl;
cout << "\t--flight-plan=[file]: Read all waypoints from [file]" <<endl; cout << "\t--flight-plan=[file]: Read all waypoints from [file]" <<endl;
} }
// Destructor
FGOptions::~FGOptions( void ) {
}
//
// Temporary methods...
//
string
FGOptions::get_fg_root() const
{
return globals->get_fg_root();
}
string
FGOptions::get_fg_scenery () const
{
return globals->get_fg_scenery();
}
string_list
FGOptions::get_channel_options_list () const
{
return globals->get_channel_options_list();
}

View file

@ -27,472 +27,14 @@
#ifndef __cplusplus #ifndef __cplusplus
# error This library requires C++ # error This library requires C++
#endif
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif #endif
#include <simgear/compiler.h> extern void fgSetDefaults ();
extern string fgScanForRoot (int argc, char ** argv);
#ifdef HAVE_WINDOWS_H extern string fgScanForRoot (const string &file_path);
# include <windows.h> extern void fgParseOptions (int argc, char ** argv);
#endif extern void fgParseOptions (const string &file_path);
extern void fgUsage ();
#include <GL/glut.h>
#include <simgear/xgl/xgl.h>
#if defined(FX) && defined(XMESA)
extern bool global_fullscreen;
#endif
#include <simgear/math/sg_types.hxx>
#include <simgear/timing/sg_time.hxx>
#include <FDM/flight.hxx>
#include "globals.hxx"
#include STL_STRING
#include <vector>
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);
};
#endif /* _OPTIONS_HXX */ #endif /* _OPTIONS_HXX */

View file

@ -46,6 +46,7 @@
#include <Objects/texload.h> #include <Objects/texload.h>
#include "globals.hxx" #include "globals.hxx"
#include "fg_props.hxx"
#include "splash.hxx" #include "splash.hxx"
@ -78,7 +79,7 @@ void fgSplashInit ( void ) {
char num_str[256]; char num_str[256];
sprintf(num_str, "%d", num); sprintf(num_str, "%d", num);
FGPath tpath( globals->get_options()->get_fg_root() ); FGPath tpath( globals->get_fg_root() );
tpath.append( "Textures/Splash" ); tpath.append( "Textures/Splash" );
tpath.concat( num_str ); tpath.concat( num_str );
tpath.concat( ".rgb" ); tpath.concat( ".rgb" );
@ -109,15 +110,15 @@ void fgSplashUpdate ( double progress ) {
int xsize = 480; int xsize = 480;
int ysize = 380; int ysize = 380;
if ( !globals->get_options()->get_xsize() if ( !fgGetInt("/sim/startup/xsize")
|| !globals->get_options()->get_ysize() ) { || !fgGetInt("/sim/startup/ysize") ) {
return; return;
} }
xmin = (globals->get_options()->get_xsize() - xsize) / 2; xmin = (fgGetInt("/sim/startup/xsize") - xsize) / 2;
xmax = xmin + xsize; xmax = xmin + xsize;
ymin = (globals->get_options()->get_ysize() - ysize) / 2; ymin = (fgGetInt("/sim/startup/ysize") - ysize) / 2;
ymax = ymin + ysize; ymax = ymin + ysize;
// first clear the screen; // first clear the screen;
@ -128,8 +129,8 @@ void fgSplashUpdate ( double progress ) {
xglMatrixMode(GL_PROJECTION); xglMatrixMode(GL_PROJECTION);
xglPushMatrix(); xglPushMatrix();
xglLoadIdentity(); xglLoadIdentity();
gluOrtho2D(0, globals->get_options()->get_xsize(), gluOrtho2D(0, fgGetInt("/sim/startup/xsize"),
0, globals->get_options()->get_ysize()); 0, fgGetInt("/sim/startup/ysize"));
xglMatrixMode(GL_MODELVIEW); xglMatrixMode(GL_MODELVIEW);
xglPushMatrix(); xglPushMatrix();
xglLoadIdentity(); xglLoadIdentity();

View file

@ -64,6 +64,7 @@ extern "C" {
#include <plib/ssg.h> #include <plib/ssg.h>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
int net_blast_toggle, net_hud_display, net_is_registered; int net_blast_toggle, net_hud_display, net_is_registered;
char *net_callsign, *FGFS_host; char *net_callsign, *FGFS_host;
@ -79,7 +80,7 @@ char *fg_net_init( ssgRoot *orig_scene ){
// We enable display of netinfos only if user wishes it via cmd-line param // We enable display of netinfos only if user wishes it via cmd-line param
net_hud_display = (net_hud_display == 0) ? 0 : 1; net_hud_display = (net_hud_display == 0) ? 0 : 1;
// Get pilot's name from options, can be modified at runtime via menu // Get pilot's name from options, can be modified at runtime via menu
net_callsign = (char *) globals->get_options()->get_net_id().c_str(); net_callsign = (char *)(fgGetString("/sim/networking/call-sign").c_str());
// Disable Blast Mode -1 = Disable, 0 = Enable // Disable Blast Mode -1 = Disable, 0 = Enable
net_blast_toggle = -1; net_blast_toggle = -1;
// We start unregistered, we reg. later via menu to fgd // We start unregistered, we reg. later via menu to fgd

View file

@ -47,6 +47,7 @@
#include <Include/general.hxx> #include <Include/general.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <Scenery/tileentry.hxx> #include <Scenery/tileentry.hxx>
#include "matlib.hxx" #include "matlib.hxx"
@ -128,14 +129,14 @@ bool FGMaterialLib::load( const string& mpath ) {
in >> m; in >> m;
// build the ssgSimpleState // build the ssgSimpleState
FGPath tex_path( globals->get_options()->get_fg_root() ); FGPath tex_path( globals->get_fg_root() );
tex_path.append( "Textures.high" ); tex_path.append( "Textures.high" );
FGPath tmp_path = tex_path; FGPath tmp_path = tex_path;
tmp_path.append( m.get_texture_name() ); tmp_path.append( m.get_texture_name() );
if ( ! local_file_exists(tmp_path.str()) if ( ! local_file_exists(tmp_path.str())
|| general.get_glMaxTexSize() < 512 ) { || general.get_glMaxTexSize() < 512 ) {
tex_path = FGPath( globals->get_options()->get_fg_root() ); tex_path = FGPath( globals->get_fg_root() );
tex_path.append( "Textures" ); tex_path.append( "Textures" );
} }
@ -143,14 +144,14 @@ bool FGMaterialLib::load( const string& mpath ) {
<< material_name << " (" << tex_path.c_str() << ")"); << material_name << " (" << tex_path.c_str() << ")");
GLenum shade_model = GL_SMOOTH; GLenum shade_model = GL_SMOOTH;
if ( globals->get_options()->get_shading() == 1 ) { if ( fgGetBool("/sim/rendering/shading") ) {
shade_model = GL_SMOOTH; shade_model = GL_SMOOTH;
} else { } else {
shade_model = GL_FLAT; shade_model = GL_FLAT;
} }
m.build_ssg_state( tex_path.str(), shade_model, m.build_ssg_state( tex_path.str(), shade_model,
globals->get_options()->get_textures() ); fgGetBool("/sim/rendering/textures") );
#if EXTRA_DEBUG #if EXTRA_DEBUG
m.dump_info(); m.dump_info();
@ -210,14 +211,14 @@ bool FGMaterialLib::add_item ( const string &mat_name, const string &full_path )
#endif #endif
GLenum shade_model = GL_SMOOTH; GLenum shade_model = GL_SMOOTH;
if ( globals->get_options()->get_shading() == 1 ) { if ( fgGetBool("/sim/rendering/shading") ) {
shade_model = GL_SMOOTH; shade_model = GL_SMOOTH;
} else { } else {
shade_model = GL_FLAT; shade_model = GL_FLAT;
} }
m.build_ssg_state( tex_path, shade_model, m.build_ssg_state( tex_path, shade_model,
globals->get_options()->get_textures() ); fgGetBool("/sim/rendering/textures") );
material_lib.matlib[mat_name] = m; material_lib.matlib[mat_name] = m;

View file

@ -56,6 +56,7 @@
#include <simgear/misc/texcoord.hxx> #include <simgear/misc/texcoord.hxx>
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <Scenery/tileentry.hxx> #include <Scenery/tileentry.hxx>
#include "matlib.hxx" #include "matlib.hxx"
@ -241,9 +242,6 @@ ssgBranch *fgGenTile( const string& path, FGTileEntry *t) {
leaf->setState( state ); leaf->setState( state );
tile->addKid( leaf ); tile->addKid( leaf );
// if ( globals->get_options()->get_clouds() ) {
// fgGenCloudTile(path, t, tile);
// }
return tile; return tile;
} }
@ -386,7 +384,7 @@ static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t,
return NULL; return NULL;
} }
shading = globals->get_options()->get_shading(); shading = fgGetBool("/sim/rendering/shading");
if ( is_base ) { if ( is_base ) {
t->ncount = 0; t->ncount = 0;
@ -791,11 +789,6 @@ static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t,
"Loaded " << path << " in " "Loaded " << path << " in "
<< stopwatch.elapsedSeconds() << " seconds" ); << stopwatch.elapsedSeconds() << " seconds" );
// Generate a cloud layer above the tiles
// if ( globals->get_options()->get_clouds() ) {
// fgGenCloudTile(path, t, tile);
// }
return tile; return tile;
} }

View file

@ -218,10 +218,10 @@ void FGNewCache::fill_in( const SGBucket& b ) {
e->tile_bucket = b; e->tile_bucket = b;
FGPath tile_path; FGPath tile_path;
if ( globals->get_options()->get_fg_scenery() != "" ) { if ( globals->get_fg_scenery() != "" ) {
tile_path.set( globals->get_options()->get_fg_scenery() ); tile_path.set( globals->get_fg_scenery() );
} else { } else {
tile_path.set( globals->get_options()->get_fg_root() ); tile_path.set( globals->get_fg_root() );
tile_path.append( "Scenery" ); tile_path.append( "Scenery" );
} }
tile_path.append( b.gen_base_path() ); tile_path.append( b.gen_base_path() );

View file

@ -75,7 +75,7 @@ void fgLIGHT::Init( void ) {
"Initializing Lighting interpolation tables." ); "Initializing Lighting interpolation tables." );
// build the path name to the ambient lookup table // build the path name to the ambient lookup table
FGPath path( globals->get_options()->get_fg_root() ); FGPath path( globals->get_fg_root() );
FGPath ambient = path; FGPath ambient = path;
ambient.append( "Lighting/ambient" ); ambient.append( "Lighting/ambient" );
FGPath diffuse = path; FGPath diffuse = path;

View file

@ -39,7 +39,7 @@
// periodic time updater wrapper // periodic time updater wrapper
void fgUpdateLocalTime() { void fgUpdateLocalTime() {
FGPath zone( globals->get_options()->get_fg_root() ); FGPath zone( globals->get_fg_root() );
zone.append( "Timezone" ); zone.append( "Timezone" );
globals->get_time_params()->updateLocal( cur_fdm_state->get_Longitude(), globals->get_time_params()->updateLocal( cur_fdm_state->get_Longitude(),