From fee003e8cc17f0aa9a1e9280dd823d20e231e967 Mon Sep 17 00:00:00 2001 From: ehofman Date: Tue, 30 Nov 2004 12:14:17 +0000 Subject: [PATCH] Melchior FRANZ: I understand that the new hud/runway feature is still very experimental, and that the search criteria for the active runway don't necessarily make much sense. (We are searching for a runway on /sim/presets/airport-id that matches the current wind direction best, and not the tuned in ILS runway or something!) Anyway: the new hud code completely denies the possibility of globals->get_runways()->search() not finding a runway and returning false. There's always a runway found at KSFO, but not so at e.g. LOXL, in which case we are handing garbage over to sg_geodesy.cxx and find ourselves caught in an endless loop in geo_direct_wgs_84(). --- src/Cockpit/hud.hxx | 2 +- src/Cockpit/hud_rwy.cxx | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Cockpit/hud.hxx b/src/Cockpit/hud.hxx index 8c1d3532f..5b9530327 100644 --- a/src/Cockpit/hud.hxx +++ b/src/Cockpit/hud.hxx @@ -692,7 +692,7 @@ private: bool boundOutsidePoints(sgdVec3 v, sgdVec3 m); bool drawLine(sgdVec3 a1, sgdVec3 a2, sgdVec3 p1, sgdVec3 p2); void drawArrow(); - FGRunway get_active_runway(); + bool get_active_runway(FGRunway& rwy); void get_rwy_points(sgdVec3 *points); void setLineWidth(void); diff --git a/src/Cockpit/hud_rwy.cxx b/src/Cockpit/hud_rwy.cxx index a339bf510..e2b30c71a 100644 --- a/src/Cockpit/hud_rwy.cxx +++ b/src/Cockpit/hud_rwy.cxx @@ -43,8 +43,6 @@ runway_instr::runway_instr(int x, float scale_data, bool working):instr_item(x,y,width,height,NULL,scale_data,0,working) { - runway = get_active_runway(); - get_rwy_points(points3d); stippleOut=0xFFFF; stippleCen=0xFFFF; arrowScale = 1.0; @@ -65,7 +63,7 @@ runway_instr::runway_instr(int x, } void runway_instr::draw() { - if (!is_broken()) { + if (!is_broken() && get_active_runway(runway)) { glPushAttrib(GL_LINE_STIPPLE | GL_LINE_STIPPLE_PATTERN | GL_LINE_WIDTH); float modelView[4][4],projMat[4][4]; bool anyLines; @@ -90,8 +88,6 @@ void runway_instr::draw() { } //Set the camera to the cockpit view to get the view of the runway from the cockpit ssgSetCamera((sgVec4 *)cockpit_view->get_VIEW()); - //Get the currently active runway and the 3d points - runway = get_active_runway(); get_rwy_points(points3d); //Get the current project matrix ssgGetProjectionMatrix(projMat); @@ -150,13 +146,11 @@ void runway_instr::draw() { }//if not broken } -FGRunway runway_instr::get_active_runway() { +bool runway_instr::get_active_runway(FGRunway& runway) { FGEnvironment stationweather = ((FGEnvironmentMgr *)globals->get_subsystem("environment"))->getEnvironment(); double hdg = stationweather.get_wind_from_heading_deg(); - FGRunway runway; - globals->get_runways()->search( fgGetString("/sim/presets/airport-id"), int(hdg), &runway); - return runway; + return globals->get_runways()->search( fgGetString("/sim/presets/airport-id"), int(hdg), &runway); } void runway_instr::get_rwy_points(sgdVec3 *points3d) { -- 2.39.5