- instr_item *HIptr;
-// int index;
- int font_size;
-
- int off = 50;
- int min_x = 25; //off/2;
- int max_x = 615; //640-(off/2);
-// int min_y = off;
- int max_y = 430; //480-off;
- int cen_x = 320;
- int cen_y = 240;
- unsigned int text_h = 10;
- unsigned int ladr_w2 = 60;
- int ladr_h2 = 90;
- int ladr_t = 35;
- int compass_w = 200;
- int gap = 10;
-
- font_size = (current_options.get_xsize() > 1000) ? LARGE : SMALL;
-
- HUD_style = 1;
-
- FG_LOG( FG_COCKPIT, FG_INFO, "Initializing current aircraft HUD" );
-
-// deque < instr_item * > :: iterator first = HUD_deque.begin();
-// deque < instr_item * > :: iterator last = HUD_deque.end();
-// HUD_deque.erase( first, last); // empty the HUD deque
-
- HUD_deque.erase( HUD_deque.begin(), HUD_deque.end()); // empty the HUD deque
-
-// hud->code = 1;
-// hud->status = 0;
-
- // For now lets just hardcode the hud here.
- // In the future, hud information has to come from the same place
- // aircraft information came from.
-
-// fgHUDSetTimeMode( hud, NIGHT );
-// fgHUDSetBrightness( hud, BRT_LIGHT );
-
-// case 0: // TBI
- int x = 290; /*cen_x-30*/
- int y = 45; /*off-5*/
-// HIptr = (instr_item *) new fgTBI_instr( x, y, ladr_w2, text_h );
- HIptr = (instr_item *) new fgTBI_instr( 290, 45, 60, 10 );
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 1: // Artificial Horizon
- HIptr = (instr_item *) new HudLadder( cen_x-ladr_w2, cen_y-ladr_h2,
- 2*ladr_w2, 2*ladr_h2 );
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 4: // GYRO COMPASS
- HIptr = (instr_item *) new hud_card( cen_x-(compass_w/2),
- max_y,
- compass_w,
- 28,
- get_heading,
- HUDS_TOP,
- 360, 0,
- 1.0,
- 5, 1,
- 360,
- 0,
- 25,
- true);
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 5: // AMSL
- HIptr = (instr_item *) new hud_card( max_x - 35 -15, // 15 to balance speed card
- cen_y-(compass_w/2),
- 35,
- compass_w,
- get_altitude,
-// HUDS_RIGHT | HUDS_VERT,
- HUDS_LEFT | HUDS_VERT,
- 5000, -1000,
- 1.0,
- 100, 25,
- 0,
- 0,
- 250,
- true);
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 6:
- HIptr = (instr_item *) new guage_instr( cen_x-50, // x
- cen_y + ladr_h2 -20, // y
- 100, // width
- 20, // height
- get_aileronval, // data source
- HUDS_BOTTOM | HUDS_NOTEXT,
- 100.0,
- +1.0,
- -1.0);
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 3: // Radio Altimeter
- HIptr = (instr_item *) new hud_card( cen_x + ladr_w2 + gap + 13 + ladr_t,
- cen_y-75,
- 25,
- 150,
- get_agl,
- HUDS_LEFT | HUDS_VERT,
- 1000, 0,
- 1.0,
- 25, 5,
- 0,
- 0,
- 200.0,
- true);
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 7:
- HIptr = (instr_item *) new guage_instr( cen_x -ladr_w2 -gap -13 -20 -ladr_t,
- cen_y-50, // y
- 20, // width
- 100, // height
- get_elevatorval, // data source
- HUDS_RIGHT | HUDS_VERT | HUDS_NOTEXT,
- -100.0, // Scale data
- +1.0, // Data Range
- -1.0);
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 8:
- HIptr = (instr_item *) new guage_instr( cen_x-50, // x
- cen_y -gap -ladr_w2 -20, //-85 // y
- 100, // width
- 20, // height
- get_rudderval, // data source
- HUDS_TOP | HUDS_NOTEXT,
- 100.0,
- +1.0,
- -1.0);
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 2: // KIAS
- HIptr = (instr_item *) new hud_card( min_x +10 +5, //min_x +18,
- cen_y-(compass_w/2),
- 28,
- compass_w,
- get_speed,
-// HUDS_LEFT | HUDS_VERT,
- HUDS_RIGHT | HUDS_VERT,
- 200.0, 0.0,
- 1.0,
- 10, 5,
- 0,
- 0,
- 50.0,
- true);
-
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
-// case 9:
- HIptr = (instr_item *) new guage_instr( min_x-10, // x
- cen_y -75, // y
- 20, // width
- 150, // height
- get_throttleval, // data source
-// HUDS_VERT | HUDS_RIGHT | HUDS_NOTEXT,
- HUDS_VERT | HUDS_LEFT | HUDS_NOTEXT, 100.0,
- 1.0,
- 0.0
- );
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-// Remove this when below uncommented
-// case 10:
- HIptr = (instr_item *) new instr_label( 10,
- 25,
- 60,
- 10,
- get_frame_rate,
- "%5.1f",
- "",
- NULL,
- 1.0,
- HUDS_TOP,
- RIGHT_JUST,
- font_size,
- 0,
- TRUE );
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- HIptr = (instr_item *) new lat_label( (cen_x - (compass_w/2))/2,
- max_y,
- 1,
- text_h,
- get_latitude,
- "%s%", //"%.0f",
- "", //"Lat ",
- "",
- 1.0,
- HUDS_TOP,
- CENTER_JUST,
- font_size,
- 0,
- TRUE );
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- HIptr = (instr_item *) new lon_label(((cen_x+compass_w/2)+(2*cen_x))/2,
- max_y,
- 1, text_h,
- get_longitude,
- "%s%",//"%.0f",
- "", //"Lon ",
- "",
- 1.0,
- HUDS_TOP,
- CENTER_JUST,
- font_size,
- 0,
- TRUE );
- HUD_deque.insert( HUD_deque.begin(), HIptr);
+
+ HUD_style = 1;
+
+ SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" );
+
+ string hud_path =
+ fgGetString("/sim/hud/path", "Huds/Default/default.xml");
+ SGPath path(globals->get_fg_root());
+ path.append(hud_path);
+
+ ifstream input(path.c_str());
+ if (!input.good()) {
+ SG_LOG(SG_INPUT, SG_ALERT,
+ "Cannot read Hud configuration from " << path.str());
+ } else {
+ readHud(input);
+ input.close();
+ }
+
+ fgHUDalphaInit();
+ fgHUDReshape();
+
+ if ( HUDtext ) {
+ // this chunk of code is not necessarily thread safe if the
+ // compiler optimizer reorders these statements. Note that
+ // "delete ptr" does not set "ptr = NULL". We have to do that
+ // ourselves.
+ fntRenderer *tmp = HUDtext;
+ HUDtext = NULL;
+ delete tmp;
+ }
+
+// HUD_TextSize = fgGetInt("/sim/startup/xsize") / 60;
+ HUD_TextSize = 10;
+ HUDtext = new fntRenderer();
+ HUDtext -> setFont ( guiFntHandle ) ;
+ HUDtext -> setPointSize ( HUD_TextSize ) ;
+ HUD_TextList.setFont( HUDtext );