# include <windows.h>
#endif
-#include <GL/glut.h>
-#include <simgear/xgl/xgl.h>
-
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <simgear/constants.h>
#include <simgear/debug/logstream.hxx>
-#include <simgear/math/fg_random.h>
#include <simgear/math/polar3d.hxx>
+#include <simgear/props/props.hxx>
+#include <simgear/timing/sg_time.hxx>
#include <Aircraft/aircraft.hxx>
#include <Include/general.hxx>
-#include <Main/options.hxx>
-#include <Main/views.hxx>
+#include <FDM/ADA.hxx>
+#include <Main/globals.hxx>
+#include <Main/fg_props.hxx>
+#include <Main/viewmgr.hxx>
#include <Scenery/scenery.hxx>
#include <Time/fg_timer.hxx>
-#include <Time/fg_time.hxx>
#include <GUI/gui.h>
#include "cockpit.hxx"
+#include "hud.hxx"
// This is a structure that contains all data related to
float get_latitude( void )
{
- double lat;
-
- lat = current_aircraft.fdm_state->get_Latitude() * RAD_TO_DEG;
-
- float flat = lat;
- return(flat);
-
+ return current_aircraft.fdm_state->get_Latitude() * SGD_RADIANS_TO_DEGREES;
}
float get_lat_min( void )
{
- double a, d;
+ double a, d;
- a = current_aircraft.fdm_state->get_Latitude() * RAD_TO_DEG;
+ a = current_aircraft.fdm_state->get_Latitude() * SGD_RADIANS_TO_DEGREES;
if (a < 0.0) {
a = -a;
}
d = (double) ( (int) a);
float lat_min = (a - d) * 60.0;
- return(lat_min );
+
+ return lat_min;
}
float get_longitude( void )
{
- double lon;
-
- lon = current_aircraft.fdm_state->get_Longitude() * RAD_TO_DEG;
-
- float flon = lon;
- return(flon);
+ return current_aircraft.fdm_state->get_Longitude() * SGD_RADIANS_TO_DEGREES;
}
get_formated_gmt_time( void )
{
static char buf[32];
- FGTime *t = FGTime::cur_time_params;
- const struct tm *p = t->getGmt();
+ const struct tm *p = globals->get_time_params()->getGmt();
sprintf( buf, "%d/%d/%4d %d:%02d:%02d",
p->tm_mon+1, p->tm_mday, 1900 + p->tm_year,
p->tm_hour, p->tm_min, p->tm_sec);
+
return buf;
}
float get_long_min( void )
{
double a, d;
- a = current_aircraft.fdm_state->get_Longitude() * RAD_TO_DEG;
+ a = current_aircraft.fdm_state->get_Longitude() * SGD_RADIANS_TO_DEGREES;
if (a < 0.0) {
a = -a;
}
d = (double) ( (int) a);
float lon_min = (a - d) * 60.0;
- return(lon_min);
+
+ return lon_min;
}
float get_throttleval( void )
{
- float throttle = controls.get_throttle( 0 );
- return (throttle); // Hack limiting to one engine
+ // Hack limiting to one engine
+ return globals->get_controls()->get_throttle( 0 );
}
float get_aileronval( void )
{
- float aileronval = controls.get_aileron();
- return (aileronval);
+ return globals->get_controls()->get_aileron();
}
float get_elevatorval( void )
{
- float elevator_val = (float)controls.get_elevator();
- return elevator_val;
+ return globals->get_controls()->get_elevator();
}
float get_elev_trimval( void )
{
- float elevatorval = controls.get_elevator_trim();
- return (elevatorval);
+ return globals->get_controls()->get_elevator_trim();
}
float get_rudderval( void )
{
- float rudderval = controls.get_rudder();
- return (rudderval);
+ return globals->get_controls()->get_rudder();
}
float get_speed( void )
{
- // Make an explicit function call.
+ static const SGPropertyNode * speedup_node = fgGetNode("/sim/speed-up");
+
float speed = current_aircraft.fdm_state->get_V_calibrated_kts()
- * current_options.get_speed_up();
- return( speed );
+ * speedup_node->getIntValue();
+
+ return speed;
}
float get_mach(void)
{
- float mach=current_aircraft.fdm_state->get_Mach_number();
- return mach;
+ return current_aircraft.fdm_state->get_Mach_number();
}
float get_aoa( void )
{
- float aoa = current_aircraft.fdm_state->get_Alpha() * RAD_TO_DEG;
- return( aoa );
+ return current_aircraft.fdm_state->get_Alpha() * SGD_RADIANS_TO_DEGREES;
}
float get_roll( void )
{
- float roll = current_aircraft.fdm_state->get_Phi();
- return( roll );
+ return current_aircraft.fdm_state->get_Phi();
}
float get_pitch( void )
{
- float pitch = current_aircraft.fdm_state->get_Theta();
- return( pitch );
+ return current_aircraft.fdm_state->get_Theta();
}
float get_heading( void )
{
- float heading = (current_aircraft.fdm_state->get_Psi() * RAD_TO_DEG);
- return( heading );
+ return current_aircraft.fdm_state->get_Psi() * SGD_RADIANS_TO_DEGREES;
}
float get_altitude( void )
{
-// FGState *f;
- // double rough_elev;
+ static const SGPropertyNode *startup_units_node
+ = fgGetNode("/sim/startup/units");
-// current_aircraft.fdm_state
- // rough_elev = mesh_altitude(f->get_Longitude() * RAD_TO_ARCSEC,
- // f->get_Latitude() * RAD_TO_ARCSEC);
float altitude;
- if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
+ if ( !strcmp(startup_units_node->getStringValue(), "feet") ) {
altitude = current_aircraft.fdm_state->get_Altitude();
} else {
- altitude = (current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
+ altitude = (current_aircraft.fdm_state->get_Altitude()
+ * SG_FEET_TO_METER);
}
+
return altitude;
}
float get_agl( void )
{
+ static const SGPropertyNode *startup_units_node
+ = fgGetNode("/sim/startup/units");
+
float agl;
- if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
+ if ( !strcmp(startup_units_node->getStringValue(), "feet") ) {
agl = (current_aircraft.fdm_state->get_Altitude()
- - scenery.cur_elev * METER_TO_FEET);
+ - globals->get_scenery()->get_cur_elev() * SG_METER_TO_FEET);
} else {
- agl = (current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER
- - scenery.cur_elev);
+ agl = (current_aircraft.fdm_state->get_Altitude() * SG_FEET_TO_METER
+ - globals->get_scenery()->get_cur_elev());
}
+
return agl;
}
float get_sideslip( void )
{
- float sideslip = current_aircraft.fdm_state->get_Beta();
- return( sideslip );
+ return current_aircraft.fdm_state->get_Beta();
}
float get_frame_rate( void )
{
- float frame_rate = general.get_frame_rate();
- return (frame_rate);
+ return general.get_frame_rate();
}
float get_fov( void )
{
- float fov = current_options.get_fov();
- return (fov);
+ return globals->get_current_view()->get_fov();
}
float get_vfc_ratio( void )
{
- float vfc = current_view.get_vfc_ratio();
- return (vfc);
+ // float vfc = current_view.get_vfc_ratio();
+ // return (vfc);
+ return 0.0;
}
float get_vfc_tris_drawn ( void )
{
- float rendered = current_view.get_tris_rendered();
- return (rendered);
+ // float rendered = current_view.get_tris_rendered();
+ // return (rendered);
+ return 0.0;
}
float get_vfc_tris_culled ( void )
{
- float culled = current_view.get_tris_culled();
- return (culled);
+ // float culled = current_view.get_tris_culled();
+ // return (culled);
+ return 0.0;
}
float get_climb_rate( void )
{
+ static const SGPropertyNode *startup_units_node
+ = fgGetNode("/sim/startup/units");
+
float climb_rate;
- if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
+ if ( !strcmp(startup_units_node->getStringValue(), "feet") ) {
climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * 60.0;
} else {
- climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * FEET_TO_METER * 60.0;
+ climb_rate = current_aircraft.fdm_state->get_Climb_Rate() * SG_FEET_TO_METER * 60.0;
}
- return (climb_rate);
+
+ return climb_rate;
}
float get_view_direction( void )
{
- double view;
-
- view = FG_2PI - current_view.get_view_offset();
- view = ( current_aircraft.fdm_state->get_Psi() + view) * RAD_TO_DEG;
+ double view_off = SGD_2PI - globals->get_current_view()->getHeadingOffset_deg() * SGD_DEGREES_TO_RADIANS;
+ double view = ( current_aircraft.fdm_state->get_Psi() + view_off)
+ * SGD_RADIANS_TO_DEGREES;
if(view > 360.)
view -= 360.;
else if(view<0.)
view += 360.;
- float fview = view;
- return( fview );
+ return view;
+}
+
+// $$$ begin - added, VS Renganathan 13 Oct 2K
+// #ifdef FIGHTER_HUD
+float get_Vx ( void )
+{
+ // Curt dont comment this and return zero. - Ranga
+ // Please remove comments from get_V_..() function in flight.hxx
+ float Vxx = current_aircraft.fdm_state->get_V_north_rel_ground();
+ return Vxx;
}
+float get_Vy ( void )
+{
+ // Curt dont comment this and return zero. - Ranga
+ // Please remove comments from get_V_..() function in flight.hxx
+ float Vyy = current_aircraft.fdm_state->get_V_east_rel_ground();
+ return Vyy;
+}
+
+float get_Vz ( void )
+{
+ // Curt dont comment this and return zero. - Ranga
+ // Please remove comments from get_V_..() function in flight.hxx
+ float Vzz = current_aircraft.fdm_state->get_V_down_rel_ground();
+ return Vzz;
+}
+
+float get_Ax ( void )
+{
+ float Ax = current_aircraft.fdm_state->get_V_dot_north();
+ return Ax;
+}
+
+float get_Ay ( void )
+{
+ float Ay = current_aircraft.fdm_state->get_V_dot_east();
+ return Ay;
+}
+
+float get_Az ( void )
+{
+ float Az = current_aircraft.fdm_state->get_V_dot_down();
+ return Az;
+}
+
+float get_anzg ( void )
+{
+ float anzg = current_aircraft.fdm_state->get_N_Z_cg();
+ return anzg;
+}
+
+int get_iaux1 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(1);
+}
+
+int get_iaux2 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(2);
+}
+
+int get_iaux3 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(3);
+}
+
+int get_iaux4 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(4);
+}
+
+int get_iaux5 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(5);
+}
+
+int get_iaux6 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(6);
+}
+
+int get_iaux7 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(7);
+}
+
+int get_iaux8 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(8);
+}
+
+int get_iaux9 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(9);
+}
+
+int get_iaux10 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(10);
+}
+
+int get_iaux11 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(11);
+}
+
+int get_iaux12 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_iaux(12);
+}
+
+float get_aux1 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(1);
+}
+
+float get_aux2 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(2);
+}
+
+float get_aux3 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(3);
+}
+
+float get_aux4 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(4);
+}
+
+float get_aux5 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(5);
+}
+
+float get_aux6 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(6);
+}
+
+float get_aux7 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(7);
+}
+
+float get_aux8 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_daux(8);
+}
+
+float get_aux9 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(1);
+}
+
+float get_aux10 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(2);
+}
+
+float get_aux11 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(3);
+}
+
+float get_aux12 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(4);
+}
+
+float get_aux13 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(5);
+}
+
+float get_aux14 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(6);
+}
+
+float get_aux15 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(7);
+}
+
+float get_aux16 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(8);
+}
+
+float get_aux17 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(9);
+}
+
+float get_aux18 (void)
+{
+ FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+ return fdm->get_faux(10);
+}
+// #endif
+// $$$ end - added, VS Renganathan 13 Oct 2K
+
+
#ifdef NOT_USED
/****************************************************************************/
/* Convert degrees to dd mm'ss.s" (DMS-Format) */
}
#endif // 0
-/****************************************************************************/
-/* Convert degrees to dd mm'ss.s'' (DMS-Format) */
-/****************************************************************************/
-static char *toDMS(float a)
-{
- int neg = 0;
- float d, m, s;
- static char dms[16];
-
- if (a < 0.0f) {
- a = -a;
- neg = 1;
- }
- d = (float) ((int) a);
- a = (a - d) * 60.0f;
- m = (float) ((int) a);
- s = (a - m) * 60.0f;
-
- if (s > 59.5f) {
- s = 0.0f;
- m += 1.0f;
- }
- if (m > 59.5f) {
- m = 0.0f;
- d += 1.0f;
- }
- if (neg)
- d = -d;
-
- sprintf(dms, "%.0f*%02.0f %04.1f", d, m, s);
- return dms;
+
+/************************************************************************
+ Convert degrees to dd mm.mmm' (DMM-Format)
+ Description: Converts using a round-off factor tailored to the required
+ precision of the minutes field (three decimal places). Round-off
+ prevents function from returning a minutes value of 60.
+
+ Input arguments: Coordinate value in decimal degrees
+
+************************************************************************/
+static char *toDM(float dd)
+{
+ static char dm[16];
+ double tempdd;
+ double mn;
+ double sign = 1;
+ int deg;
+
+ if (dd < 0) {
+ sign = -1;
+ }
+ /* round for minutes expressed to three decimal places */
+ tempdd = fabs(dd) + (5.0E-4 / 60.0);
+ deg = (int)tempdd;
+ mn = fabs( (tempdd - (double)(deg)) * 60.0 - 4.999E-4 );
+ deg *= (int)sign;
+ sprintf(dm, "%d*%06.3f", deg, mn);
+ return dm;
}
-/****************************************************************************/
-/* Convert degrees to dd mm.mmm' (DMM-Format) */
-/****************************************************************************/
-static char *toDM(float a)
-{
- int neg = 0;
- float d, m;
- static char dm[16];
-
- if (a < 0.0f) {
- a = -a;
- neg = 1;
- }
-
- d = (float) ( (int) a);
- m = (a - d) * 60.0f;
-
- if (m > 59.5f) {
- m = 0.0f;
- d += 1.0f;
- }
- if (neg) d = -d;
-
- sprintf(dm, "%.0f*%06.3f", d, m);
- return dm;
+/************************************************************************
+ Convert degrees to dd mm'ss.s'' (DMS-Format)
+ Description: Converts using a round-off factor tailored to the required
+ precision of the seconds field (one decimal place). Round-off
+ prevents function from returning a seconds value of 60.
+
+ Input arguments: Coordinate value in decimal degrees
+
+************************************************************************/
+static char *toDMS(float dd)
+{
+ static char dms[16];
+ double tempdd, tempmin;
+ int deg;
+ int mn;
+ double sec;
+ double sign = 1;
+
+ if(dd < 0) {
+ sign = -1;
+ }
+ /* round up for seconds expressed to one decimal place */
+ tempdd = fabs(dd) + (0.05 / 3600.0);
+ deg = (int)tempdd;
+ tempmin = (tempdd - (double)(deg)) * 60.0;
+ mn = (int)tempmin;
+ sec = fabs( (tempmin - (double)(mn)) * 60.0 - 0.049 );
+ deg *= (int)sign;
+ sprintf(dms, "%d*%02d %04.1f", deg, mn, sec);
+ return dms;
}
+
// Have to set the LatLon display type
//static char *(*fgLatLonFormat)(float) = toDM;
static char *(*fgLatLonFormat)(float);
bool fgCockpitInit( fgAIRCRAFT *cur_aircraft )
{
- FG_LOG( FG_COCKPIT, FG_INFO, "Initializing cockpit subsystem" );
+ SG_LOG( SG_COCKPIT, SG_INFO, "Initializing cockpit subsystem" );
// cockpit->code = 1; /* It will be aircraft dependent */
// cockpit->status = 0;
// Have to set the LatLon display type
fgLatLonFormat = toDM;
- FG_LOG( FG_COCKPIT, FG_INFO,
+ SG_LOG( SG_COCKPIT, SG_INFO,
" Code " << ac_cockpit->code() << " Status "
<< ac_cockpit->status() );
void fgCockpitUpdate( void ) {
- FG_LOG( FG_COCKPIT, FG_DEBUG,
- "Cockpit: code " << ac_cockpit->code() << " status "
- << ac_cockpit->status() );
+ SG_LOG( SG_COCKPIT, SG_DEBUG,
+ "Cockpit: code " << ac_cockpit->code() << " status "
+ << ac_cockpit->status() );
- int iwidth = current_view.get_winWidth();
- int iheight = current_view.get_winHeight();
- float width = iwidth;
- float height = iheight;
+ static const SGPropertyNode * xsize_node = fgGetNode("/sim/startup/xsize");
+ static const SGPropertyNode * ysize_node = fgGetNode("/sim/startup/ysize");
+ static const SGPropertyNode * hud_visibility_node
+ = fgGetNode("/sim/hud/visibility");
- if ( current_options.get_hud_status() ) {
+ int iwidth = xsize_node->getIntValue();
+ int iheight = ysize_node->getIntValue();
+ float width = iwidth;
+ // float height = iheight;
+
+ // FIXME: inefficient
+ if ( hud_visibility_node->getBoolValue() ) {
// This will check the global hud linked list pointer.
// If these is anything to draw it will.
fgUpdateHUD();
}
+
#define DISPLAY_COUNTER
#ifdef DISPLAY_COUNTER
else
// sprintf(buf,"%-4.1f %7.0f %7.0f", fps, tris, culled);
sprintf(buf,"%-5.1f", fps);
- glMatrixMode(GL_PROJECTION);
+ glMatrixMode( GL_PROJECTION );
glPushMatrix();
glLoadIdentity();
- gluOrtho2D(0, width, 0, height);
- glMatrixMode(GL_MODELVIEW);
+ gluOrtho2D( 0, iwidth, 0, iheight );
+ glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glLoadIdentity();
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_LIGHTING);
+ glDisable( GL_DEPTH_TEST );
+ glDisable( GL_LIGHTING );
- glColor3f (0.9, 0.4, 0.2);
+ glColor3f( 0.9, 0.4, 0.2 );
guiFnt.drawString( buf,
- width/2 - guiFnt.getStringWidth(buf)/2,
+ int(width - guiFnt.getStringWidth(buf) - 10),
10 );
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHTING);
- glMatrixMode(GL_PROJECTION);
+ glEnable( GL_DEPTH_TEST );
+ glEnable( GL_LIGHTING );
+ glMatrixMode( GL_PROJECTION );
glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
+ glMatrixMode( GL_MODELVIEW );
glPopMatrix();
}
#endif // #ifdef DISPLAY_COUNTER
- xglViewport( 0, 0, iwidth, iheight );
-
- current_panel->update();
+ glViewport( 0, 0, iwidth, iheight );
}
+