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:
parent
4b62426109
commit
cf7839a67b
9 changed files with 80 additions and 15 deletions
|
@ -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(¤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 ) {
|
||||
|
|
|
@ -563,14 +563,6 @@ public:
|
|||
bool fgPanelVisible ();
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// The current panel, if any.
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern FGPanel * current_panel; // TODO: move to globals
|
||||
|
||||
|
||||
|
||||
#endif // __PANEL_HXX
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
|
||||
#include <GUI/gui.h>
|
||||
|
||||
#include "panel.hxx"
|
||||
// #include "panel.hxx"
|
||||
#include "panel_io.hxx"
|
||||
|
||||
//built-in layers
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
|
||||
SG_USING_STD(istream);
|
||||
|
||||
class FGPanel;
|
||||
|
||||
extern FGPanel * fgReadPanel (istream &input);
|
||||
extern FGPanel * fgReadPanel (const string &relative_path);
|
||||
|
||||
|
|
|
@ -83,6 +83,13 @@ FGFX::init()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
FGFX::reinit()
|
||||
{
|
||||
_sound.clear();
|
||||
init();
|
||||
};
|
||||
|
||||
void
|
||||
FGFX::bind ()
|
||||
{
|
||||
|
|
|
@ -44,6 +44,7 @@ public:
|
|||
virtual ~FGFX ();
|
||||
|
||||
virtual void init ();
|
||||
virtual void reinit ();
|
||||
virtual void bind ();
|
||||
virtual void unbind ();
|
||||
virtual void update (double dt);
|
||||
|
|
|
@ -53,6 +53,8 @@ public:
|
|||
virtual void unbind ();
|
||||
virtual void update (double dt);
|
||||
|
||||
void stop();
|
||||
|
||||
protected:
|
||||
|
||||
enum { MAXPROP=5 };
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue