]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/cockpit.cxx
Tweaks for Mips Irix compilers.
[flightgear.git] / src / Cockpit / cockpit.cxx
index 1987f8bac7485155042a2971f1fb2fae22236235..81f40ddb9060dee026df286c34df5ff55f63f53f 100644 (file)
 #endif
 
 #include <GL/glut.h>
-#include <simgear/xgl.h>
+// #include <simgear/xgl/xgl.h>
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 
-#include <simgear/logstream.hxx>
 #include <simgear/constants.h>
-#include <simgear/fg_random.h>
-#include <simgear/mat3.h>
-#include <simgear/polar3d.hxx>
+#include <simgear/debug/logstream.hxx>
+#include <simgear/math/polar3d.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 <Scenery/scenery.hxx>
 #include <Time/fg_timer.hxx>
-#include <Time/fg_time.hxx>
 #include <GUI/gui.h>
 
 #include "cockpit.hxx"
 // cockpit/panel/hud system
 
 static pCockpit ac_cockpit;
-fntRenderer *HUDtext = 0;
-float  HUD_TextSize = 0;
-int HUD_style = 0;
-
-float HUD_matrix[16];
 // The following routines obtain information concerntin the aircraft's
 // current state and return it to calling instrument display routines.
 // They should eventually be member functions of the aircraft.
@@ -108,8 +101,7 @@ char*
 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);
@@ -163,7 +155,7 @@ float get_speed( void )
 {
     // Make an explicit function call.
     float speed = current_aircraft.fdm_state->get_V_calibrated_kts()
-       * current_options.get_speed_up();
+       * fgGetInt("/sim/speed-up"); // FIXME: inefficient
     return( speed );
 }
 
@@ -207,7 +199,7 @@ float get_altitude( void )
     //                         f->get_Latitude()  * RAD_TO_ARCSEC);
     float altitude;
 
-    if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
+    if ( fgGetString("/sim/startup/units") == "feet" ) {
         altitude = current_aircraft.fdm_state->get_Altitude();
     } else {
         altitude = (current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER);
@@ -219,7 +211,7 @@ float get_agl( void )
 {
     float agl;
 
-    if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
+    if ( fgGetString("/sim/startup/units") == "feet" ) {
         agl = (current_aircraft.fdm_state->get_Altitude()
                - scenery.cur_elev * METER_TO_FEET);
     } else {
@@ -243,32 +235,35 @@ float get_frame_rate( void )
 
 float get_fov( void )
 {
-    float fov = current_options.get_fov(); 
+    float fov = globals->get_current_view()->get_fov(); 
     return (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 )
 {
     float climb_rate;
-    if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
+    if ( fgGetString("/sim/startup/units") == "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;
@@ -279,20 +274,251 @@ float get_climb_rate( void )
 
 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 = FG_2PI - globals->get_current_view()->get_view_offset();
+    double view = ( current_aircraft.fdm_state->get_Psi() + view_off)
+       * RAD_TO_DEG;
     
     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 )
+{
+    // CLO - 5 Jan 2000 - something needs to get addressed here
+    // float Vxx = current_aircraft.fdm_state->get_V_north_rel_ground();
+    float Vxx = 0;
+    return (Vxx);
+}
+
+float get_Vy   ( void )
+{
+    // CLO - 5 Jan 2000 - something needs to get addressed here
+    // float Vyy = current_aircraft.fdm_state->get_V_east_rel_ground();
+    float Vyy = 0;
+    return (Vyy);
+}
+
+float get_Vz   ( void )
+{
+    // CLO - 5 Jan 2000 - something needs to get addressed here
+    // float Vzz = current_aircraft.fdm_state->get_V_down_rel_ground();
+    float Vzz = 0;
+    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_iaux1();
+}
+
+int get_iaux2 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux2();
+}
+
+int get_iaux3 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux3();
+}
+
+int get_iaux4 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux4();
+}
+
+int get_iaux5 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux5();
+}
+
+int get_iaux6 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux6();
+}
+
+int get_iaux7 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux7();
+}
+
+int get_iaux8 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux8();
+}
+
+int get_iaux9 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux9();
+}
+
+int get_iaux10 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux10();
+}
+
+int get_iaux11 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_iaux11();
+}
+
+int get_iaux12 (void)
+{
+     FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+     return fdm->get_iaux12();
+}
+
+float get_aux1 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux1();
+}
+
+float get_aux2 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux2();
+}
+
+float get_aux3 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux3();
+}
+
+float get_aux4 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux4();
+}
+
+float get_aux5 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux5();
+}
+
+float get_aux6 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux6();
+}
+
+float get_aux7 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux7();
+}
+
+float get_aux8 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux8();
+}
+
+float get_aux9 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux9();
+}
+
+float get_aux10 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux10();
+}
+
+float get_aux11 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux11();
+}
+
+float get_aux12 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux12();
+}
+
+float get_aux13 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux13();
+}
+
+float get_aux14 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux14();
+}
+
+float get_aux15 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux15();
+}
+
+float get_aux16 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux16();
+}
+
+float get_aux17 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux17();
+}
+
+float get_aux18 (void)
+{
+    FGADA *fdm = (FGADA *)current_aircraft.fdm_state;
+    return fdm->get_aux18();
+}
+// #endif
+// $$$ end - added, VS Renganathan 13 Oct 2K
+
+
 #ifdef NOT_USED
 /****************************************************************************/
 /* Convert degrees to dd mm'ss.s" (DMS-Format)                              */
