1
0
Fork 0

Added support for Christian Mayers new weather subsystem.

Added support for david@megginson.com's mouse yoke patch.
Added a flight model acceleration options (controlled by a/A keys.)
This commit is contained in:
curt 1999-08-10 03:44:47 +00:00
parent 06ee5a4f0a
commit 9e3edfb47b
6 changed files with 91 additions and 14 deletions

View file

@ -39,10 +39,12 @@ fgfs_LDADD = \
$(top_builddir)/Simulator/Objects/libObjects.a \
$(top_builddir)/Simulator/Time/libTime.a \
$(top_builddir)/Simulator/Weather/libWeather.a \
$(top_builddir)/Simulator/WeatherCM/libWeatherCM.a \
$(top_builddir)/Simulator/Joystick/libJoystick.a \
$(SERIAL_LIBS) \
$(top_builddir)/Lib/Math/libMath.a \
$(top_builddir)/Lib/Bucket/libBucket.a \
$(top_builddir)/Lib/Voronoi/libVoronoi.a \
$(top_builddir)/Lib/Debug/libDebug.a \
-lpu -lfnt -lssg -lsg \
$(top_builddir)/Lib/Misc/libMisc.a \

View file

@ -70,7 +70,8 @@
#include <Time/light.hxx>
#include <Time/sunpos.hxx>
#include <Time/moonpos.hxx>
#include <Weather/weather.hxx>
// #include <Weather/weather.hxx>
#include <WeatherCM/FGLocalWeatherDatabase.h>
#include "fg_init.hxx"
#include "options.hxx"
@ -405,7 +406,21 @@ bool fgInitSubsystems( void ) {
fgEVENT::FG_EVENT_READY, 30000 );
// Initialize the weather modeling subsystem
current_weather.Init();
// current_weather.Init();
// Initialize the WeatherDatabase
FG_LOG(FG_GENERAL, FG_INFO, "Creating LocalWeatherDatabase");
FGLocalWeatherDatabase::theFGLocalWeatherDatabase =
new FGLocalWeatherDatabase(
Point3D( current_aircraft.fdm_state->get_Latitude(),
current_aircraft.fdm_state->get_Longitude(),
current_aircraft.fdm_state->get_Altitude()
* FEET_TO_METER) );
WeatherDatabase = FGLocalWeatherDatabase::theFGLocalWeatherDatabase;
// register the periodic update of the weather
global_events.Register( "weather update", fgUpdateWeatherDatabase,
fgEVENT::FG_EVENT_READY, 30000);
// Initialize the Cockpit subsystem
if( fgCockpitInit( &current_aircraft )) {

View file

@ -53,7 +53,8 @@
#include <Objects/materialmgr.hxx>
#include <Time/fg_time.hxx>
#include <Time/light.hxx>
#include <Weather/weather.hxx>
// #include <Weather/weather.hxx>
#include <WeatherCM/FGLocalWeatherDatabase.h>
#include "keyboard.hxx"
#include "options.hxx"
@ -76,14 +77,15 @@ void GLUTkey(unsigned char k, int x, int y) {
FGInterface *f;
FGTime *t;
FGView *v;
FGWeather *w;
// FGWeather *w;
float fov, tmp;
static bool winding_ccw = true;
int speed;
f = current_aircraft.fdm_state;
t = FGTime::cur_time_params;
v = &current_view;
w = &current_weather;
// w = &current_weather;
FG_LOG( FG_INPUT, FG_DEBUG, "Key hit = " << k );
if ( puKeyboard(k, PU_DOWN) ) {
@ -138,6 +140,14 @@ void GLUTkey(unsigned char k, int x, int y) {
case 57: // numeric keypad 9
v->set_goal_view_offset( FG_PI * 1.75 );
return;
case 65: // A key
speed = current_options.get_speed_up();
speed--;
if ( speed < 1 ) {
speed = 1;
}
current_options.set_speed_up( speed );
return;
case 72: // H key
// status = current_options.get_hud_status();
// current_options.set_hud_status(!status);
@ -177,9 +187,12 @@ void GLUTkey(unsigned char k, int x, int y) {
v->force_update_fov_math();
return;
case 90: // Z key
tmp = w->get_visibility(); // in meters
// tmp = w->get_visibility(); // in meters
// tmp /= 1.10;
// w->set_visibility( tmp );
tmp = WeatherDatabase->getWeatherVisibility();
tmp /= 1.10;
w->set_visibility( tmp );
WeatherDatabase->setWeatherVisibility( tmp );
return;
}
} else {
@ -244,6 +257,11 @@ void GLUTkey(unsigned char k, int x, int y) {
controls.move_throttle( FGControls::ALL_ENGINES, -0.01 );
}
return;
case 97: // a key
speed = current_options.get_speed_up();
speed++;
current_options.set_speed_up( speed );
return;
case 98: // b key
int b_ret;
double b_set;
@ -290,9 +308,12 @@ void GLUTkey(unsigned char k, int x, int y) {
v->force_update_fov_math();
return;
case 122: // z key
tmp = w->get_visibility(); // in meters
// tmp = w->get_visibility(); // in meters
// tmp *= 1.10;
// w->set_visibility( tmp );
tmp = WeatherDatabase->getWeatherVisibility();
tmp *= 1.10;
w->set_visibility( tmp );
WeatherDatabase->setWeatherVisibility( tmp );
return;
case 27: // ESC
// if( fg_DebugOutput ) {

View file

@ -91,7 +91,8 @@
#include <Time/fg_time.hxx>
#include <Time/fg_timer.hxx>
#include <Time/sunpos.hxx>
#include <Weather/weather.hxx>
// #include <Weather/weather.hxx>
// #include <WeatherCM/FGLocalWeatherDatabase.h>
#include "fg_init.hxx"
#include "keyboard.hxx"
@ -473,7 +474,9 @@ void fgUpdateTimeDepCalcs(int multi_loop, int remainder) {
// printf("updating flight model x %d\n", multi_loop);
fgFDMUpdate( current_options.get_flight_model(),
cur_fdm_state, multi_loop * 1, remainder );
cur_fdm_state,
multi_loop * current_options.get_speed_up(),
remainder );
} else {
fgFDMUpdate( current_options.get_flight_model(),
cur_fdm_state, 0, remainder );
@ -556,14 +559,16 @@ static void fgMainLoop( void ) {
#if defined( ENABLE_PLIB_JOYSTICK )
// Read joystick and update control settings
fgJoystickRead();
if ( current_options.get_control_mode() == fgOPTIONS::FG_JOYSTICK ) {
fgJoystickRead();
}
#elif defined( ENABLE_GLUT_JOYSTICK )
// Glut joystick support works by feeding a joystick handler
// function to glut. This is taken care of once in the joystick
// init routine and we don't have to worry about it again.
#endif
current_weather.Update();
// current_weather.Update();
// Fix elevation. I'm just sticking this here for now, it should
// probably move eventually

View file

@ -152,6 +152,7 @@ fgOPTIONS::fgOPTIONS() :
intro_music(1),
mouse_pointer(0),
pause(0),
control_mode(FG_JOYSTICK),
// Features
hud_status(1),
@ -159,7 +160,8 @@ fgOPTIONS::fgOPTIONS() :
sound(1),
// Flight Model options
flight_model(FGInterface::FG_LARCSIM),
flight_model( FGInterface::FG_LARCSIM ),
speed_up( 1 ),
// Rendering options
fog(FG_FOG_NICEST), // nicest
@ -433,6 +435,18 @@ long int fgOPTIONS::parse_date( const string& date)
// parse degree in the form of [+/-]hhh:mm:ss
void fgOPTIONS::parse_control( const string& mode ) {
if ( mode == "joystick" ) {
control_mode = FG_JOYSTICK;
} else if ( mode == "mouse" ) {
control_mode = FG_MOUSE;
} else {
control_mode = FG_KEYBOARD;
}
}
/// parse degree in the form of [+/-]hhh:mm:ss
double
fgOPTIONS::parse_degree( const string& degree_str) {
double result = parse_time( degree_str );
@ -570,6 +584,8 @@ int fgOPTIONS::parse_option( const string& arg ) {
pause = false;
} else if ( arg == "--enable-pause" ) {
pause = true;
} else if ( arg.find( "--control=") != string::npos ) {
parse_control( arg.substr(10) );
} else if ( arg == "--disable-hud" ) {
hud_status = false;
} else if ( arg == "--enable-hud" ) {
@ -623,6 +639,8 @@ int fgOPTIONS::parse_option( const string& arg ) {
fg_root = arg.substr( 10 );
} else if ( arg.find( "--fdm=" ) != string::npos ) {
flight_model = parse_fdm( arg.substr(6) );
} else if ( arg.find( "--speed=" ) != string::npos ) {
speed_up = atoi( arg.substr(8) );
} else if ( arg == "--fog-disable" ) {
fog = FG_FOG_DISABLED;
} else if ( arg == "--fog-fastest" ) {
@ -778,6 +796,7 @@ void fgOPTIONS::usage ( void ) {
printf("\t\tfull screen voodoo/voodoo-II based cards.)\n");
printf("\t--disable-pause: start out in an active state\n");
printf("\t--enable-pause: start out in a paused state\n");
printf("\t--control=mode: primary control mode (joystick, keyboard, mouse)\n");
printf("\n");
printf("Features:\n");
@ -791,6 +810,7 @@ void fgOPTIONS::usage ( void ) {
printf("Flight Model:\n");
printf("\t--fdm=abcd: one of slew, jsb, larcsim, or external\n");
printf("\t--speed=n: run the FDM this much faster than real time\n");
printf("\n");
printf("Initial Position and Orientation:\n");

View file

@ -87,6 +87,13 @@ public:
FG_RADIUS_MAX = 4
};
enum fgControlMode
{
FG_JOYSTICK = 0,
FG_KEYBOARD = 1,
FG_MOUSE = 2
};
private:
// The flight gear "root" directory
@ -110,6 +117,7 @@ private:
bool intro_music; // play introductory music
int mouse_pointer; // show mouse pointer
bool pause; // pause intially enabled/disabled
fgControlMode control_mode; // primary control mode
// Features
bool hud_status; // HUD on/off
@ -118,6 +126,7 @@ private:
// Flight Model options
int flight_model; // Flight Model: FG_SLEW, FG_LARCSIM, etc.
int speed_up; // Sim mechanics run this much faster than normal speed
// Rendering options
fgFogKind fog; // Fog nicest/fastest/disabled
@ -192,10 +201,14 @@ public:
inline bool get_intro_music() const { return intro_music; }
inline int get_mouse_pointer() const { return mouse_pointer; }
inline bool get_pause() const { return pause; }
inline fgControlMode get_control_mode() const { return control_mode; }
inline void set_control_mode( fgControlMode mode ) { control_mode = mode; }
inline bool get_hud_status() const { return hud_status; }
inline bool get_panel_status() const { return panel_status; }
inline bool get_sound() const { return sound; }
inline int get_flight_model() const { return flight_model; }
inline int get_speed_up() const { return speed_up; }
inline void set_speed_up( int speed ) { speed_up = speed; }
inline bool fog_enabled() const { return fog != FG_FOG_DISABLED; }
inline fgFogKind get_fog() const { return fog; }
inline double get_fov() const { return fov; }
@ -244,6 +257,7 @@ public:
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 );