-
-// kludge
-static double
-getAPRudderControl ()
-{
- if (getAPHeadingLock())
- return current_autopilot->get_TargetHeading();
- else
- return globals->get_controls()->get_rudder();
-}
-
-// kludge
-static void
-setAPRudderControl (double value)
-{
- if (getAPHeadingLock()) {
- SG_LOG(SG_GENERAL, SG_DEBUG, "setAPRudderControl " << value );
- value -= current_autopilot->get_TargetHeading();
- current_autopilot->HeadingAdjust(value < 0.0 ? -1.0 : 1.0);
- } else {
- globals->get_controls()->set_rudder(value);
- }
-}
-
-// kludge
-static double
-getAPElevatorControl ()
-{
- if (getAPAltitudeLock())
- return current_autopilot->get_TargetAltitude();
- else
- return globals->get_controls()->get_elevator();
-}
-
-// kludge
-static void
-setAPElevatorControl (double value)
-{
- if (getAPAltitudeLock()) {
- SG_LOG(SG_GENERAL, SG_DEBUG, "setAPElevatorControl " << value );
- value -= current_autopilot->get_TargetAltitude();
- current_autopilot->AltitudeAdjust(value < 0.0 ? 100.0 : -100.0);
- } else {
- globals->get_controls()->set_elevator(value);
- }
-}
-
-// kludge
-static double
-getAPThrottleControl ()
-{
- if (getAPAutoThrottleLock())
- return 0.0; // always resets
- else
- return globals->get_controls()->get_throttle(0);
-}
-
-// kludge
-static void
-setAPThrottleControl (double value)
-{
- if (getAPAutoThrottleLock())
- current_autopilot->AutoThrottleAdjust(value < 0.0 ? -0.01 : 0.01);
- else
- globals->get_controls()->set_throttle(FGControls::ALL_ENGINES, value);
-}
-
-
-/**
- * Get the current visibility (meters).
- */
-static double
-getVisibility ()
-{
-#ifndef FG_OLD_WEATHER
- return WeatherDatabase->getWeatherVisibility();
-#else
- return current_weather.get_visibility();
-#endif
-}
-
-
-/**
- * Set the current visibility (meters).
- */
-static void
-setVisibility (double visibility)
-{
-#ifndef FG_OLD_WEATHER
- WeatherDatabase->setWeatherVisibility(visibility);
-#else
- current_weather.set_visibility(visibility);
-#endif
-}
-
-/**
- * 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)
-{
- cout << "Set wind-east to " << speed << endl;
- 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);
-}
-
-/*
- * Set the current engine0 running flag.
- */
-static void
-setRunningFlag (bool flag)
-{
- if ( current_aircraft.fdm_state->get_num_engines() > 0 ) {
- current_aircraft.fdm_state->get_engine(0)->set_Running_Flag( flag );
- }
-}
-
-/*
- * Set the current engine0 cranking flag.
- */
-//Although there is no real reason to want to tell the engine that it is cranking,
-//this is currently necessary to avoid the cranking sound being played
-//before the engine inits.
-static void
-setCrankingFlag (bool flag)
-{
- if ( current_aircraft.fdm_state->get_num_engines() > 0 ) {
- current_aircraft.fdm_state->get_engine(0)->set_Cranking_Flag( flag );
- }
-}
-
-static double
-getFOV ()
-{
- return globals->get_current_view()->get_fov();
-}
-
-static void
-setFOV (double fov)
-{
- if ( fov < 180 ) {
- globals->get_current_view()->set_fov( fov );
- }
-}
-
-static long
-getWarp ()
-{
- return globals->get_warp();
-}
-
-static void
-setWarp (long warp)
-{
- globals->set_warp(warp);
-}
-
-static long
-getWarpDelta ()
-{
- return globals->get_warp_delta();
-}
-
-static void
-setWarpDelta (long delta)
-{
- globals->set_warp_delta(delta);
-}
-
-static void
-setViewAxisLong (double axis)
-{
- axisLong = axis;
-}
-
-static void
-setViewAxisLat (double axis)
-{
- axisLat = axis;
-}
-
-static bool
-getWindingCCW ()
-{
- return winding_ccw;
-}
-
-static void
-setWindingCCW (bool state)
-{
- winding_ccw = state;
- if ( winding_ccw )
- glFrontFace ( GL_CCW );
- else
- glFrontFace ( GL_CW );
-}
-
-static bool
-getFullScreen ()
-{
-#if defined(FX) && !defined(WIN32)
- return global_fullscreen;
-#else
- return false;
-#endif
-}
-
-static void
-setFullScreen (bool state)
-{
-#if defined(FX) && !defined(WIN32)
- global_fullscreen = state;
-# if defined(XMESA_FX_FULLSCREEN) && defined(XMESA_FX_WINDOW)
- XMesaSetFXmode( global_fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW );
-# endif
-#endif
-}
-
-static bool
-getFDMDataLogging ()
-{
- return fdm_data_logging;
-}
-
-static void
-setFDMDataLogging (bool state)
-{
- // kludge; no getter or setter available
- if (state != fdm_data_logging) {
- fgToggleFDMdataLogging();
- fdm_data_logging = state;
- }
-}
-
-\f
-////////////////////////////////////////////////////////////////////////
-// Tie the properties.
-////////////////////////////////////////////////////////////////////////
-
-void
-fgInitProps ()
-{
- // Simulation
- fgTie("/sim/logging/priority", getLoggingPriority, setLoggingPriority);
- fgTie("/sim/logging/classes", getLoggingClasses, setLoggingClasses);
- fgTie("/sim/freeze", getFreeze, setFreeze);
- fgTie("/sim/aircraft-dir", getAircraftDir, setAircraftDir);
- fgTie("/sim/view/offset-deg", getViewOffset, setViewOffset, false);
- fgSetArchivable("/sim/view/offset-deg");
- fgTie("/sim/view/goal-offset-deg", getGoalViewOffset, setGoalViewOffset, false);
- fgSetArchivable("/sim/view/goal-offset-deg");
- fgTie("/sim/view/pilot/x-offset-m",
- getPilotPositionXOffset, setPilotPositionXOffset);
- fgSetArchivable("/sim/view/pilot/x-offset-m");
- fgTie("/sim/view/pilot/y-offset-m",
- getPilotPositionYOffset, setPilotPositionYOffset);
- fgSetArchivable("/sim/view/pilot/y-offset-m");
- fgTie("/sim/view/pilot/z-offset-m",
- getPilotPositionZOffset, setPilotPositionZOffset);
- fgSetArchivable("/sim/view/pilot/z-offset-m");
- fgTie("/sim/time/gmt", getDateString, setDateString);
- fgSetArchivable("/sim/time/gmt");
- fgTie("/sim/time/gmt-string", getGMTString);
- fgTie("/sim/rendering/textures", getTextures, setTextures);
-
- // Orientation
- fgTie("/orientation/heading-magnetic-deg", getHeadingMag);
-
- //consumables
- fgTie("/consumables/fuel/tank[0]/level-gal_us",
- getTank1Fuel, setTank1Fuel, false);
- fgSetArchivable("/consumables/fuel/tank[0]/level-gal_us");
- fgTie("/consumables/fuel/tank[1]/level-gal_us",
- getTank2Fuel, setTank2Fuel, false);
- fgSetArchivable("/consumables/fuel/tank[1]/level-gal_us");
-
- // Autopilot
- fgTie("/autopilot/locks/altitude", getAPAltitudeLock, setAPAltitudeLock);
- fgSetArchivable("/autopilot/locks/altitude");
- fgTie("/autopilot/settings/altitude-ft", getAPAltitude, setAPAltitude);
- fgSetArchivable("/autopilot/settings/altitude-ft");
- fgTie("/autopilot/locks/glide-slope", getAPGSLock, setAPGSLock);
- fgSetArchivable("/autopilot/locks/glide-slope");
- fgTie("/autopilot/locks/terrain", getAPTerrainLock, setAPTerrainLock);
- fgSetArchivable("/autopilot/locks/terrain");
- fgTie("/autopilot/settings/agl-ft", getAPAltitude, setAPAltitude);
- fgSetArchivable("/autopilot/settings/agl-ft");
- fgTie("/autopilot/settings/climb-rate-fpm", getAPClimb, setAPClimb, false);
- fgSetArchivable("/autopilot/settings/climb-rate-fpm");
- fgTie("/autopilot/locks/heading", getAPHeadingLock, setAPHeadingLock);
- fgSetArchivable("/autopilot/locks/heading");
- fgTie("/autopilot/settings/heading-bug-deg",
- getAPHeadingBug, setAPHeadingBug, false);
- fgSetArchivable("/autopilot/settings/heading-bug-deg");
- fgTie("/autopilot/locks/wing-leveler", getAPWingLeveler, setAPWingLeveler);
- fgSetArchivable("/autopilot/locks/wing-leveler");
- fgTie("/autopilot/locks/nav[0]", getAPNAV1Lock, setAPNAV1Lock);
- fgSetArchivable("/autopilot/locks/nav[0]");
- fgTie("/autopilot/locks/auto-throttle",
- getAPAutoThrottleLock, setAPAutoThrottleLock);
- fgSetArchivable("/autopilot/locks/auto-throttle");
- fgTie("/autopilot/control-overrides/rudder",
- getAPRudderControl, setAPRudderControl);
- fgSetArchivable("/autopilot/control-overrides/rudder");
- fgTie("/autopilot/control-overrides/elevator",
- getAPElevatorControl, setAPElevatorControl);
- fgSetArchivable("/autopilot/control-overrides/elevator");
- fgTie("/autopilot/control-overrides/throttle",
- getAPThrottleControl, setAPThrottleControl);
- fgSetArchivable("/autopilot/control-overrides/throttle");
-
- // Environment
- fgTie("/environment/visibility-m", getVisibility, setVisibility);
- fgSetArchivable("/environment/visibility-m");
- fgTie("/environment/wind-north-fps", getWindNorth, setWindNorth);
- fgSetArchivable("/environment/wind-north-fps");
- fgTie("/environment/wind-east-fps", getWindEast, setWindEast);
- fgSetArchivable("/environment/wind-east-fps");
- fgTie("/environment/wind-down-fps", getWindDown, setWindDown);
- fgSetArchivable("/environment/wind-down-fps");
-
- fgTie("/environment/magnetic-variation-deg", getMagVar);
- fgTie("/environment/magnetic-dip-deg", getMagDip);
-
- // View
- fgTie("/sim/field-of-view", getFOV, setFOV);
- fgSetArchivable("/sim/field-of-view");
- fgTie("/sim/time/warp", getWarp, setWarp, false);
- fgTie("/sim/time/warp-delta", getWarpDelta, setWarpDelta);
- fgTie("/sim/view/axes/long", (double(*)())0, setViewAxisLong);
- fgTie("/sim/view/axes/lat", (double(*)())0, setViewAxisLat);
-
- // Misc. Temporary junk.
- fgTie("/sim/temp/winding-ccw", getWindingCCW, setWindingCCW, false);
- fgTie("/sim/temp/full-screen", getFullScreen, setFullScreen);
- fgTie("/sim/temp/fdm-data-logging", getFDMDataLogging, setFDMDataLogging);
-
-}
-
-
-void
-fgUpdateProps ()
-{
- _set_view_from_axes();
+void
+FGProperties::update (double dt)
+{
+ static SGPropertyNode_ptr offset = fgGetNode("/sim/time/local-offset", true);
+ 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);
+
+
+ // 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);