1
0
Fork 0

Internal interface changes by David Megginson.

This commit is contained in:
curt 2001-01-11 22:44:18 +00:00
parent cff0022a16
commit 469703dd0c
13 changed files with 376 additions and 493 deletions

View file

@ -1093,6 +1093,21 @@ SOURCE=.\src\FDM\LaRCsim\ls_step.c
# End Source File
# Begin Source File
SOURCE=.\src\FDM\LaRCsim\ls_trim.c
!IF "$(CFG)" == "FlightGear - Win32 Release"
# PROP Intermediate_Dir "Release\Lib_LaRCsim"
!ELSEIF "$(CFG)" == "FlightGear - Win32 Debug"
# PROP Intermediate_Dir "Debug\Lib_LaRCsim"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\src\FDM\LaRCsim\c172_aero.c
!IF "$(CFG)" == "FlightGear - Win32 Release"
@ -2095,6 +2110,21 @@ SOURCE=.\src\FDM\MagicCarpet.cxx
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\src\GUI\apt_dlg.cxx
!IF "$(CFG)" == "FlightGear - Win32 Release"
# PROP Intermediate_Dir "Release\Lib_GUI"
!ELSEIF "$(CFG)" == "FlightGear - Win32 Debug"
# PROP Intermediate_Dir "Debug\Lib_GUI"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\src\GUI\gui.cxx
!IF "$(CFG)" == "FlightGear - Win32 Release"
@ -2107,6 +2137,66 @@ SOURCE=.\src\GUI\gui.cxx
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\src\GUI\gui_local.cxx
!IF "$(CFG)" == "FlightGear - Win32 Release"
# PROP Intermediate_Dir "Release\Lib_GUI"
!ELSEIF "$(CFG)" == "FlightGear - Win32 Debug"
# PROP Intermediate_Dir "Debug\Lib_GUI"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\src\GUI\mouse.cxx
!IF "$(CFG)" == "FlightGear - Win32 Release"
# PROP Intermediate_Dir "Release\Lib_GUI"
!ELSEIF "$(CFG)" == "FlightGear - Win32 Debug"
# PROP Intermediate_Dir "Debug\Lib_GUI"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\src\GUI\net_dlg.cxx
!IF "$(CFG)" == "FlightGear - Win32 Release"
# PROP Intermediate_Dir "Release\Lib_GUI"
!ELSEIF "$(CFG)" == "FlightGear - Win32 Debug"
# PROP Intermediate_Dir "Debug\Lib_GUI"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\src\GUI\trackball.c
!IF "$(CFG)" == "FlightGear - Win32 Release"
# PROP Intermediate_Dir "Release\Lib_GUI"
!ELSEIF "$(CFG)" == "FlightGear - Win32 Debug"
# PROP Intermediate_Dir "Debug\Lib_GUI"
!ENDIF
# End Source File
# End Group
# Begin Group "Lib_Joystick"

View file

@ -184,10 +184,10 @@ void FGAutopilot::MakeTargetWPStr( double distance ) {
void FGAutopilot::update_old_control_values() {
old_aileron = FGBFI::getAileron();
old_elevator = FGBFI::getElevator();
old_elevator_trim = FGBFI::getElevatorTrim();
old_rudder = FGBFI::getRudder();
old_aileron = controls.get_aileron();
old_elevator = controls.get_elevator();
old_elevator_trim = controls.get_elevator_trim();
old_rudder = controls.get_rudder();
}

View file

@ -755,6 +755,4 @@ void fgCockpitUpdate( void ) {
globals->get_options()->get_xsize(),
globals->get_options()->get_ysize() );
if (current_panel != 0)
current_panel->update();
}

View file

