X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Ffg_props.cxx;h=bf62711c8a0775ccbfe34aba47d34aedf9f2123d;hb=68c71d5787f2a0309e35c3e05939950113618cb7;hp=4ad261adf00cb646fb6eb995a6ed7c8b9afe31e5;hpb=484d3c61f8826dc3a155d6b77ce063e37abf38db;p=flightgear.git diff --git a/src/Main/fg_props.cxx b/src/Main/fg_props.cxx index 4ad261adf..bf62711c8 100644 --- a/src/Main/fg_props.cxx +++ b/src/Main/fg_props.cxx @@ -28,7 +28,6 @@ #include #include -#include #include #include #include @@ -80,6 +79,7 @@ LogClassMapping log_class_mappings [] = { LogClassMapping(SG_AI, "ai"), LogClassMapping(SG_ENVIRONMENT, "environment"), LogClassMapping(SG_SOUND, "sound"), + LogClassMapping(SG_NAVAID, "navaid"), LogClassMapping(SG_UNDEFD, "") }; @@ -97,7 +97,7 @@ string loggingResult; static const char * getLoggingClasses () { - sgDebugClass classes = logbuf::get_log_classes(); + sgDebugClass classes = sglog().get_log_classes(); loggingResult.clear(); for (int i = 0; log_class_mappings[i].c != SG_UNDEFD; i++) { if ((classes&log_class_mappings[i].c) > 0) { @@ -113,10 +113,10 @@ getLoggingClasses () static void addLoggingClass (const string &name) { - sgDebugClass classes = logbuf::get_log_classes(); + sgDebugClass classes = sglog().get_log_classes(); for (int i = 0; log_class_mappings[i].c != SG_UNDEFD; i++) { if (name == log_class_mappings[i].name) { - logbuf::set_log_classes(sgDebugClass(classes|log_class_mappings[i].c)); + sglog().set_log_classes(sgDebugClass(classes|log_class_mappings[i].c)); return; } } @@ -131,7 +131,7 @@ void setLoggingClasses (const char * c) { string classes = c; - logbuf::set_log_classes(SG_NONE); + sglog().set_log_classes(SG_NONE); if (classes == "none") { SG_LOG(SG_GENERAL, SG_INFO, "Disabled all logging classes"); @@ -139,7 +139,7 @@ setLoggingClasses (const char * c) } if (classes.empty() || classes == "all") { // default - logbuf::set_log_classes(SG_ALL); + sglog().set_log_classes(SG_ALL); SG_LOG(SG_GENERAL, SG_INFO, "Enabled all logging classes: " << getLoggingClasses()); return; @@ -170,7 +170,7 @@ setLoggingClasses (const char * c) static const char * getLoggingPriority () { - switch (logbuf::get_log_priority()) { + switch (sglog().get_log_priority()) { case SG_BULK: return "bulk"; case SG_DEBUG: @@ -183,7 +183,7 @@ getLoggingPriority () return "alert"; default: SG_LOG(SG_GENERAL, SG_WARN, "Internal: Unknown logging priority number: " - << logbuf::get_log_priority()); + << sglog().get_log_priority()); return "unknown"; } } @@ -199,15 +199,15 @@ setLoggingPriority (const char * p) return; string priority = p; if (priority == "bulk") { - logbuf::set_log_priority(SG_BULK); + sglog().set_log_priority(SG_BULK); } else if (priority == "debug") { - logbuf::set_log_priority(SG_DEBUG); + sglog().set_log_priority(SG_DEBUG); } else if (priority.empty() || priority == "info") { // default - logbuf::set_log_priority(SG_INFO); + sglog().set_log_priority(SG_INFO); } else if (priority == "warn") { - logbuf::set_log_priority(SG_WARN); + sglog().set_log_priority(SG_WARN); } else if (priority == "alert") { - logbuf::set_log_priority(SG_ALERT); + sglog().set_log_priority(SG_ALERT); } else { SG_LOG(SG_GENERAL, SG_WARN, "Unknown logging priority " << priority); } @@ -339,34 +339,15 @@ getGMTString () return buf; } -/** - * Return the magnetic variation - */ -static double -getMagVar () -{ - return globals->get_mag()->get_magvar() * SGD_RADIANS_TO_DEGREES; -} - - -/** - * Return the magnetic dip - */ -static double -getMagDip () -{ - return globals->get_mag()->get_magdip() * SGD_RADIANS_TO_DEGREES; -} - - /** * Return the current heading in degrees. */ static double getHeadingMag () { - double magheading = fgGetDouble("/orientation/heading-deg") - getMagVar(); - return SGMiscd::normalizePeriodic(0.5, 360.5, magheading ); + double magheading = fgGetDouble("/orientation/heading-deg") - + fgGetDouble("/environment/magnetic-variation-deg"); + return SGMiscd::normalizePeriodic(0, 360, magheading ); } /** @@ -375,8 +356,9 @@ getHeadingMag () static double getTrackMag () { - double magtrack = fgGetDouble("/orientation/track-deg") - getMagVar(); - return SGMiscd::normalizePeriodic(0.5, 360.5, magtrack ); + double magtrack = fgGetDouble("/orientation/track-deg") - + fgGetDouble("/environment/magnetic-variation-deg"); + return SGMiscd::normalizePeriodic(0, 360, magtrack ); } static bool @@ -395,14 +377,19 @@ setWindingCCW (bool state) glFrontFace ( GL_CW ); } -static const char * -getLongitudeString () +//////////////////////////////////////////////////////////////////////// +// Tie the properties. +//////////////////////////////////////////////////////////////////////// +SGConstPropertyNode_ptr FGProperties::_longDeg; +SGConstPropertyNode_ptr FGProperties::_latDeg; +SGConstPropertyNode_ptr FGProperties::_lonLatformat; + +const char * +FGProperties::getLongitudeString () { - static SGConstPropertyNode_ptr n = fgGetNode("/position/longitude-deg", true); - static SGConstPropertyNode_ptr f = fgGetNode("/sim/lon-lat-format", true); static char buf[32]; - double d = n->getDoubleValue(); - int format = f->getIntValue(); + double d = _longDeg->getDoubleValue(); + int format = _lonLatformat->getIntValue(); char c = d < 0.0 ? 'W' : 'E'; if (format == 0) { @@ -430,14 +417,12 @@ getLongitudeString () return buf; } -static const char * -getLatitudeString () +const char * +FGProperties::getLatitudeString () { - static SGConstPropertyNode_ptr n = fgGetNode("/position/latitude-deg", true); - static SGConstPropertyNode_ptr f = fgGetNode("/sim/lon-lat-format", true); static char buf[32]; - double d = n->getDoubleValue(); - int format = f->getIntValue(); + double d = _latDeg->getDoubleValue(); + int format = _lonLatformat->getIntValue(); char c = d < 0.0 ? 'S' : 'N'; if (format == 0) { @@ -462,9 +447,6 @@ getLatitudeString () -//////////////////////////////////////////////////////////////////////// -// Tie the properties. -//////////////////////////////////////////////////////////////////////// FGProperties::FGProperties () { @@ -482,107 +464,92 @@ FGProperties::init () void FGProperties::bind () { - // Simulation - fgTie("/sim/logging/priority", getLoggingPriority, setLoggingPriority); - fgTie("/sim/logging/classes", getLoggingClasses, setLoggingClasses); - fgTie("/sim/freeze/master", getFreeze, setFreeze); - - fgTie("/sim/time/elapsed-sec", getElapsedTime_sec); - fgTie("/sim/time/gmt", getDateString, setDateString); + _longDeg = fgGetNode("/position/longitude-deg", true); + _latDeg = fgGetNode("/position/latitude-deg", true); + _lonLatformat = fgGetNode("/sim/lon-lat-format", true); + + _offset = fgGetNode("/sim/time/local-offset", true); + + // utc date/time + _uyear = fgGetNode("/sim/time/utc/year", true); + _umonth = fgGetNode("/sim/time/utc/month", true); + _uday = fgGetNode("/sim/time/utc/day", true); + _uhour = fgGetNode("/sim/time/utc/hour", true); + _umin = fgGetNode("/sim/time/utc/minute", true); + _usec = fgGetNode("/sim/time/utc/second", true); + _uwday = fgGetNode("/sim/time/utc/weekday", true); + _udsec = fgGetNode("/sim/time/utc/day-seconds", true); + + // real local date/time + _ryear = fgGetNode("/sim/time/real/year", true); + _rmonth = fgGetNode("/sim/time/real/month", true); + _rday = fgGetNode("/sim/time/real/day", true); + _rhour = fgGetNode("/sim/time/real/hour", true); + _rmin = fgGetNode("/sim/time/real/minute", true); + _rsec = fgGetNode("/sim/time/real/second", true); + _rwday = fgGetNode("/sim/time/real/weekday", true); + + _tiedProperties.setRoot(globals->get_props()); + + // Simulation + _tiedProperties.Tie("/sim/logging/priority", getLoggingPriority, setLoggingPriority); + _tiedProperties.Tie("/sim/logging/classes", getLoggingClasses, setLoggingClasses); + _tiedProperties.Tie("/sim/freeze/master", getFreeze, setFreeze); + + _tiedProperties.Tie("/sim/time/elapsed-sec", getElapsedTime_sec); + _tiedProperties.Tie("/sim/time/gmt", getDateString, setDateString); fgSetArchivable("/sim/time/gmt"); - fgTie("/sim/time/gmt-string", getGMTString); - - // Position - fgTie("/position/latitude-string", getLatitudeString); - fgTie("/position/longitude-string", getLongitudeString); + _tiedProperties.Tie("/sim/time/gmt-string", getGMTString); - // Orientation - fgTie("/orientation/heading-magnetic-deg", getHeadingMag); - fgTie("/orientation/track-magnetic-deg", getTrackMag); + // Position + _tiedProperties.Tie("/position/latitude-string", getLatitudeString); + _tiedProperties.Tie("/position/longitude-string", getLongitudeString); - fgTie("/environment/magnetic-variation-deg", getMagVar); - fgTie("/environment/magnetic-dip-deg", getMagDip); + // Orientation + _tiedProperties.Tie("/orientation/heading-magnetic-deg", getHeadingMag); + _tiedProperties.Tie("/orientation/track-magnetic-deg", getTrackMag); - // Misc. Temporary junk. - fgTie("/sim/temp/winding-ccw", getWindingCCW, setWindingCCW, false); + // Misc. Temporary junk. + _tiedProperties.Tie("/sim/temp/winding-ccw", getWindingCCW, setWindingCCW, false); } void FGProperties::unbind () { - // Simulation - fgUntie("/sim/logging/priority"); - fgUntie("/sim/logging/classes"); - fgUntie("/sim/freeze/master"); + _tiedProperties.Untie(); - fgUntie("/sim/time/elapsed-sec"); - fgUntie("/sim/time/gmt"); - fgUntie("/sim/time/gmt-string"); - // Position - fgUntie("/position/latitude-string"); - fgUntie("/position/longitude-string"); - - // Orientation - fgUntie("/orientation/heading-magnetic-deg"); - fgUntie("/orientation/track-magnetic-deg"); - - // Environment - fgUntie("/environment/magnetic-variation-deg"); - fgUntie("/environment/magnetic-dip-deg"); - - // Misc. Temporary junk. - fgUntie("/sim/temp/winding-ccw"); -// fgUntie("/sim/temp/full-screen"); -// fgUntie("/sim/temp/fdm-data-logging"); + // drop static references to properties + _longDeg = 0; + _latDeg = 0; + _lonLatformat = 0; } void FGProperties::update (double dt) { - static SGPropertyNode_ptr offset = fgGetNode("/sim/time/local-offset", true); - offset->setIntValue(globals->get_time_params()->get_local_offset()); - + _offset->setIntValue(globals->get_time_params()->get_local_offset()); // utc date/time - static SGPropertyNode_ptr uyear = fgGetNode("/sim/time/utc/year", true); - static SGPropertyNode_ptr umonth = fgGetNode("/sim/time/utc/month", true); - static SGPropertyNode_ptr uday = fgGetNode("/sim/time/utc/day", true); - static SGPropertyNode_ptr uhour = fgGetNode("/sim/time/utc/hour", true); - static SGPropertyNode_ptr umin = fgGetNode("/sim/time/utc/minute", true); - static SGPropertyNode_ptr usec = fgGetNode("/sim/time/utc/second", true); - static SGPropertyNode_ptr uwday = fgGetNode("/sim/time/utc/weekday", true); - static SGPropertyNode_ptr udsec = fgGetNode("/sim/time/utc/day-seconds", true); - struct tm *u = globals->get_time_params()->getGmt(); - uyear->setIntValue(u->tm_year + 1900); - umonth->setIntValue(u->tm_mon + 1); - uday->setIntValue(u->tm_mday); - uhour->setIntValue(u->tm_hour); - umin->setIntValue(u->tm_min); - usec->setIntValue(u->tm_sec); - uwday->setIntValue(u->tm_wday); - - udsec->setIntValue(u->tm_hour * 3600 + u->tm_min * 60 + u->tm_sec); - + _uyear->setIntValue(u->tm_year + 1900); + _umonth->setIntValue(u->tm_mon + 1); + _uday->setIntValue(u->tm_mday); + _uhour->setIntValue(u->tm_hour); + _umin->setIntValue(u->tm_min); + _usec->setIntValue(u->tm_sec); + _uwday->setIntValue(u->tm_wday); + _udsec->setIntValue(u->tm_hour * 3600 + u->tm_min * 60 + u->tm_sec); // real local date/time - static SGPropertyNode_ptr ryear = fgGetNode("/sim/time/real/year", true); - static SGPropertyNode_ptr rmonth = fgGetNode("/sim/time/real/month", true); - static SGPropertyNode_ptr rday = fgGetNode("/sim/time/real/day", true); - static SGPropertyNode_ptr rhour = fgGetNode("/sim/time/real/hour", true); - static SGPropertyNode_ptr rmin = fgGetNode("/sim/time/real/minute", true); - static SGPropertyNode_ptr rsec = fgGetNode("/sim/time/real/second", true); - static SGPropertyNode_ptr rwday = fgGetNode("/sim/time/real/weekday", true); - time_t real = time(0); struct tm *r = localtime(&real); - ryear->setIntValue(r->tm_year + 1900); - rmonth->setIntValue(r->tm_mon + 1); - rday->setIntValue(r->tm_mday); - rhour->setIntValue(r->tm_hour); - rmin->setIntValue(r->tm_min); - rsec->setIntValue(r->tm_sec); - rwday->setIntValue(r->tm_wday); + _ryear->setIntValue(r->tm_year + 1900); + _rmonth->setIntValue(r->tm_mon + 1); + _rday->setIntValue(r->tm_mday); + _rhour->setIntValue(r->tm_hour); + _rmin->setIntValue(r->tm_min); + _rsec->setIntValue(r->tm_sec); + _rwday->setIntValue(r->tm_wday); } @@ -712,7 +679,7 @@ fgGetInt (const char * name, int defaultValue) return globals->get_props()->getIntValue(name, defaultValue); } -int +long fgGetLong (const char * name, long defaultValue) { return globals->get_props()->getLongValue(name, defaultValue);