@@ -323,67 +549,70 @@ char *dmshh_format(double degrees)
 }
 #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);
@@ -460,10 +689,6 @@ bool fgCockpitInit( fgAIRCRAFT *cur_aircraft )
     fgHUDInit( cur_aircraft );
     ac_cockpit = new fg_Cockpit();
     
-    if ( current_options.get_panel_status() ) {
-        new FGPanel;
-    }
-
     // Have to set the LatLon display type
     fgLatLonFormat = toDM;
     
@@ -471,29 +696,24 @@ bool fgCockpitInit( fgAIRCRAFT *cur_aircraft )
         "  Code " << ac_cockpit->code() << " Status " 
         << ac_cockpit->status() );
 
-//  HUD_TextSize = (current_options.get_xsize() > 1000) ? 10 : 8;
-    HUD_TextSize = 10;
-    HUDtext = new fntRenderer();
-    HUDtext -> setFont      ( guiFntHandle ) ;
-    HUDtext -> setPointSize ( HUD_TextSize ) ;
-    HUD_TextList.setFont( HUDtext );
-
-    return true;
+       return true;
 }
 
-
 void fgCockpitUpdate( void ) {
 
-    int iwidth   = current_view.get_winWidth();
-    int iheight  = current_view.get_winHeight();
-    float width  = iwidth;
-    float height = iheight;
-    
     FG_LOG( FG_COCKPIT, FG_DEBUG,
         "Cockpit: code " << ac_cockpit->code() << " status " 
         << ac_cockpit->status() );
 
-    if ( current_options.get_hud_status() ) {
+                               // FIXME: inefficient
+       int iwidth   = fgGetInt("/sim/startup/xsize");
+                               // FIXME: inefficient
+       int iheight  = fgGetInt("/sim/startup/ysize");
+       float width  = iwidth;
+       float height = iheight;
+
+                               // FIXME: inefficient
+    if ( fgGetBool("/sim/hud/visibility") ) {
         // This will check the global hud linked list pointer.
         // If these is anything to draw it will.
         fgUpdateHUD();
@@ -509,36 +729,34 @@ void fgCockpitUpdate( void ) {
 //      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, fgGetInt("/sim/startup/xsize"),
+                   0, fgGetInt("/sim/startup/ysize") );
+        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
     
-    if( current_options.get_panel_status() && 
-         (fabs( current_view.get_view_offset() ) < 0.2) )
-    {
-        xglViewport( 0, 0, iwidth, iheight );
+    glViewport( 0, 0, 
+               fgGetInt("/sim/startup/xsize"),
+               fgGetInt("/sim/startup/ysize") );
 
-        FGPanel::OurPanel->Update();
-    }
 }