From: ehofman Date: Sun, 30 Mar 2003 12:49:05 +0000 (+0000) Subject: Second update in attempt to create an aircraft selection dialog X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=cf7839a67b3f41a1b788902edce03fb9ede0b7a7;p=flightgear.git Second update in attempt to create an aircraft selection dialog New panels are loaded now New 3D model gets loaded Reinitialize more subsystems Add reinit() to FGFX, sound gets reinitialized Still a lot needs to be done though. --- diff --git a/src/Aircraft/aircraft.cxx b/src/Aircraft/aircraft.cxx index ac0a8fb16..9b667c8f7 100644 --- a/src/Aircraft/aircraft.cxx +++ b/src/Aircraft/aircraft.cxx @@ -35,12 +35,18 @@ #include
#include
+#include
+#include +#include +#include +#include +#include +#include +#include #include
#include "aircraft.hxx" -extern void fgInitFDM(void); -class FGFX; // This is a record containing all the info for the aircraft currently // being operated @@ -149,11 +155,19 @@ fgLoadAircraft (const SGPropertyNode * arg) fgSetBool("/sim/freeze/master", true); } + // TODO: + // remove electrical system cur_fdm_state->unbind(); + // Save the selected aircraft model since restoreInitialState + // will obverwrite it. + // string aircraft = fgGetString("/sim/aircraft", ""); globals->restoreInitialState(); + fgSetString("/sim/aircraft", aircraft.c_str()); + fgSetString("/sim/panel/path", "Aircraft/c172/Panels/c172-vfr-panel.xml"); + if ( aircraft.size() > 0 ) { SGPath aircraft_path(globals->get_fg_root()); aircraft_path.append("Aircraft"); @@ -173,19 +187,56 @@ fgLoadAircraft (const SGPropertyNode * arg) SG_LOG(SG_INPUT, SG_ALERT, "No default aircraft specified"); } - // Update the FDM + // Initialize the (new) 2D panel. + // + string panel_path = fgGetString("/sim/panel/path", + "Aircraft/c172/Panels/c172-vfr-panel.xml"); + + FGPanel *panel = fgReadPanel(panel_path); + if (panel == 0) { + SG_LOG( SG_INPUT, SG_ALERT, + "Error reading new panel from " << panel_path ); + } else { + SG_LOG( SG_INPUT, SG_INFO, "Loaded new panel from " << panel_path ); + globals->get_current_panel()->unbind(); + delete globals->get_current_panel(); + globals->set_current_panel( panel ); + globals->get_current_panel()->init(); + globals->get_current_panel()->bind(); + globals->get_current_panel()->update(0); + } + + // Load the new 3D model + // + globals->get_aircraft_model()->unbind(); + delete globals->get_aircraft_model(); + globals->set_aircraft_model(new FGAircraftModel); + globals->get_aircraft_model()->init(); + globals->get_aircraft_model()->bind(); + + // TODO: + // load new electrical system // - fgSetString("/sim/aircraft", aircraft.c_str()); - fgInitFDM(); // update our position based on current presets fgInitPosition(); + // Update the HUD + fgHUDInit(¤t_aircraft); + SGTime *t = globals->get_time_params(); delete t; t = fgInitTime(); globals->set_time_params( t ); + // Reinitialize some subsystems + // + globals->get_viewmgr()->reinit(); + globals->get_controls()->reset_all(); + globals->get_autopilot()->reset(); + globals->get_aircraft_model()->reinit(); + globals->get_subsystem("fx")->reinit(); + fgReInitSubsystems(); if ( !freeze ) { diff --git a/src/Cockpit/panel.hxx b/src/Cockpit/panel.hxx index 80f80c6d0..12e1a27c9 100644 --- a/src/Cockpit/panel.hxx +++ b/src/Cockpit/panel.hxx @@ -563,14 +563,6 @@ public: bool fgPanelVisible (); - -//////////////////////////////////////////////////////////////////////// -// The current panel, if any. -//////////////////////////////////////////////////////////////////////// - -extern FGPanel * current_panel; // TODO: move to globals - - #endif // __PANEL_HXX diff --git a/src/Cockpit/panel_io.cxx b/src/Cockpit/panel_io.cxx index f6b114645..7bb8f2726 100644 --- a/src/Cockpit/panel_io.cxx +++ b/src/Cockpit/panel_io.cxx @@ -44,7 +44,7 @@ #include -#include "panel.hxx" +// #include "panel.hxx" #include "panel_io.hxx" //built-in layers diff --git a/src/Cockpit/panel_io.hxx b/src/Cockpit/panel_io.hxx index ab5dba87b..8c38f8d99 100644 --- a/src/Cockpit/panel_io.hxx +++ b/src/Cockpit/panel_io.hxx @@ -35,6 +35,8 @@ SG_USING_STD(istream); +class FGPanel; + extern FGPanel * fgReadPanel (istream &input); extern FGPanel * fgReadPanel (const string &relative_path); diff --git a/src/Sound/fg_fx.cxx b/src/Sound/fg_fx.cxx index 527a5f3a4..d13a56f81 100644 --- a/src/Sound/fg_fx.cxx +++ b/src/Sound/fg_fx.cxx @@ -83,6 +83,13 @@ FGFX::init() } } +void +FGFX::reinit() +{ + _sound.clear(); + init(); +}; + void FGFX::bind () { diff --git a/src/Sound/fg_fx.hxx b/src/Sound/fg_fx.hxx index e3c1e7bc6..1dcfad9cc 100644 --- a/src/Sound/fg_fx.hxx +++ b/src/Sound/fg_fx.hxx @@ -44,6 +44,7 @@ public: virtual ~FGFX (); virtual void init (); + virtual void reinit (); virtual void bind (); virtual void unbind (); virtual void update (double dt); diff --git a/src/Sound/fg_sound.hxx b/src/Sound/fg_sound.hxx index 4d4824bb4..d8f71357d 100644 --- a/src/Sound/fg_sound.hxx +++ b/src/Sound/fg_sound.hxx @@ -53,6 +53,8 @@ public: virtual void unbind (); virtual void update (double dt); + void stop(); + protected: enum { MAXPROP=5 }; diff --git a/src/Sound/soundmgr.cxx b/src/Sound/soundmgr.cxx index 94e3099a1..b303a11cd 100644 --- a/src/Sound/soundmgr.cxx +++ b/src/Sound/soundmgr.cxx @@ -140,6 +140,7 @@ FGSoundMgr::~FGSoundMgr() { FGSimpleSound *s = sound_current->second; audio_sched->stopSample(s->get_sample()); + delete s->get_sample(); delete s; } @@ -163,6 +164,8 @@ void FGSoundMgr::init() { sample_map_iterator sample_end = samples.end(); for ( ; sample_current != sample_end; ++sample_current ) { sample_ref *sr = sample_current->second; + + audio_sched->stopSample(sr->sample); delete sr->sample; delete sr; } @@ -175,6 +178,8 @@ void FGSoundMgr::init() { sound_map_iterator sound_end = sounds.end(); for ( ; sound_current != sound_end; ++sound_current ) { FGSimpleSound *s = sound_current->second; + + audio_sched->stopSample(s->get_sample()); delete s->get_sample(); delete s; } @@ -182,11 +187,13 @@ void FGSoundMgr::init() { } + void FGSoundMgr::bind () { // no properties yet } + void FGSoundMgr::unbind () { // no properties yet diff --git a/src/Sound/soundmgr.hxx b/src/Sound/soundmgr.hxx index 3e89b225b..0cfa7f468 100644 --- a/src/Sound/soundmgr.hxx +++ b/src/Sound/soundmgr.hxx @@ -123,7 +123,7 @@ public: /** - * Initialize the sound manager. + * (re) initialize the sound manager. */ void init(); @@ -161,6 +161,9 @@ public: // is audio working? inline bool is_working() const { return !audio_sched->notWorking(); } + // reinitialize the sound manager + inline void reinit() { init(); } + // add a sound effect, return true if successful bool add( FGSimpleSound *sound, const string& refname);