1
0
Fork 0
flightgear/Simulator/Cockpit/cockpit.cxx

273 lines
6.2 KiB
C++
Raw Normal View History

1998-09-29 14:56:30 +00:00
// cockpit.cxx -- routines to draw a cockpit (initial draft)
//
// Written by Michele America, started September 1997.
//
// Copyright (C) 1997 Michele F. America - nomimarketing@mail.telepac.pt
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// $Id$
1997-08-29 18:03:19 +00:00
1998-04-24 00:45:53 +00:00
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
1997-08-29 18:03:19 +00:00
#include <GL/glut.h>
#include <XGL/xgl.h>
1997-08-29 18:03:19 +00:00
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
1997-08-29 18:03:19 +00:00
1998-10-16 23:26:44 +00:00
#include <Aircraft/aircraft.hxx>
#include <Debug/logstream.hxx>
#include <GUI/gui.h>
#include <Include/fg_constants.h>
1999-01-07 20:24:17 +00:00
#include <Include/general.hxx>
1998-05-13 18:27:53 +00:00
#include <Main/options.hxx>
#include <Main/views.hxx>
1998-04-18 04:13:51 +00:00
#include <Math/fg_random.h>
#include <Math/mat3.h>
1998-07-08 14:41:08 +00:00
#include <Math/polar3d.hxx>
1998-04-30 12:35:59 +00:00
#include <Scenery/scenery.hxx>
#include <Time/fg_time.hxx>
1998-04-24 00:45:53 +00:00
#include <Time/fg_timer.hxx>
1997-08-29 18:03:19 +00:00
1998-04-24 00:45:53 +00:00
#include "cockpit.hxx"
#include "panel.hxx"
// This is a structure that contains all data related to
// cockpit/panel/hud system
1997-08-29 18:03:19 +00:00
static pCockpit ac_cockpit;
1997-08-29 18:03:19 +00:00
// 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.
1998-05-16 13:04:13 +00:00
double get_latitude( void )
{
return (double)((int)(current_aircraft.fdm_state->get_Latitude()*RAD_TO_DEG));
1998-05-16 13:04:13 +00:00
}
1998-12-03 01:14:58 +00:00
1998-05-16 13:04:13 +00:00
double get_lat_min( void )
{
double a, d;
1998-05-16 13:04:13 +00:00
a = current_aircraft.fdm_state->get_Latitude() * RAD_TO_DEG;
if (a < 0.0) {
a = -a;
}
d = (double) ( (int) a);
return( (a - d) * 60.0);
}
1998-05-16 13:04:13 +00:00
double get_longitude( void )
{
return( (double)((int) (current_aircraft.fdm_state->get_Longitude()
* RAD_TO_DEG)) );
1998-05-16 13:04:13 +00:00
}
1998-05-16 13:04:13 +00:00
double get_long_min( void )
{
double a, d;
a = current_aircraft.fdm_state->get_Longitude() * RAD_TO_DEG;
if (a < 0.0) {
a = -a;
}
d = (double) ( (int) a);
return( (a - d) * 60.0);
1998-05-16 13:04:13 +00:00
}
char*
get_formated_gmt_time( void )
{
static char buf[32];
FGTime *t = FGTime::cur_time_params;
const struct tm *p = t->getGmt();
sprintf( buf, "%d/%d/%2d %d:%02d:%02d",
p->tm_mon+1, p->tm_mday, p->tm_year,
p->tm_hour, p->tm_min, p->tm_sec);
return buf;
}
double get_throttleval( void )
1997-08-29 18:03:19 +00:00
{
return controls.get_throttle( 0 ); // Hack limiting to one engine
}
double get_aileronval( void )
{
return controls.get_aileron();
}
double get_elevatorval( void )
{
return controls.get_elevator();
}
double get_elev_trimval( void )
{
return controls.get_elevator_trim();
}
double get_rudderval( void )
{
return controls.get_rudder();
}
double get_speed( void )
{
return( current_aircraft.fdm_state->get_V_equiv_kts() );
}
double get_aoa( void )
{
return( current_aircraft.fdm_state->get_Alpha() * RAD_TO_DEG );
}
double get_roll( void )
{
return( current_aircraft.fdm_state->get_Phi() );
}
double get_pitch( void )
{
return( current_aircraft.fdm_state->get_Theta() );
}
double get_heading( void )
{
return( current_aircraft.fdm_state->get_Psi() * RAD_TO_DEG );
}
double get_altitude( void )
{
if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
return current_aircraft.fdm_state->get_Altitude();
} else {
return current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER;
}
}
double get_agl( void )
{
if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
return current_aircraft.fdm_state->get_Altitude()
- scenery.cur_elev * METER_TO_FEET;
} else {
return current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER
- scenery.cur_elev;
}
}
double get_sideslip( void )
{
return( current_aircraft.fdm_state->get_Beta() );
}
double get_frame_rate( void )
{
1999-01-07 20:24:17 +00:00
return (double) general.get_frame_rate();
1997-08-29 18:03:19 +00:00
}
1998-05-13 18:27:53 +00:00
double get_fov( void )
{
return (current_options.get_fov());
1998-05-13 18:27:53 +00:00
}
double get_vfc_ratio( void )
{
return current_view.get_vfc_ratio();
}
double get_vfc_tris_drawn ( void )
{
return current_view.get_tris_rendered();
}
1998-09-29 02:01:06 +00:00
double get_climb_rate( void )
{
if ( current_options.get_units() == fgOPTIONS::FG_UNITS_FEET ) {
return current_aircraft.fdm_state->get_Climb_Rate() * 60.0;
} else {
return current_aircraft.fdm_state->get_Climb_Rate()
* FEET_TO_METER * 60.0;
}
1998-09-29 02:01:06 +00:00
}
bool fgCockpitInit( fgAIRCRAFT *cur_aircraft )
1997-08-29 18:03:19 +00:00
{
FG_LOG( FG_COCKPIT, FG_INFO, "Initializing cockpit subsystem" );
// cockpit->code = 1; /* It will be aircraft dependent */
// cockpit->status = 0;
// If aircraft has HUD specified we will get the specs from its def
// file. For now we will depend upon hard coding in hud?
// We must insure that the existing instrument link is purged.
// This is done by deleting the links in the list.
// HI_Head is now a null pointer so we can generate a new list from the
// current aircraft.
fgHUDInit( cur_aircraft );
ac_cockpit = new fg_Cockpit();
if ( current_options.get_panel_status() ) {
new FGPanel;
}
FG_LOG( FG_COCKPIT, FG_INFO,
" Code " << ac_cockpit->code() << " Status "
<< ac_cockpit->status() );
return true;
}
void fgCockpitUpdate( void ) {
FG_LOG( FG_COCKPIT, FG_DEBUG,
"Cockpit: code " << ac_cockpit->code() << " status "
<< ac_cockpit->status() );
if ( current_options.get_hud_status() ) {
// This will check the global hud linked list pointer.
// If these is anything to draw it will.
fgUpdateHUD();
}
if ( current_options.get_panel_status() &&
(fabs( current_view.get_view_offset() ) < 0.2) )
{
xglViewport( 0, 0,
current_view.get_winWidth(),
current_view.get_winHeight() );
FGPanel::OurPanel->Update();
}
1997-08-29 18:03:19 +00:00
}