]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_commands.cxx
Merge branch 'tat/configure' into next
[flightgear.git] / src / Main / fg_commands.cxx
index 96e7175afcd0f7e371272349a5ae84059368ab04..e92cb0f52dc443b227f3f950e051fdaa5103725d 100644 (file)
 #include <simgear/debug/logstream.hxx>
 #include <simgear/math/sg_random.h>
 #include <simgear/scene/material/mat.hxx>
+#include <simgear/scene/material/matlib.hxx>
 #include <simgear/structure/exception.hxx>
 #include <simgear/structure/commands.hxx>
 #include <simgear/props/props.hxx>
+#include <simgear/structure/event_mgr.hxx>
 
 #include <Cockpit/panel.hxx>
 #include <Cockpit/panel_io.hxx>
@@ -37,6 +39,7 @@
 
 #include "fg_init.hxx"
 #include "fg_io.hxx"
+#include "fg_os.hxx"
 #include "fg_commands.hxx"
 #include "fg_props.hxx"
 #include "globals.hxx"
@@ -45,9 +48,9 @@
 #include "viewmgr.hxx"
 #include "main.hxx"
 
-SG_USING_STD(string);
-SG_USING_STD(ifstream);
-SG_USING_STD(ofstream);
+using std::string;
+using std::ifstream;
+using std::ofstream;
 
 
 \f
@@ -132,15 +135,15 @@ static bool
 compare_values (SGPropertyNode * value1, SGPropertyNode * value2)
 {
     switch (value1->getType()) {
-    case SGPropertyNode::BOOL:
+    case simgear::props::BOOL:
         return (value1->getBoolValue() == value2->getBoolValue());
-    case SGPropertyNode::INT:
+    case simgear::props::INT:
         return (value1->getIntValue() == value2->getIntValue());
-    case SGPropertyNode::LONG:
+    case simgear::props::LONG:
         return (value1->getLongValue() == value2->getLongValue());
-    case SGPropertyNode::FLOAT:
+    case simgear::props::FLOAT:
         return (value1->getFloatValue() == value2->getFloatValue());
-    case SGPropertyNode::DOUBLE:
+    case simgear::props::DOUBLE:
         return (value1->getDoubleValue() == value2->getDoubleValue());
     default:
         return !strcmp(value1->getStringValue(), value2->getStringValue());
@@ -356,7 +359,7 @@ do_save (const SGPropertyNode * arg)
         file += ".sav";
 
     if (!fgValidatePath(file.c_str(), false)) {
-        SG_LOG(SG_IO, SG_ALERT, "save: reading '" << file << "' denied "
+        SG_LOG(SG_IO, SG_ALERT, "save: writing '" << file << "' denied "
                 "(unauthorized access)");
         return false;
     }
@@ -495,6 +498,13 @@ do_screen_capture (const SGPropertyNode * arg)
   return fgDumpSnapShot();
 }
 
+static bool
+do_reload_shaders (const SGPropertyNode*)
+{
+    simgear::reload_shaders();
+    return true;
+}
+
 static bool
 do_dump_scene_graph (const SGPropertyNode*)
 {
@@ -1179,6 +1189,33 @@ do_gui_redraw (const SGPropertyNode * arg)
 }
 
 
+/**
+ * Adds model to the scenery. The path to the added branch (/models/model[*])
+ * is returned in property "property".
+ */
+static bool
+do_add_model (const SGPropertyNode * arg)
+{
+    SGPropertyNode * model = fgGetNode("models", true);
+    for (int i = 0;; i++) {
+        if (i < 0)
+            return false;
+        if (!model->getChild("model", i, false)) {
+            model = model->getChild("model", i, true);
+            break;
+        }
+    }
+    copyProperties(arg, model);
+    if (model->hasValue("elevation-m"))
+        model->setDoubleValue("elevation-ft", model->getDoubleValue("elevation-m")
+                * SG_METER_TO_FEET);
+    model->getNode("load", true);
+    model->removeChildren("load");
+    const_cast<SGPropertyNode *>(arg)->setStringValue("property", model->getPath());
+    return true;
+}
+
+
 /**
  * Set mouse cursor coordinates and cursor shape.
  */
@@ -1196,7 +1233,7 @@ do_set_cursor (const SGPropertyNode * arg)
     }
 
     SGPropertyNode *cursor = const_cast<SGPropertyNode *>(arg)->getNode("cursor", true);
-    if (cursor->getType() != SGPropertyNode::NONE)
+    if (cursor->getType() != simgear::props::NONE)
         fgSetMouseCursor(cursor->getIntValue());
 
     cursor->setIntValue(fgGetMouseCursor());
@@ -1222,7 +1259,7 @@ do_play_audio_sample (const SGPropertyNode * arg)
         fx->play_message( path, file, volume );
         return true;
 
-    } catch (const sg_io_exception& e) {
+    } catch (const sg_io_exception&) {
         SG_LOG(SG_GENERAL, SG_ALERT, "play-audio-sample: "
                 "failed to load" << path << '/' << file);
         return false;
@@ -1519,6 +1556,7 @@ static struct {
     { "dialog-update", do_dialog_update },
     { "dialog-apply", do_dialog_apply },
     { "gui-redraw", do_gui_redraw },
+    { "add-model", do_add_model },
     { "set-cursor", do_set_cursor },
     { "play-audio-sample", do_play_audio_sample },
     { "presets-commit", do_presets_commit },
@@ -1534,6 +1572,7 @@ static struct {
     { "release-cockpit-button", do_release_cockpit_button },
     { "dump-scenegraph", do_dump_scene_graph },
     { "dump-terrainbranch", do_dump_terrain_branch },
+    { "reload-shaders", do_reload_shaders },
     { 0, 0 }                   // zero-terminated
 };