]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_props.cxx
Add the AIModel based air traffic subsystem from Durk Talsma.
[flightgear.git] / src / Main / fg_props.cxx
index 0311fcd93dd333361398df7dab2ef7db8965465a..2c93ad36cb47de433224de253cadc54726b0239e 100644 (file)
 #  include <simgear/compiler.h>
 #endif
 
-#include <simgear/misc/exception.hxx>
+#include <simgear/structure/exception.hxx>
 #include <simgear/magvar/magvar.hxx>
 #include <simgear/timing/sg_time.hxx>
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/scene/material/matlib.hxx>
-#include <simgear/sound/soundmgr.hxx>
+#include <simgear/sound/soundmgr_openal.hxx>
 
 #include STL_IOSTREAM
 
 #include <Aircraft/aircraft.hxx>
 #include <Time/tmp.hxx>
 #include <FDM/UIUCModel/uiuc_aircraftdir.h>
-#ifdef FG_WEATHERCM
-#  include <WeatherCM/FGLocalWeatherDatabase.h>
-#else
-#  include <Environment/environment.hxx>
-#endif // FG_WEATHERCM
+#include <Environment/environment.hxx>
 
 #include <GUI/gui.h>
 
 #include "globals.hxx"
-#include "fgfs.hxx"
 #include "fg_props.hxx"
 
 SG_USING_STD(istream);
 SG_USING_STD(ostream);
 
-#ifdef FG_WEATHERCM
-static double getWindNorth ();
-static double getWindEast ();
-static double getWindDown ();
-#endif // FG_WEATHERCM
-
 static bool winding_ccw = true; // FIXME: temporary
 
 static bool fdm_data_logging = false; // FIXME: temporary
@@ -126,7 +115,7 @@ addLoggingClass (const string &name)
       return;
     }
   }
-  SG_LOG(SG_GENERAL, SG_ALERT, "Unknown logging class: " << name);
+  SG_LOG(SG_GENERAL, SG_WARN, "Unknown logging class: " << name);
 }
 
 
@@ -197,6 +186,8 @@ getLoggingPriority ()
 static void
 setLoggingPriority (const char * p)
 {
+  if (p == 0)
+      return;
   string priority = p;
   if (priority == "bulk") {
     logbuf::set_log_priority(SG_BULK);
@@ -211,7 +202,7 @@ setLoggingPriority (const char * p)
   } else {
     SG_LOG(SG_GENERAL, SG_WARN, "Unknown logging priority " << priority);
   }
-  SG_LOG(SG_GENERAL, SG_INFO, "Logging priority is " << getLoggingPriority());
+  SG_LOG(SG_GENERAL, SG_DEBUG, "Logging priority is " << getLoggingPriority());
 }
 
 
@@ -315,7 +306,7 @@ setDateString (const char * date_string)
                                // if the save file has been edited
                                // by hand.
   if (ret != 6) {
-    SG_LOG(SG_INPUT, SG_ALERT, "Date/time string " << date_string
+    SG_LOG(SG_INPUT, SG_WARN, "Date/time string " << date_string
           << " not in YYYY-MM-DDTHH:MM:SS format; skipped");
     return;
   }
@@ -350,7 +341,6 @@ getGMTString ()
   return buf;
 }
 
-
 /**
  * Return the magnetic variation
  */
@@ -383,95 +373,6 @@ getHeadingMag ()
   return magheading;
 }
 
