#include STL_IOSTREAM
#include <ATC/ATCdisplay.hxx>
-#include <Autopilot/newauto.hxx>
#include <Aircraft/aircraft.hxx>
#include <Time/tmp.hxx>
#include <FDM/UIUCModel/uiuc_aircraftdir.h>
-#ifndef FG_OLD_WEATHER
+#ifndef FG_NEW_ENVIRONMENT
# include <WeatherCM/FGLocalWeatherDatabase.h>
#else
-# include <Weather/weather.hxx>
-#endif
+# include <Environment/environment.hxx>
+#endif // FG_NEW_ENVIRONMENT
#include <Objects/matlib.hxx>
#include <GUI/gui.h>
+#include "globals.hxx"
#include "fgfs.hxx"
#include "fg_props.hxx"
#include "viewmgr.hxx"
SG_USING_STD(ostream);
#endif
+#if !defined(FG_NEW_ENVIRONMENT)
static double getWindNorth ();
static double getWindEast ();
static double getWindDown ();
+#endif // FG_NEW_ENVIRONMENT
// Allow the view to be set from two axes (i.e. a joystick hat)
// This needs to be in FGViewer itself, somehow.
}
+#if 0
/**
* Get the pause state of the sim.
*/
if ( freeze ) {
// BusyCursor( 0 );
current_atcdisplay->CancelRepeatingMessage();
- current_atcdisplay->RegisterRepeatingMessage("**** SIM IS PAUSED **** SIM IS PAUSED ****");
+ current_atcdisplay->RegisterRepeatingMessage("**** SIM IS FROZEN **** SIM IS FROZEN ****");
} else {
// BusyCursor( 1 );
current_atcdisplay->CancelRepeatingMessage();
}
}
+#endif
/**
* Return the current aircraft directory (UIUC) as a string.
->set_goal_view_offset(offset * SGD_DEGREES_TO_RADIANS);
}
+/**
+ * Get the current view tilt in degrees.
+ */
+static double
+getViewTilt ()
+{
+ return (globals->get_current_view()
+ ->get_view_tilt() * SGD_RADIANS_TO_DEGREES);
+}
+
+
+static void
+setViewTilt (double tilt)
+{
+ globals->get_current_view()->set_view_tilt(tilt * SGD_DEGREES_TO_RADIANS);
+}
+
+static double
+getGoalViewTilt ()
+{
+ return (globals->get_current_view()
+ ->get_goal_view_tilt() * SGD_RADIANS_TO_DEGREES);
+}
+
+static void
+setGoalViewTilt (double tilt)
+{
+ while ( tilt < 0 ) {
+ tilt += 360.0;
+ }
+ while ( tilt > 360.0 ) {
+ tilt -= 360.0;
+ }
+ // Snap to center if we are close
+ if ( fabs(tilt) < 1.0 || fabs(tilt) > 359.0 ) {
+ tilt = 0.0;
+ }
+
+ globals->get_current_view()
+ ->set_goal_view_tilt(tilt * SGD_DEGREES_TO_RADIANS);
+}
+
/**
* Pilot position offset from CG.
}
+/**
+ * Return the number of milliseconds elapsed since simulation started.
+ */
+static long
+getElapsedTime_ms ()
+{
+ return globals->get_elapsed_time_ms();
+}
+
+
/**
* Return the current Zulu time.
*/
static void
setDateString (string date_string)
{
+ static const SGPropertyNode *cur_time_override
+ = fgGetNode("/sim/time/cur-time-override", true);
+
SGTime * st = globals->get_time_params();
struct tm * current_time = st->getGmt();
struct tm new_time;
double lon = current_aircraft.fdm_state->get_Longitude();
double lat = current_aircraft.fdm_state->get_Latitude();
globals->set_warp(warp);
- st->update(lon, lat, warp);
+ st->update(lon, lat, cur_time_override->getLongValue(), warp);
fgUpdateSkyAndLightingParams();
}
{
string out;
char buf[16];
- struct tm * t = globals->get_time_params()->getGmt();
+ struct tm *t = globals->get_time_params()->getGmt();
sprintf(buf, " %.2d:%.2d:%.2d",
t->tm_hour, t->tm_min, t->tm_sec);
+ // cout << t << " " << buf << endl;
out = buf;
return out;
}
}
-/**
- * Return the fuel level in tank 1
- */
-static double
-getTank1Fuel ()
-{
- return current_aircraft.fdm_state->get_Tank1Fuel();
-}
-
-static void
-setTank1Fuel ( double gals )
-{
- current_aircraft.fdm_state->set_Tank1Fuel( gals );
-}
-
-/**
- * Return the fuel level in tank 2
- */
-static double
-getTank2Fuel ()
-{
- return current_aircraft.fdm_state->get_Tank2Fuel();
-}
-
-static void
-setTank2Fuel ( double gals )
-{
- current_aircraft.fdm_state->set_Tank2Fuel( gals );
-}
-
-
-/**
- * Get the autopilot altitude lock (true=on).
- */
-static bool
-getAPAltitudeLock ()
-{
- return (current_autopilot->get_AltitudeEnabled() &&
- current_autopilot->get_AltitudeMode()
- == FGAutopilot::FG_ALTITUDE_LOCK);
-}
-
-
-/**
- * Set the autopilot altitude lock (true=on).
- */
-static void
-setAPAltitudeLock (bool lock)
-{
- current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_LOCK);
- current_autopilot->set_AltitudeEnabled(lock);
-}
-
-
-/**
- * Get the autopilot target altitude in feet.
- */
-static double
-getAPAltitude ()
-{
- return current_autopilot->get_TargetAltitude() * SG_METER_TO_FEET;
-}
-
-
-/**
- * Set the autopilot target altitude in feet.
- */
-static void
-setAPAltitude (double altitude)
-{
- current_autopilot->set_TargetAltitude( altitude * SG_FEET_TO_METER );
-}
-
-/**
- * Get the autopilot altitude lock (true=on).
- */
-static bool
-getAPGSLock ()
-{
- return (current_autopilot->get_AltitudeEnabled() &&
- (current_autopilot->get_AltitudeMode()
- == FGAutopilot::FG_ALTITUDE_GS1));
-}
-
-
-/**
- * Set the autopilot altitude lock (true=on).
- */
-static void
-setAPGSLock (bool lock)
-{
- current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_GS1);
- current_autopilot->set_AltitudeEnabled(lock);
-}
-
-
-/**
- * Get the autopilot terrain lock (true=on).
- */
-static bool
-getAPTerrainLock ()
-{
- return (current_autopilot->get_AltitudeEnabled() &&
- (current_autopilot->get_AltitudeMode()
- == FGAutopilot::FG_ALTITUDE_TERRAIN));
-}
-
-
-/**
- * Set the autopilot terrain lock (true=on).
- */
-static void
-setAPTerrainLock (bool lock)
-{
- current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_TERRAIN);
- current_autopilot->set_AltitudeEnabled(lock);
- current_autopilot->set_TargetAGL(
- current_aircraft.fdm_state->get_Altitude_AGL() * SG_FEET_TO_METER
- );
- cout << "Target AGL = "
- << current_aircraft.fdm_state->get_Altitude_AGL() * SG_FEET_TO_METER
- << endl;
-}
-
-
-/**
- * Get the autopilot target altitude in feet.
- */
-static double
-getAPClimb ()
-{
- return current_autopilot->get_TargetClimbRate() * SG_METER_TO_FEET;
-}
-
-
-/**
- * Set the autopilot target altitude in feet.
- */
-static void
-setAPClimb (double rate)
-{
- current_autopilot->set_TargetClimbRate( rate * SG_FEET_TO_METER );
-}
-
-
-/**
- * Get the autopilot heading lock (true=on).
- */
-static bool
-getAPHeadingLock ()
-{
- return
- (current_autopilot->get_HeadingEnabled() &&
- current_autopilot->get_HeadingMode() == DEFAULT_AP_HEADING_LOCK);
-}
-
-
-/**
- * Set the autopilot heading lock (true=on).
- */
-static void
-setAPHeadingLock (bool lock)
-{
- if (lock) {
- current_autopilot->set_HeadingMode(DEFAULT_AP_HEADING_LOCK);
- current_autopilot->set_HeadingEnabled(true);
- } else {
- current_autopilot->set_HeadingEnabled(false);
- }
-}
-
-
-/**
- * Get the autopilot heading bug in degrees.
- */
-static double
-getAPHeadingBug ()
-{
- return current_autopilot->get_DGTargetHeading();
-}
-
-
-/**
- * Set the autopilot heading bug in degrees.
- */
-static void
-setAPHeadingBug (double heading)
-{
- current_autopilot->set_DGTargetHeading( heading );
-}
-
-
-/**
- * Get the autopilot wing leveler lock (true=on).
- */
-static bool
-getAPWingLeveler ()
-{
- return
- (current_autopilot->get_HeadingEnabled() &&
- current_autopilot->get_HeadingMode() == FGAutopilot::FG_TC_HEADING_LOCK);
-}
-
-
-/**
- * Set the autopilot wing leveler lock (true=on).
- */
-static void
-setAPWingLeveler (bool lock)
-{
- if (lock) {
- current_autopilot->set_HeadingMode(FGAutopilot::FG_TC_HEADING_LOCK);
- current_autopilot->set_HeadingEnabled(true);
- } else {
- current_autopilot->set_HeadingEnabled(false);
- }
-}
-
-/**
- * Return true if the autopilot is locked to NAV1.
- */
-static bool
-getAPNAV1Lock ()
-{
- return
- (current_autopilot->get_HeadingEnabled() &&
- current_autopilot->get_HeadingMode() == FGAutopilot::FG_HEADING_NAV1);
-}
-
-
-/**
- * Set the autopilot NAV1 lock.
- */
-static void
-setAPNAV1Lock (bool lock)
-{
- if (lock) {
- current_autopilot->set_HeadingMode(FGAutopilot::FG_HEADING_NAV1);
- current_autopilot->set_HeadingEnabled(true);
- } else if (current_autopilot->get_HeadingMode() ==
- FGAutopilot::FG_HEADING_NAV1) {
- current_autopilot->set_HeadingEnabled(false);
- }
-}
-
-/**
- * Get the autopilot autothrottle lock.
- */
-static bool
-getAPAutoThrottleLock ()
-{
- return current_autopilot->get_AutoThrottleEnabled();
-}
-
-
-/**
- * Set the autothrottle lock.
- */
-static void
-setAPAutoThrottleLock (bool lock)
-{
- current_autopilot->set_AutoThrottleEnabled(lock);
-}
-
-
-// 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);
-}
-
+#if !defined(FG_NEW_ENVIRONMENT)
/**
* Get the current visibility (meters).
static double
getVisibility ()
{
-#ifndef FG_OLD_WEATHER
return WeatherDatabase->getWeatherVisibility();
-#else
- return current_weather.get_visibility();
-#endif
}
static void
setVisibility (double visibility)
{
-#ifndef FG_OLD_WEATHER
WeatherDatabase->setWeatherVisibility(visibility);
-#else
- current_weather.set_visibility(visibility);
-#endif
}
/**
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 );
- }
-}
+#endif // FG_NEW_ENVIRONMENT
static double
getFOV ()
getFullScreen ()
{
#if defined(FX) && !defined(WIN32)
- return global_fullscreen;
+ return globals->get_fullscreen();
#else
return false;
#endif
setFullScreen (bool state)
{
#if defined(FX) && !defined(WIN32)
- global_fullscreen = state;
+ globals->set_fullscreen(state);
# if defined(XMESA_FX_FULLSCREEN) && defined(XMESA_FX_WINDOW)
- XMesaSetFXmode( global_fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW );
+ XMesaSetFXmode( state ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW );
# endif
#endif
}
// Simulation
fgTie("/sim/logging/priority", getLoggingPriority, setLoggingPriority);
fgTie("/sim/logging/classes", getLoggingClasses, setLoggingClasses);
- fgTie("/sim/freeze", getFreeze, setFreeze);
+ // 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);
+ fgTie("/sim/view/tilt-deg", getViewTilt, setViewTilt, false);
+ fgSetArchivable("/sim/view/tilt-deg");
+ fgTie("/sim/view/goal-tilt-deg", getGoalViewTilt, setGoalViewTilt, false);
fgSetArchivable("/sim/view/goal-offset-deg");
fgTie("/sim/view/pilot/x-offset-m",
getPilotPositionXOffset, setPilotPositionXOffset);
fgTie("/sim/view/pilot/z-offset-m",
getPilotPositionZOffset, setPilotPositionZOffset);
fgSetArchivable("/sim/view/pilot/z-offset-m");
+ fgTie("/sim/time/elapsed-ms", getElapsedTime_ms);
fgTie("/sim/time/gmt", getDateString, setDateString);
fgSetArchivable("/sim/time/gmt");
fgTie("/sim/time/gmt-string", getGMTString);
// 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
+#if !defined(FG_NEW_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/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);
* Save the current state of the simulator to a stream.
*/
bool
-fgSaveFlight (ostream &output)
+fgSaveFlight (ostream &output, bool write_all)
{
try {
- writeProperties(output, globals->get_props());
+ writeProperties(output, globals->get_props(), write_all);
} catch (const sg_exception &e) {
guiErrorMessage("Error saving flight: ", e);
return false;