1
0
Fork 0

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.
This commit is contained in:
ehofman 2003-03-30 12:49:05 +00:00
parent 4b62426109
commit cf7839a67b
9 changed files with 80 additions and 15 deletions

View file

@ -35,12 +35,18 @@
#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <Main/viewmgr.hxx>
#include <Sound/fg_fx.hxx>
#include <Sound/soundmgr.hxx>
#include <Cockpit/panel.hxx>
#include <Cockpit/hud.hxx>
#include <Cockpit/panel_io.hxx>
#include <Model/acmodel.hxx>
#include <Autopilot/newauto.hxx>
#include <Main/fgfs.hxx>
#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(&current_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 ) {

View file

@ -563,14 +563,6 @@ public:
bool fgPanelVisible ();
////////////////////////////////////////////////////////////////////////
// The current panel, if any.
////////////////////////////////////////////////////////////////////////
extern FGPanel * current_panel; // TODO: move to globals
#endif // __PANEL_HXX

View file

@ -44,7 +44,7 @@
#include <GUI/gui.h>
#include "panel.hxx"
// #include "panel.hxx"
#include "panel_io.hxx"
//built-in layers

View file

@ -35,6 +35,8 @@
SG_USING_STD(istream);
class FGPanel;
extern FGPanel * fgReadPanel (istream &input);
extern FGPanel * fgReadPanel (const string &relative_path);

View file

@ -83,6 +83,13 @@ FGFX::init()
}
}
void
FGFX::reinit()
{
_sound.clear();
init();
};
void
FGFX::bind ()
{

View file

@ -44,6 +44,7 @@ public:
virtual ~FGFX ();
virtual void init ();
virtual void reinit ();
virtual void bind ();
virtual void unbind ();
virtual void update (double dt);

View file

@ -53,6 +53,8 @@ public:
virtual void unbind ();
virtual void update (double dt);
void stop();
protected:
enum { MAXPROP=5 };

View file

@ -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

View file

@ -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);