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:
parent
a701a2be4a
commit
576432ec75
43 changed files with 831 additions and 1516 deletions
|
@ -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(),
|
||||||
|
|
|
@ -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 ) {
|
||||||
|
|
|
@ -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") );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" );
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 ?
|
||||||
|
|
106
src/Main/bfi.cxx
106
src/Main/bfi.cxx
|
@ -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).
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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() );
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue