]> git.mxchange.org Git - flightgear.git/blobdiff - src/Aircraft/aircraft.cxx
Remove an unneeded #include.
[flightgear.git] / src / Aircraft / aircraft.cxx
index 6679d6486c8f3e578ed1c470807a07c91f9a8049..23da8375b5e2e743eb3b7922c184c12d406e4ac8 100644 (file)
 #include <string.h>            // strdup
 
 #include <plib/ul.h>
-#include <plib/ssg.h>
 
 #include <simgear/constants.h>
 #include <simgear/debug/logstream.hxx>
 #include <simgear/misc/sg_path.hxx>
-#include <simgear/misc/commands.hxx>
-#include <simgear/misc/exception.hxx>
+#include <simgear/structure/commands.hxx>
+#include <simgear/structure/exception.hxx>
 
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
-#include <Main/fgfs.hxx>
+#include <Main/viewmgr.hxx>
+#include <Cockpit/panel.hxx>
+#include <Cockpit/hud.hxx>
+#include <Cockpit/panel_io.hxx>
+#include <Model/acmodel.hxx>
 
 #include "aircraft.hxx"
 
-extern void fgInitFDM(void);
-class FGFX;
 
 // This is a record containing all the info for the aircraft currently
 // being operated
@@ -84,7 +85,7 @@ void fgAircraftOutputCurrent(fgAIRCRAFT *a) {
 // Show available aircraft types
 void fgReadAircraft(void) {
 
-   SGPropertyNode *aircraft_types = fgGetNode("/sim/aircraft-types", true);
+   // SGPropertyNode *aircraft_types = fgGetNode("/sim/aircraft-types", true);
 
    SGPath path( globals->get_fg_root() );
    path.append("Aircraft");
@@ -121,10 +122,8 @@ void fgReadAircraft(void) {
              SGPropertyNode *desc = node->getNode("description");
 
              if (desc) {
-#endif
-                SGPropertyNode *aircraft =
+                 SGPropertyNode *aircraft =
                                 aircraft_types->getChild(dire->d_name, 0, true);
-#if 0
 
                 aircraft->setStringValue(strdup(desc->getStringValue()));
              }
@@ -138,7 +137,7 @@ void fgReadAircraft(void) {
    globals->get_commands()->addCommand("load-aircraft", fgLoadAircraft);
 }
 
-static inline bool
+bool
 fgLoadAircraft (const SGPropertyNode * arg)
 {
     static const SGPropertyNode *master_freeze
@@ -149,11 +148,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 +180,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_aircraft_model()->reinit();
+    globals->get_subsystem("fx")->reinit();
+    globals->get_subsystem("xml-autopilot")->reinit();
+
     fgReInitSubsystems();
 
     if ( !freeze ) {