-
-#ifdef FG_WEATHERCM
-
-/**
- * Get the current visibility (meters).
- */
-static double
-getVisibility ()
-{
-  return WeatherDatabase->getWeatherVisibility();
-}
-
-
-/**
- * Set the current visibility (meters).
- */
-static void
-setVisibility (double visibility)
-{
-  WeatherDatabase->setWeatherVisibility(visibility);
-}
-
-/**
- * Get the current wind north velocity (feet/second).
- */
-static double
-getWindNorth ()
-{
-  return current_aircraft.fdm_state->get_V_north_airmass();
-}
-
-
-/**
- * Set the current wind north velocity (feet/second).
- */
-static void
-setWindNorth (double speed)
-{
-  current_aircraft.fdm_state
-    ->set_Velocities_Local_Airmass(speed, getWindEast(), getWindDown());
-}
-
-
-/**
- * Get the current wind east velocity (feet/second).
- */
-static double
-getWindEast ()
-{
-  return current_aircraft.fdm_state->get_V_east_airmass();
-}
-
-
-/**
- * Set the current wind east velocity (feet/second).
- */
-static void
-setWindEast (double speed)
-{
-  SG_LOG(SG_GENERAL, SG_INFO,, "Set wind-east to " << speed );
-  current_aircraft.fdm_state->set_Velocities_Local_Airmass(getWindNorth(),
-                                                          speed,
-                                                          getWindDown());
-}
-
-
-/**
- * Get the current wind down velocity (feet/second).
- */
-static double
-getWindDown ()
-{
-  return current_aircraft.fdm_state->get_V_down_airmass();
-}
-
-
-/**
- * Set the current wind down velocity (feet/second).
- */
-static void
-setWindDown (double speed)
-{
-  current_aircraft.fdm_state->set_Velocities_Local_Airmass(getWindNorth(),
-                                                          getWindEast(),
-                                                          speed);
-}
-
-#endif // FG_WEATHERCM
-
 static long
 getWarp ()
 {
@@ -554,10 +455,22 @@ setFDMDataLogging (bool state)
 // Tie the properties.
 ////////////////////////////////////////////////////////////////////////
 
+FGProperties::FGProperties ()
+{
+}
+
+FGProperties::~FGProperties ()
+{
+}
+
 void
-fgInitProps ()
+FGProperties::init ()
+{
+}
+
+void
+FGProperties::bind ()
 {
-  SG_LOG(SG_GENERAL, SG_DEBUG, "start of fgInitProps()" );
                                // Simulation
   fgTie("/sim/logging/priority", getLoggingPriority, setLoggingPriority);
   fgTie("/sim/logging/classes", getLoggingClasses, setLoggingClasses);
@@ -572,18 +485,6 @@ fgInitProps ()
                                // Orientation
   fgTie("/orientation/heading-magnetic-deg", getHeadingMag);
 
-                               // Environment
-#ifdef FG_WEATHERCM
-  fgTie("/environment/visibility-m", getVisibility, setVisibility);
-  fgSetArchivable("/environment/visibility-m");
-  fgTie("/environment/wind-from-north-fps", getWindNorth, setWindNorth);
-  fgSetArchivable("/environment/wind-from-north-fps");
-  fgTie("/environment/wind-from-east-fps", getWindEast, setWindEast);
-  fgSetArchivable("/environment/wind-from-east-fps");
-  fgTie("/environment/wind-from-down-fps", getWindDown, setWindDown);
-  fgSetArchivable("/environment/wind-from-down-fps");
-#endif
-
   fgTie("/environment/magnetic-variation-deg", getMagVar);
   fgTie("/environment/magnetic-dip-deg", getMagDip);
 
@@ -594,14 +495,54 @@ fgInitProps ()
   fgTie("/sim/temp/winding-ccw", getWindingCCW, setWindingCCW, false);
   fgTie("/sim/temp/full-screen", getFullScreen, setFullScreen);
   fgTie("/sim/temp/fdm-data-logging", getFDMDataLogging, setFDMDataLogging);
-
-  SG_LOG(SG_GENERAL, SG_DEBUG, "end of fgInitProps()" );
 }
 
+void
+FGProperties::unbind ()
+{
+                               // Simulation
+  fgUntie("/sim/logging/priority");
+  fgUntie("/sim/logging/classes");
+  fgUntie("/sim/freeze/master");
+  fgUntie("/sim/aircraft-dir");
+
+  fgUntie("/sim/time/elapsed-sec");
+  fgUntie("/sim/time/gmt");
+  fgUntie("/sim/time/gmt-string");
+
+                               // Orientation
+  fgUntie("/orientation/heading-magnetic-deg");
+
+                               // Environment
+  fgUntie("/environment/magnetic-variation-deg");
+  fgUntie("/environment/magnetic-dip-deg");
+
+  fgUntie("/sim/time/warp");
+  fgUntie("/sim/time/warp-delta");
+
+                               // Misc. Temporary junk.
+  fgUntie("/sim/temp/winding-ccw");
+  fgUntie("/sim/temp/full-screen");
+  fgUntie("/sim/temp/fdm-data-logging");
+}
 
 void
-fgUpdateProps ()
+FGProperties::update (double dt)
 {
+                                // Date and time
+    struct tm * t = globals->get_time_params()->getGmt();
+
+    fgSetInt("/sim/time/utc/year", t->tm_year + 1900);
+    fgSetInt("/sim/time/utc/month", t->tm_mon + 1);
+    fgSetInt("/sim/time/utc/day", t->tm_mday);
+    fgSetInt("/sim/time/utc/hour", t->tm_hour);
+    fgSetInt("/sim/time/utc/minute", t->tm_min);
+    fgSetInt("/sim/time/utc/second", t->tm_sec);
+
+    fgSetDouble("/sim/time/utc/day-seconds",
+                t->tm_hour * 3600 +
+                t->tm_min * 60 +
+                t->tm_sec);
 }
 
 
@@ -796,7 +737,7 @@ fgSetArchivable (const char * name, bool state)
 {
   SGPropertyNode * node = globals->get_props()->getNode(name);
   if (node == 0)
-    SG_LOG(SG_GENERAL, SG_ALERT,
+    SG_LOG(SG_GENERAL, SG_DEBUG,
           "Attempt to set archive flag for non-existant property "
           << name);
   else
@@ -808,7 +749,7 @@ fgSetReadable (const char * name, bool state)
 {
   SGPropertyNode * node = globals->get_props()->getNode(name);
   if (node == 0)
-    SG_LOG(SG_GENERAL, SG_ALERT,
+    SG_LOG(SG_GENERAL, SG_DEBUG,
           "Attempt to set read flag for non-existant property "
           << name);
   else
@@ -820,7 +761,7 @@ fgSetWritable (const char * name, bool state)
 {
   SGPropertyNode * node = globals->get_props()->getNode(name);
   if (node == 0)
-    SG_LOG(SG_GENERAL, SG_ALERT,
+    SG_LOG(SG_GENERAL, SG_DEBUG,
           "Attempt to set write flag for non-existant property "
           << name);
   else