]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_commands.cxx
Erik Hofman:
[flightgear.git] / src / Main / fg_commands.cxx
index 4ce64780da81e77950f458d59735a63756c30f01..e86f7f849873674e86313d0dfc9699eecf3c8c24 100644 (file)
@@ -52,6 +52,7 @@ public:
   virtual SGPropertyNode * getProp2 () const { return _prop2; }
   virtual const SGPropertyNode * getValue () const
     { return _value ? _value : &_dummy_0; }
+  virtual const bool hasStep () const { return _step != 0; }
   virtual const SGPropertyNode * getStep () const 
     { return _step ? _step : &_dummy_0; }
   virtual const SGPropertyNode * getMin () const { return _min; }
@@ -184,47 +185,6 @@ do_save (const SGPropertyNode * arg, SGCommandState ** state)
 }
 
 
-/**
- * Built-in command: let PUI handle a mouse click.
- *
- * button: the mouse button number, zero-based.
- * is-down: true if the button is down, false if it is up.
- * x-pos: the x position of the mouse click.
- * y-pos: the y position of the mouse click.
- */
-static bool
-do_pui_mouse_click (const SGPropertyNode * arg, SGCommandState ** state)
-{
-  return puMouse(arg->getIntValue("button"),
-                arg->getBoolValue("is-down") ? PU_DOWN : PU_UP,
-                arg->getIntValue("x-pos"),
-                arg->getIntValue("y-pos"));
-}
-
-
-/**
- * Built-in command: let PUI *or* the panel handle a mouse click.
- *
- * button: the mouse button number, zero-based.
- * is-down: true if the button is down, false if it is up.
- * x-pos: the x position of the mouse click.
- * y-pos: the y position of the mouse click.
- */
-static bool
-do_pui_or_panel_mouse_click (const SGPropertyNode * arg,
-                            SGCommandState ** state)
-{
-  int button = arg->getIntValue("button");
-  bool is_down = arg->getBoolValue("is-down");
-  int x = arg->getIntValue("x-pos");
-  int y = arg->getIntValue("y-pos");
-  return (puMouse(button, is_down ? PU_DOWN : PU_UP, x, y) ||
-         (current_panel != 0 &&
-          current_panel->doMouseAction(button,
-                                       is_down ? PU_DOWN : PU_UP, x, y)));
-}
-
-
 /**
  * Built-in command: (re)load the panel.
  *
@@ -315,6 +275,7 @@ do_view_cycle (const SGPropertyNode * arg, SGCommandState ** state)
           globals->get_props()->setBoolValue( "/sim/hud/visibility", false );
       }
   }
+  global_tile_mgr.refresh_view_timestamps();
 //   fgReshape(fgGetInt("/sim/startup/xsize"), fgGetInt("/sim/startup/ysize"));
   return true;
 }
@@ -347,8 +308,10 @@ do_tile_cache_reload (const SGPropertyNode * arg, SGCommandState ** state)
     // BusyCursor(0);
     if ( global_tile_mgr.init() ) {
        // Load the local scenery data
+        double visibility_meters = fgGetDouble("/environment/visibility-m");
        global_tile_mgr.update(fgGetDouble("/position/longitude-deg"),
-                              fgGetDouble("/position/latitude-deg"));
+                              fgGetDouble("/position/latitude-deg"),
+                              visibility_meters);
     } else {
        SG_LOG( SG_GENERAL, SG_ALERT, 
                "Error in Tile Manager initialization!" );
@@ -427,6 +390,8 @@ do_property_assign (const SGPropertyNode * arg, SGCommandState ** state)
  *
  * property: the name of the property to increment or decrement.
  * step: the amount of the increment or decrement (default: 0).
+ * offset: a normalized amount to offset by (if step is not present).
+ * factor: the amount by which to multiply the offset (if step is not present).
  * min: the minimum allowed value (default: no minimum).
  * max: the maximum allowed value (default: no maximum).
  * wrap: true if the value should be wrapped when it passes min or max;
@@ -438,20 +403,40 @@ do_property_adjust (const SGPropertyNode * arg, SGCommandState ** state)
 {
   if (*state == 0)
     *state = new PropertyCommandState(arg);
+  bool hasStep = ((PropertyCommandState *)(*state))->hasStep();
   SGPropertyNode * prop = ((PropertyCommandState *)(*state))->getProp();
   const SGPropertyNode * step = ((PropertyCommandState *)(*state))->getStep();
+  const SGPropertyNode * offset =
+    ((PropertyCommandState *)(*state))->getOffset();
+  const SGPropertyNode * factor =
+    ((PropertyCommandState *)(*state))->getFactor();
   const SGPropertyNode * min = ((PropertyCommandState *)(*state))->getMin();
   const SGPropertyNode * max = ((PropertyCommandState *)(*state))->getMax();
   bool wrap = ((PropertyCommandState *)(*state))->getWrap()->getBoolValue();
 
+  double amount = 0;
+  if (!hasStep) {
+    amount = offset->getDoubleValue() * factor->getDoubleValue();
+  }
+
+
   switch (prop->getType()) {
   case SGPropertyNode::BOOL:
-    if (step->getBoolValue())
+    bool value;
+    if (hasStep)
+      value = step->getBoolValue();
+    else
+      value = (0.0 != amount);
+    if (value)
       return prop->setBoolValue(!prop->getBoolValue());
     else
       return true;
   case SGPropertyNode::INT: {
-    int value = prop->getIntValue() + step->getIntValue();
+    int value;
+    if (hasStep)
+      value = prop->getIntValue() + step->getIntValue();
+    else
+      value = prop->getIntValue() + int(amount);
     if (min && (value < min->getIntValue())) {
       if (wrap && max)
        value = max->getIntValue();
@@ -467,7 +452,11 @@ do_property_adjust (const SGPropertyNode * arg, SGCommandState ** state)
     return prop->setIntValue(value);
   }
   case SGPropertyNode::LONG: {
-    long value = prop->getLongValue() + step->getLongValue();
+    long value;
+    if (hasStep)
+      value = prop->getLongValue() + step->getLongValue();
+    else
+      value = prop->getLongValue() + long(amount);
     if (min && (value < min->getLongValue())) {
       if (wrap && max)
        value = max->getLongValue();
@@ -483,7 +472,11 @@ do_property_adjust (const SGPropertyNode * arg, SGCommandState ** state)
     return prop->setLongValue(value);
   }
   case SGPropertyNode::FLOAT: {
-    float value = prop->getFloatValue() + step->getFloatValue();
+    float value;
+    if (hasStep)
+      value = prop->getFloatValue() + step->getFloatValue();
+    else
+      value = prop->getFloatValue() + float(amount);
     if (min && (value < min->getFloatValue())) {
       if (wrap && max)
        value = max->getFloatValue();
@@ -501,7 +494,11 @@ do_property_adjust (const SGPropertyNode * arg, SGCommandState ** state)
   case SGPropertyNode::DOUBLE:
   case SGPropertyNode::UNSPECIFIED:
   case SGPropertyNode::NONE: {
-    double value = prop->getDoubleValue() + step->getDoubleValue();
+    double value;
+    if (hasStep)
+      value = prop->getDoubleValue() + step->getDoubleValue();
+    else
+      value = prop->getDoubleValue() + amount;
     if (min && (value < min->getDoubleValue())) {
       if (wrap && max)
        value = max->getDoubleValue();
@@ -637,8 +634,6 @@ static struct {
     { "exit", do_exit },
     { "load", do_load },
     { "save", do_save },
-    { "pui-mouse-click", do_pui_mouse_click },
-    { "pui-or-panel-mouse-click", do_pui_or_panel_mouse_click },
     { "panel-load", do_panel_load },
     { "panel-mouse-click", do_panel_mouse_click },
     { "preferences-load", do_preferences_load },
@@ -672,5 +667,4 @@ fgInitCommands ()
   }
 }
 
-// end of fg_commands.hxx
-
+// end of fg_commands.cxx