@ -33,7 +33,9 @@
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/fgpath.hxx>
#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
#include <Objects/texload.h>
#include <Time/light.hxx>
@ -143,6 +145,7 @@ FGPanel::FGPanel (int window_x, int window_y, int window_w, int window_h)
*/
FGPanel::~FGPanel ()
{
unbind();
for (instrument_list_type::iterator it = _instruments.begin();
it != _instruments.end();
it++) {
@ -162,11 +165,45 @@ FGPanel::addInstrument (FGPanelInstrument * instrument)
}
/**
* Initialize the panel.
*/
void
FGPanel::init ()
{
// NO-OP
}
/**
* Bind panel properties.
*/
void
FGPanel::bind ()
{
fgTie("/sim/panel/visibility", &_visibility);
fgTie("/sim/panel/x-offset", &_x_offset);
fgTie("/sim/panel/y-offset", &_y_offset);
}
/**
* Unbind panel properties.
*/
void
FGPanel::unbind ()
{
fgUntie("/sim/panel/visibility");
fgUntie("/sim/panel/x-offset");
fgUntie("/sim/panel/y-offset");
}
/**
* Update the panel.
*/
void
FGPanel::update () const
FGPanel::update ()
{
// Do nothing if the panel isn't visible.
if (!fgPanelVisible())

View file

@ -46,6 +46,8 @@
#include <map>
#include <plib/fnt.h>
#include <Main/fgfs.hxx>
FG_USING_STD(vector);
FG_USING_STD(map);
@ -119,19 +121,22 @@ private:
// the appropriate instruments for processing.
////////////////////////////////////////////////////////////////////////
class FGPanel
class FGPanel : public FGSubsystem
{
public:
FGPanel (int window_x, int window_y, int window_w, int window_h);
virtual ~FGPanel ();
// Update the panel (every frame).
virtual void init ();
virtual void bind ();
virtual void unbind ();
virtual void update ();
// transfer pointer ownership!!!
virtual void addInstrument (FGPanelInstrument * instrument);
// Update the panel (every frame).
virtual void update () const;
// Background texture.
virtual void setBackground (ssgTexture * texture);

View file

@ -25,6 +25,7 @@
#include <Main/bfi.hxx>
#include <Navaids/ilslist.hxx>
#include <Navaids/navlist.hxx>
#include <Time/event.hxx>
#include "radiostack.hxx"
@ -56,6 +57,11 @@ kludgeRange (double stationElev, double aircraftElev, double nominalRange)
FGRadioStack *current_radiostack;
// periodic radio station search wrapper
static void fgRadioSearch( void ) {
current_radiostack->search();
}
// Constructor
FGRadioStack::FGRadioStack() {
nav1_radial = 0.0;
@ -63,16 +69,114 @@ FGRadioStack::FGRadioStack() {
nav2_radial = 0.0;
nav2_dme_dist = 0.0;
need_update = true;
longitudeVal = globals->get_props()->getValue("/position/longitude");
latitudeVal = globals->get_props()->getValue("/position/latitude");
altitudeVal = globals->get_props()->getValue("/position/altitude");
}
// Destructor
FGRadioStack::~FGRadioStack() {
FGRadioStack::~FGRadioStack()
{
unbind(); // FIXME: should be called externally
}
void
FGRadioStack::init ()
{
search();
update();
// Search radio database once per second
global_events.Register( "fgRadioSearch()", fgRadioSearch,
fgEVENT::FG_EVENT_READY, 1000);
}
void
FGRadioStack::bind ()
{
// User inputs
fgTie("/radios/nav1/frequencies/selected", this,
&FGRadioStack::get_nav1_freq, &FGRadioStack::set_nav1_freq);
fgTie("/radios/nav1/frequencies/standby", this,
&FGRadioStack::get_nav1_alt_freq, &FGRadioStack::set_nav1_alt_freq);
fgTie("/radios/nav1/radials/selected", this,
&FGRadioStack::get_nav1_sel_radial,
&FGRadioStack::set_nav1_sel_radial);
// Radio outputs
fgTie("/radios/nav1/radials/actual", this, &FGRadioStack::get_nav1_radial);
fgTie("/radios/nav1/to-flag", this, &FGRadioStack::get_nav1_to_flag);
fgTie("/radios/nav1/from-flag", this, &FGRadioStack::get_nav1_from_flag);
fgTie("/radios/nav1/in-range", this, &FGRadioStack::get_nav1_inrange);
fgTie("/radios/nav1/dme/distance", this, &FGRadioStack::get_nav1_dme_dist);
fgTie("/radios/nav1/dme/in-range", this,
&FGRadioStack::get_nav1_dme_inrange);
// User inputs
fgTie("/radios/nav2/frequencies/selected", this,
&FGRadioStack::get_nav2_freq, &FGRadioStack::set_nav2_freq);
fgTie("/radios/nav2/frequencies/standby", this,
&FGRadioStack::get_nav2_alt_freq, &FGRadioStack::set_nav2_alt_freq);
fgTie("/radios/nav2/radials/selected", this,
&FGRadioStack::get_nav2_sel_radial,
&FGRadioStack::set_nav2_sel_radial);
// Radio outputs
fgTie("/radios/nav2/radials/actual", this, &FGRadioStack::get_nav2_radial);
fgTie("/radios/nav2/to-flag", this, &FGRadioStack::get_nav2_to_flag);
fgTie("/radios/nav2/from-flag", this, &FGRadioStack::get_nav2_from_flag);
fgTie("/radios/nav2/in-range", this, &FGRadioStack::get_nav2_inrange);
fgTie("/radios/nav2/dme/distance", this, &FGRadioStack::get_nav2_dme_dist);
fgTie("/radios/nav2/dme/in-range", this,
&FGRadioStack::get_nav2_dme_inrange);
// User inputs
fgTie("/radios/adf/frequencies/selected", this,
&FGRadioStack::get_adf_freq, &FGRadioStack::set_adf_freq);
fgTie("/radios/adf/frequencies/standby", this,
&FGRadioStack::get_adf_alt_freq, &FGRadioStack::set_adf_alt_freq);
fgTie("/radios/adf/rotation", this,
&FGRadioStack::get_adf_rotation, &FGRadioStack::set_adf_rotation);
}
void
FGRadioStack::unbind ()
{
fgUntie("/radios/nav1/frequencies/selected");
fgUntie("/radios/nav1/frequencies/standby");
fgUntie("/radios/nav1/radials/actual");
fgUntie("/radios/nav1/radials/selected");
fgUntie("/radios/nav1/to-flag");
fgUntie("/radios/nav1/from-flag");
fgUntie("/radios/nav1/in-range");
fgUntie("/radios/nav1/dme/distance");
fgUntie("/radios/nav1/dme/in-range");
fgUntie("/radios/nav2/frequencies/selected");
fgUntie("/radios/nav2/frequencies/standby");
fgUntie("/radios/nav2/radials/actual");
fgUntie("/radios/nav2/radials/selected");
fgUntie("/radios/nav2/to-flag");
fgUntie("/radios/nav2/from-flag");
fgUntie("/radios/nav2/in-range");
fgUntie("/radios/nav2/dme/distance");
fgUntie("/radios/nav2/dme/in-range");
fgUntie("/radios/adf/frequencies/selected");
fgUntie("/radios/adf/frequencies/standby");
fgUntie("/radios/adf/rotation");
}
// Search the database for the current frequencies given current location
void FGRadioStack::update( double lon, double lat, double elev ) {
void
FGRadioStack::update()
{
double lon = longitudeVal->getDoubleValue() * DEG_TO_RAD;
double lat = latitudeVal->getDoubleValue() * DEG_TO_RAD;
double elev = altitudeVal->getDoubleValue() * FEET_TO_METER;
need_update = false;
Point3D aircraft = sgGeodToCart( Point3D( lon, lat, elev ) );
@ -194,7 +298,12 @@ void FGRadioStack::update( double lon, double lat, double elev ) {
// Update current nav/adf radio stations based on current postition
void FGRadioStack::search( double lon, double lat, double elev ) {
void FGRadioStack::search ()
{
double lon = longitudeVal->getDoubleValue() * DEG_TO_RAD;
double lat = latitudeVal->getDoubleValue() * DEG_TO_RAD;
double elev = altitudeVal->getDoubleValue() * FEET_TO_METER;
// nav1
FGILS ils;
FGNav nav;
@ -249,7 +358,7 @@ void FGRadioStack::search( double lon, double lat, double elev ) {
} else {
nav1_valid = false;
nav1_radial = 0;
nav2_dme_dist = 0;
nav1_dme_dist = 0;
// cout << "not picking up vor1. :-(" << endl;
}
@ -323,9 +432,75 @@ void FGRadioStack::search( double lon, double lat, double elev ) {
}
// periodic radio station search wrapper
void fgRadioSearch( void ) {
current_radiostack->search( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude(),
cur_fdm_state->get_Altitude() * FEET_TO_METER );
/**
* Return true if the NAV1 TO flag should be active.
*/
bool
FGRadioStack::get_nav1_to_flag () const
{
if (nav1_inrange) {
double offset = fabs(nav1_heading - nav1_radial);
if (nav1_loc)
return (offset <= 8.0 || offset >= 352.0);
else
return (offset <= 20.0 || offset >= 340.0);
} else {
return false;
}
}
/**
* Return true if the NAV1 FROM flag should be active.
*/
bool
FGRadioStack::get_nav1_from_flag () const
{
if (nav1_inrange) {
double offset = fabs(nav1_heading - nav1_radial);
if (nav1_loc)
return (offset >= 172.0 && offset <= 188.0);
else
return (offset >= 160.0 && offset <= 200.0);
} else {
return false;
}
}
/**
* Return true if the NAV2 TO flag should be active.
*/
bool
FGRadioStack::get_nav2_to_flag () const
{
if (nav2_inrange) {
double offset = fabs(nav2_heading - nav2_radial);
if (nav2_loc)
return (offset <= 8.0 || offset >= 352.0);
else
return (offset <= 20.0 || offset >= 340.0);
} else {
return false;
}
}
/**
* Return true if the NAV2 FROM flag should be active.
*/
bool
FGRadioStack::get_nav2_from_flag () const
{
if (nav2_inrange) {
double offset = fabs(nav2_heading - nav2_radial);
if (nav2_loc)
return (offset >= 172.0 && offset <= 188.0);
else
return (offset >= 160.0 && offset <= 200.0);
} else {
return false;
}
}

View file

@ -25,13 +25,22 @@
#define _FG_RADIOSTACK_HXX
#include <Main/fgfs.hxx>
#include <Main/fg_props.hxx>
#include <simgear/compiler.h>
#include <Navaids/ilslist.hxx>
#include <Navaids/navlist.hxx>
class FGRadioStack {
class FGRadioStack : public FGSubsystem
{
SGValue * latitudeVal;
SGValue * longitudeVal;
SGValue * altitudeVal;
bool need_update;
@ -121,11 +130,13 @@ public:
FGRadioStack();
~FGRadioStack();
// Update nav/adf radios based on current postition
void search( double lon, double lat, double elev );
void init ();
void bind ();
void unbind ();
void update ();
// Update nav/adf radios based on current postition
void update( double lon, double lat, double elev );
void search ();
// NAV1 Setters
inline void set_nav1_freq( double freq ) {
@ -170,7 +181,12 @@ public:
// Calculated values.
inline bool get_nav1_inrange() const { return nav1_inrange; }
bool get_nav1_to_flag () const;
bool get_nav1_from_flag () const;
inline bool get_nav1_has_dme() const { return nav1_has_dme; }
inline bool get_nav1_dme_inrange () const {
return nav1_inrange && nav1_has_dme;
}
inline bool get_nav1_has_gs() const { return nav1_has_gs; }
inline bool get_nav1_loc() const { return nav1_loc; }
inline double get_nav1_loclon() const { return nav1_loclon; }
@ -188,7 +204,12 @@ public:
inline double get_nav1_target_gs() const { return nav1_target_gs; }
inline bool get_nav2_inrange() const { return nav2_inrange; }
bool get_nav2_to_flag () const;
bool get_nav2_from_flag () const;
inline bool get_nav2_has_dme() const { return nav2_has_dme; }
inline bool get_nav2_dme_inrange () const {
return nav2_inrange && nav2_has_dme;
}
inline bool get_nav2_has_gs() const { return nav2_has_gs; }
inline bool get_nav2_loc() const { return nav2_loc; }
inline double get_nav2_loclon() const { return nav2_loclon; }
@ -214,9 +235,4 @@ public:
extern FGRadioStack *current_radiostack;
// periodic radio station search wrapper
void fgRadioSearch( void );
#endif // _FG_RADIOSTACK_HXX

View file

@ -299,7 +299,7 @@ void FGSteam::_CatchUp()
scaling capability for the vacuum pump later on.
When we have a real engine model, we can ask it.
*/
the_ENGINE_rpm = FGBFI::getThrottle() * 26.0;
the_ENGINE_rpm = controls.get_throttle(0) * 26.0;
/**************************
This is just temporary, until the static source works,

View file

@ -4,6 +4,8 @@
//
// Copyright (C) 2000 David Megginson - david@megginson.com
//
// THIS CLASS IS DEPRECATED; USE THE PROPERTY MANAGER INSTEAD.
//
// 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
@ -84,13 +86,6 @@ reinit ()
FG_LOG(FG_GENERAL, FG_INFO, "Starting BFI reinit");
// TODO: add more AP stuff
double elevator = FGBFI::getElevator();
double aileron = FGBFI::getAileron();
double rudder = FGBFI::getRudder();
double throttle = FGBFI::getThrottle();
double elevator_trim = FGBFI::getElevatorTrim();
double flaps = FGBFI::getFlaps();
double brake = FGBFI::getBrakes();
bool apHeadingLock = FGBFI::getAPHeadingLock();
double apHeadingMag = FGBFI::getAPHeadingMag();
bool apAltitudeLock = FGBFI::getAPAltitudeLock();
@ -113,16 +108,9 @@ reinit ()
cur_light_params.Update();
fgUpdateLocalTime();
fgUpdateWeatherDatabase();
fgRadioSearch();
current_radiostack->search();
// Restore all of the old states.
FGBFI::setElevator(elevator);
FGBFI::setAileron(aileron);
FGBFI::setRudder(rudder);
FGBFI::setThrottle(throttle);
FGBFI::setElevatorTrim(elevator_trim);
FGBFI::setFlaps(flaps);
FGBFI::setBrakes(brake);
FGBFI::setAPHeadingLock(apHeadingLock);
FGBFI::setAPHeadingMag(apHeadingMag);
FGBFI::setAPAltitudeLock(apAltitudeLock);
@ -229,9 +217,6 @@ FGBFI::init ()
fgTie("/sim/time/gmt", getDateString, setDateString);
fgTie("/sim/time/gmt-string", getGMTString);
fgTie("/sim/hud/visibility", getHUDVisible, setHUDVisible);
fgTie("/sim/panel/visibility", getPanelVisible, setPanelVisible);
fgTie("/sim/panel/x-offset", getPanelXOffset, setPanelXOffset);
fgTie("/sim/panel/y-offset", getPanelYOffset, setPanelYOffset);
// Position
fgTie("/position/airport-id", getTargetAirport, setTargetAirport);
@ -260,22 +245,6 @@ FGBFI::init ()
fgTie("/velocities/speed-east", getSpeedEast);
fgTie("/velocities/speed-down", getSpeedDown);
// Controls
#if 0
fgTie("/controls/throttle", getThrottle, setThrottle);
fgTie("/controls/mixture", getMixture, setMixture);
fgTie("/controls/propellor-pitch", getPropAdvance, setPropAdvance);
fgTie("/controls/flaps", getFlaps, setFlaps);
fgTie("/controls/aileron", getAileron, setAileron);
fgTie("/controls/rudder", getRudder, setRudder);
fgTie("/controls/elevator", getElevator, setElevator);
fgTie("/controls/elevator-trim", getElevatorTrim, setElevatorTrim);
fgTie("/controls/brakes/all", getBrakes, setBrakes);
fgTie("/controls/brakes/left", getLeftBrake, setLeftBrake);
fgTie("/controls/brakes/right", getRightBrake, setRightBrake);
fgTie("/controls/brakes/center", getRightBrake, setCenterBrake);
#endif
// Autopilot
fgTie("/autopilot/locks/altitude", getAPAltitudeLock, setAPAltitudeLock);
fgTie("/autopilot/settings/altitude", getAPAltitude, setAPAltitude);
@ -285,34 +254,6 @@ FGBFI::init ()
getAPHeadingMag, setAPHeadingMag);
fgTie("/autopilot/locks/nav1", getAPNAV1Lock, setAPNAV1Lock);
// Radio navigation
fgTie("/radios/nav1/frequencies/selected", getNAV1Freq, setNAV1Freq);
fgTie("/radios/nav1/frequencies/standby", getNAV1AltFreq, setNAV1AltFreq);
fgTie("/radios/nav1/radials/actual", getNAV1Radial);
fgTie("/radios/nav1/radials/selected",
getNAV1SelRadial, setNAV1SelRadial);
fgTie("/radios/nav1/dme/distance", getNAV1DistDME);
fgTie("/radios/nav1/to-flag", getNAV1TO);
fgTie("/radios/nav1/from-flag", getNAV1FROM);
fgTie("/radios/nav1/in-range", getNAV1InRange);
fgTie("/radios/nav1/dme/in-range", getNAV1DMEInRange);
fgTie("/radios/nav2/frequencies/selected", getNAV2Freq, setNAV2Freq);
fgTie("/radios/nav2/frequencies/standby",
getNAV2AltFreq, setNAV2AltFreq);
fgTie("/radios/nav2/radials/actual", getNAV2Radial);
fgTie("/radios/nav2/radials/selected",
getNAV2SelRadial, setNAV2SelRadial);
fgTie("/radios/nav2/dme/distance", getNAV2DistDME);
fgTie("/radios/nav2/to-flag", getNAV2TO);
fgTie("/radios/nav2/from-flag", getNAV2FROM);
fgTie("/radios/nav2/in-range", getNAV2InRange);
fgTie("/radios/nav2/dme/in-range", getNAV2DMEInRange);
fgTie("/radios/adf/frequencies/selected", getADFFreq, setADFFreq);
fgTie("/radios/adf/frequencies/standby", getADFAltFreq, setADFAltFreq);
fgTie("/radios/adf/rotation", getADFRotation, setADFRotation);
// Weather
fgTie("/environment/visibility", getVisibility, setVisibility);
fgTie("/environment/wind-north", getWindNorth, setWindNorth);
@ -531,78 +472,6 @@ FGBFI::setHUDVisible (bool visible)
}
/**
* Return true if the 2D panel is visible.
*/
bool
FGBFI::getPanelVisible ()
{
return globals->get_options()->get_panel_status();
}
/**
* Ensure that the 2D panel is visible or hidden.
*/
void
FGBFI::setPanelVisible (bool visible)
{
if (globals->get_options()->get_panel_status() != visible) {
globals->get_options()->toggle_panel();
}
}
/**
* Get the panel's current x-shift.
*/
int
FGBFI::getPanelXOffset ()
{
if (current_panel != 0)
return current_panel->getXOffset();
else
return 0;
}
/**
* Set the panel's current x-shift.
*/
void
FGBFI::setPanelXOffset (int offset)
{
if (current_panel != 0)
current_panel->setXOffset(offset);
}
/**
* Get the panel's current y-shift.
*/
int
FGBFI::getPanelYOffset ()
{
if (current_panel != 0)
return current_panel->getYOffset();
else
return 0;
}
/**
* Set the panel's current y-shift.
*/
void
FGBFI::setPanelYOffset (int offset)
{
if (current_panel != 0)
current_panel->setYOffset(offset);
}
////////////////////////////////////////////////////////////////////////
// Position
@ -969,6 +838,7 @@ FGBFI::getSpeedDown ()
// Controls
////////////////////////////////////////////////////////////////////////
#if 0
/**
* Get the throttle setting, from 0.0 (none) to 1.0 (full).
@ -1226,7 +1096,7 @@ FGBFI::setRightBrake (double brake)
}
#endif
////////////////////////////////////////////////////////////////////////
@ -1377,255 +1247,6 @@ FGBFI::setAPNAV1Lock (bool lock)
}
////////////////////////////////////////////////////////////////////////
// Radio navigation.
////////////////////////////////////////////////////////////////////////
double
FGBFI::getNAV1Freq ()
{
return current_radiostack->get_nav1_freq();
}
double
FGBFI::getNAV1AltFreq ()
{
return current_radiostack->get_nav1_alt_freq();
}
double
FGBFI::getNAV1Radial ()
{
return current_radiostack->get_nav1_radial();
}
double
FGBFI::getNAV1SelRadial ()
{
return current_radiostack->get_nav1_sel_radial();
}
double
FGBFI::getNAV1DistDME ()
{
return current_radiostack->get_nav1_dme_dist();
}
bool
FGBFI::getNAV1TO ()
{
if (current_radiostack->get_nav1_inrange()) {
double heading = current_radiostack->get_nav1_heading();
double radial = current_radiostack->get_nav1_radial();
// double var = FGBFI::getMagVar();
if (current_radiostack->get_nav1_loc()) {
double offset = fabs(heading - radial);
return (offset<= 8.0 || offset >= 352.0);
} else {
// double offset =
// fabs(heading - var - radial);
double offset = fabs(heading - radial);
return (offset <= 20.0 || offset >= 340.0);
}
} else {
return false;
}
}
bool
FGBFI::getNAV1FROM ()
{
if (current_radiostack->get_nav1_inrange()) {
double heading = current_radiostack->get_nav1_heading();
double radial = current_radiostack->get_nav1_radial();
// double var = FGBFI::getMagVar();
if (current_radiostack->get_nav1_loc()) {
double offset = fabs(heading - radial);
return (offset >= 172.0 && offset<= 188.0);
} else {
// double offset =
// fabs(heading - var - radial);
double offset = fabs(heading - radial);
return (offset >= 160.0 && offset <= 200.0);
}
} else {
return false;
}
}
bool
FGBFI::getNAV1InRange ()
{
return current_radiostack->get_nav1_inrange();
}
bool
FGBFI::getNAV1DMEInRange ()
{
return (current_radiostack->get_nav1_inrange() &&
current_radiostack->get_nav1_has_dme());
}
double
FGBFI::getNAV2Freq ()
{
return current_radiostack->get_nav2_freq();
}
double
FGBFI::getNAV2AltFreq ()
{
return current_radiostack->get_nav2_alt_freq();
}
double
FGBFI::getNAV2Radial ()
{
return current_radiostack->get_nav2_radial();
}
double
FGBFI::getNAV2SelRadial ()
{
return current_radiostack->get_nav2_sel_radial();
}
double
FGBFI::getNAV2DistDME ()
{
return current_radiostack->get_nav2_dme_dist();
}
bool
FGBFI::getNAV2TO ()
{
if (current_radiostack->get_nav2_inrange()) {
double heading = current_radiostack->get_nav2_heading();
double radial = current_radiostack->get_nav2_radial();
// double var = FGBFI::getMagVar();
if (current_radiostack->get_nav2_loc()) {
double offset = fabs(heading - radial);
return (offset<= 8.0 || offset >= 352.0);
} else {
// double offset =
// fabs(heading - var - radial);
double offset = fabs(heading - radial);
return (offset <= 20.0 || offset >= 340.0);
}
} else {
return false;
}
}
bool
FGBFI::getNAV2FROM ()
{
if (current_radiostack->get_nav2_inrange()) {
double heading = current_radiostack->get_nav2_heading();
double radial = current_radiostack->get_nav2_radial();
// double var = FGBFI::getMagVar();
if (current_radiostack->get_nav2_loc()) {
double offset = fabs(heading - radial);
return (offset >= 172.0 && offset<= 188.0);
} else {
// double offset =
// fabs(heading - var - radial);
double offset = fabs(heading - radial);
return (offset >= 160.0 && offset <= 200.0);
}
} else {
return false;
}
}
bool
FGBFI::getNAV2InRange ()
{
return current_radiostack->get_nav2_inrange();
}
bool
FGBFI::getNAV2DMEInRange ()
{
return (current_radiostack->get_nav2_inrange() &&
current_radiostack->get_nav2_has_dme());
}
double
FGBFI::getADFFreq ()
{
return current_radiostack->get_adf_freq();
}
double
FGBFI::getADFAltFreq ()
{
return current_radiostack->get_adf_alt_freq();
}
double
FGBFI::getADFRotation ()
{
return current_radiostack->get_adf_rotation();
}
void
FGBFI::setNAV1Freq (double freq)
{
current_radiostack->set_nav1_freq(freq);
}
void
FGBFI::setNAV1AltFreq (double freq)
{
current_radiostack->set_nav1_alt_freq(freq);
}
void
FGBFI::setNAV1SelRadial (double radial)
{
current_radiostack->set_nav1_sel_radial(radial);
}
void
FGBFI::setNAV2Freq (double freq)
{
current_radiostack->set_nav2_freq(freq);
}
void
FGBFI::setNAV2AltFreq (double freq)
{
current_radiostack->set_nav2_alt_freq(freq);
}
void
FGBFI::setNAV2SelRadial (double radial)
{
current_radiostack->set_nav2_sel_radial(radial);
}
void
FGBFI::setADFFreq (double freq)
{
current_radiostack->set_adf_freq(freq);
}
void
FGBFI::setADFAltFreq (double freq)
{
current_radiostack->set_adf_alt_freq(freq);
}
void
FGBFI::setADFRotation (double rot)
{
current_radiostack->set_adf_rotation(rot);
}
////////////////////////////////////////////////////////////////////////
// GPS

View file

@ -4,6 +4,8 @@
//
// Copyright (C) 2000 David Megginson - david@megginson.com
//
// THIS INTERFACE IS DEPRECATED; USE THE PROPERTY MANAGER INSTEAD.
//
// 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
@ -73,16 +75,6 @@ public:
static bool getHUDVisible ();
static void setHUDVisible (bool hudVisible);
static bool getPanelVisible ();
static void setPanelVisible (bool panelVisible);
static int getPanelXOffset (); // pixels
static void setPanelXOffset (int i); // pixels
static int getPanelYOffset (); // pixels
static void setPanelYOffset (int i); // pixels
// Position
static double getLatitude (); // degrees
static void setLatitude (double latitude); // degrees
@ -135,6 +127,7 @@ public:
// static void setSpeedDown (double speed);
#if 0
// Controls
static double getThrottle (); // 0.0:1.0
static void setThrottle (double throttle); // 0.0:1.0
@ -172,6 +165,7 @@ public:
static double getCenterBrake (); // 0.0:1.0
static void setCenterBrake (double brake); // 0.0:1.0
#endif
// Autopilot
static bool getAPAltitudeLock ();
@ -192,57 +186,6 @@ public:
static bool getAPNAV1Lock ();
static void setAPNAV1Lock (bool lock);
// Radio Navigation
static double getNAV1Freq ();
static void setNAV1Freq (double freq);
static double getNAV1AltFreq ();
static void setNAV1AltFreq (double freq);
static double getNAV1Radial (); // degrees
static double getNAV1SelRadial (); // degrees
static void setNAV1SelRadial (double radial); // degrees
static double getNAV1DistDME (); // nautical miles
static bool getNAV1TO ();
static bool getNAV1FROM ();
static bool getNAV1InRange ();
static bool getNAV1DMEInRange ();
static double getNAV2Freq ();
static void setNAV2Freq (double freq);
static double getNAV2AltFreq ();
static void setNAV2AltFreq (double freq);
static double getNAV2Radial (); // degrees
static double getNAV2SelRadial (); // degrees
static void setNAV2SelRadial (double radial); // degrees
static double getNAV2DistDME (); // nautical miles
static bool getNAV2TO ();
static bool getNAV2FROM ();
static bool getNAV2InRange ();
static bool getNAV2DMEInRange ();
static double getADFFreq ();
static void setADFFreq (double freq);
static double getADFAltFreq ();
static void setADFAltFreq (double freq);
static double getADFRotation (); // degrees
static void setADFRotation (double rot); // degrees
// GPS
static string getTargetAirport ();

View file

@ -663,21 +663,10 @@ bool fgInitSubsystems( void ) {
p_fix.append( "Navaids/default.fix" );
current_fixlist->init( p_fix );
// Initialize the underlying radio stack model
// Radio stack subsystem.
current_radiostack = new FGRadioStack;
current_radiostack->search( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude(),
cur_fdm_state->get_Altitude() * FEET_TO_METER );
current_radiostack->update( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude(),
cur_fdm_state->get_Altitude() * FEET_TO_METER );
// Search radio database once per second
global_events.Register( "fgRadioSearch()", fgRadioSearch,
fgEVENT::FG_EVENT_READY, 1000);
current_radiostack->init();
current_radiostack->bind();
// Initialize the Cockpit subsystem
if( fgCockpitInit( &current_aircraft )) {
@ -746,6 +735,8 @@ bool fgInitSubsystems( void ) {
"Error reading new panel from " << panel_path );
} else {
FG_LOG( FG_INPUT, FG_INFO, "Loaded new panel from " << panel_path );
current_panel->init();
current_panel->bind();
}
// Initialize the BFI

View file

@ -456,6 +456,7 @@ void GLUTspecialkey(int k, int x, int y) {
return;
}
FG_LOG(FG_INPUT, FG_INFO, "Loaded new panel from " << panel_path);
current_panel->unbind();
delete current_panel;
current_panel = new_panel;
return;

View file

@ -642,7 +642,7 @@ void fgRenderFrame( void ) {
// set up moving parts
if (flaps_selector != NULL) {
flaps_selector->select( (FGBFI::getFlaps() > 0.5f) ? 1 : 2 );
flaps_selector->select( (controls.get_flaps() > 0.5f) ? 1 : 2 );
}
if (prop_selector != NULL) {
@ -708,9 +708,17 @@ void fgRenderFrame( void ) {
glDisable( GL_DEPTH_TEST );
// glDisable( GL_CULL_FACE );
// glDisable( GL_TEXTURE_2D );
// update the controls subsystem
controls.update();
hud_and_panel->apply();
fgCockpitUpdate();
// update the panel subsystem
if (current_panel != 0)
current_panel->update();
// We can do translucent menus, so why not. :-)
menus->apply();
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
@ -823,9 +831,7 @@ void fgUpdateTimeDepCalcs(int multi_loop, int remainder) {
cur_fdm_state->get_Latitude() );
// Update radio stack model
current_radiostack->update( cur_fdm_state->get_Longitude(),
cur_fdm_state->get_Latitude(),
cur_fdm_state->get_Altitude() * FEET_TO_METER );
current_radiostack->update();
}