-#ifdef OLD_CODE
-void drawOneLine( UINT x1, UINT y1, UINT x2, UINT y2)
-{
- glBegin(GL_LINES);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glEnd();
-}
-
-void drawOneLine( RECT &rect)
-{
- glBegin(GL_LINES);
- glVertex2f(rect.left, rect.top);
- glVertex2f(rect.right, rect.bottom);
- glEnd();
-}
-
-//
-// The following code deals with painting the "instrument" on the display
-//
-/* textString - Bitmap font string */
-
-void textString( int x, int y, char *msg, void *font,int digit) //suma
-{
-
- if(*msg) {
- // puDrawString ( NULL, msg, x, y );
- glRasterPos2f(x, y);
- while (*msg) {
- glutBitmapCharacter(font, *msg);
- msg++;
- }
- }
-}
-
-
-/* strokeString - Stroke font string */
-void strokeString(int x, int y, char *msg, void *font, float theta)
-{
- int xx;
- int yy;
- int c;
- float sintheta,costheta;
-
-
- if(*msg) {
- glPushMatrix();
- glRotatef(theta * SGD_RADIANS_TO_DEGREES, 0.0, 0.0, 1.0);
- sintheta = sin(theta);
- costheta = cos(theta);
- xx = (int)(x * costheta + y * sintheta);
- yy = (int)(y * costheta - x * sintheta);
- glTranslatef( xx, yy, 0);
- glScalef(.1, .1, 0.0);
- while( (c=*msg++) ) {
- glutStrokeCharacter(font, c);
- }
- glPopMatrix();
- }
-}
-
-int getStringWidth ( char *str )
-{
- if ( HUDtext && str ) {
- float r, l ;
- guiFntHandle->getBBox ( str, HUD_TextSize, 0, &l, &r, NULL, NULL ) ;
- return FloatToInt( r - l );
- }
- return 0 ;
-}
-#endif // OLD_CODE
-
-//========================= End of Class Implementations===================
-// fgHUDInit
-//
-// Constructs a HUD object and then adds in instruments. At the present
-// the instruments are hard coded into the routine. Ultimately these need
-// to be defined by the aircraft's instrumentation records so that the
-// display for a Piper Cub doesn't show the speed range of a North American
-// mustange and the engine readouts of a B36!
-//
-
-#define INSTRDEFS 21
-
-//$$$ begin - added, Neetha, 28 Nov 2k
-static instr_item *
-readLadder(const SGPropertyNode * node)
-{
-
- instr_item *p;
-
- name = node->getStringValue("name");
- x = node->getIntValue("x");
- y = node->getIntValue("y");
- width = node->getIntValue("width");
- height = node->getIntValue("height");
- factor = node->getFloatValue("compression_factor");
- span_units = node->getFloatValue("span_units");
- division_units = node->getFloatValue("division_units");
- screen_hole = node->getIntValue("screen_hole");
- lbl_pos = node->getIntValue("lbl_pos");
- frl_spot = node->getBoolValue("enable_frl",false);
- target = node->getBoolValue("enable_target_spot",false);
- vel_vector = node->getBoolValue("enable_velocity_vector",false);
- drift = node->getBoolValue("enable_drift_marker",false);
- alpha = node->getBoolValue("enable_alpha_bracket",false);
- energy = node->getBoolValue("enable_energy_marker",false);
- climb_dive = node->getBoolValue("enable_climb_dive_marker",false);
- glide = node->getBoolValue("enable_glide_slope_marker",false);
- glide_slope_val = node->getFloatValue("glide_slope",-4.0);
- worm_energy = node->getBoolValue("enable_energy_marker",false);
- waypoint = node->getBoolValue("enable_waypoint_marker",false);
- working = node->getBoolValue("working");
- zenith = node->getIntValue("zenith"); //suma
- nadir = node->getIntValue("nadir"); //suma
- hat = node->getIntValue("hat");
-
-
- SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
-
-
- p = (instr_item *) new HudLadder( name, x, y,
- width, height, factor,
- get_roll, get_pitch,
- span_units, division_units, minor_division,
- screen_hole, lbl_pos, frl_spot, target, vel_vector,
- drift, alpha, energy, climb_dive,
- glide, glide_slope_val, worm_energy,
- waypoint, working, zenith, nadir, hat);
-
- return p;
-
-} //end readLadder
-
-static instr_item *
-readCard(const SGPropertyNode * node)
-{
-
- instr_item *p;
-
- name = node->getStringValue("name");
- x = node->getIntValue("x");
- y = node->getIntValue("y");
- width = node->getIntValue("width");
- height = node->getIntValue("height");
- loadfn = node->getStringValue("loadfn");
- options = node->getIntValue("options");
- maxValue = node->getFloatValue("maxValue");
- minValue = node->getFloatValue("minValue");
- scaling = node->getFloatValue("disp_scaling");
- major_divs = node->getIntValue("major_divs");
- minor_divs = node->getIntValue("minor_divs");
- modulator = node->getIntValue("modulator");
- span_units = node->getFloatValue("value_span");
- type = node->getStringValue("type");
- tick_bottom = node->getBoolValue("tick_bottom",false);
- tick_top = node->getBoolValue("tick_top",false);
- tick_right = node->getBoolValue("tick_right",false);
- tick_left = node->getBoolValue("tick_left",false);
- cap_bottom = node->getBoolValue("cap_bottom",false);
- cap_top = node->getBoolValue("cap_top",false);
- cap_right = node->getBoolValue("cap_right",false);
- cap_left = node->getBoolValue("cap_left",false);
- marker_off = node->getFloatValue("marker_offset",0.0);
- enable_pointer = node->getBoolValue("enable_pointer",true);
- type_pointer = node->getStringValue("pointer_type");
- type_tick = node->getStringValue("tick_type");//hud Can be 'circle' or 'line'
- length_tick = node->getStringValue("tick_length");//hud For variable length
- working = node->getBoolValue("working");
- radius = node->getFloatValue("radius"); //suma
- divisions = node->getIntValue("divisions"); //suma
- zoom = node->getIntValue("zoom"); //suma
-
- SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
-
-
- if(type=="gauge") {
- span_units = maxValue - minValue;
- }
-
- if (loadfn=="anzg") {
- load_fn = get_anzg;
- } else if (loadfn=="heading") {
- load_fn = get_heading;
- } else if (loadfn=="aoa") {
- load_fn = get_aoa;
- } else if (loadfn=="climb") {
- load_fn = get_climb_rate;
- } else if (loadfn=="altitude") {
- load_fn = get_altitude;
- } else if (loadfn=="agl") {
- load_fn = get_agl;
- } else if (loadfn=="speed") {
- load_fn = get_speed;
- } else if (loadfn=="view_direction") {
- load_fn = get_view_direction;
- } else if (loadfn=="aileronval") {
- load_fn = get_aileronval;
- } else if (loadfn=="elevatorval") {
- load_fn = get_elevatorval;
- } else if (loadfn=="rudderval") {
- load_fn = get_rudderval;
- } else if (loadfn=="throttleval") {
- load_fn = get_throttleval;
- }
-
-
- if ( (type == "dial") | (type == "tape") ) {
- p = (instr_item *) new hud_card( x,
- y,
- width,
- height,
- load_fn,
- options,
- maxValue, minValue,
- scaling,
- major_divs, minor_divs,
- modulator,
- dp_showing,
- span_units,
- type,
- tick_bottom,
- tick_top,
- tick_right,
- tick_left,
- cap_bottom,
- cap_top,
- cap_right,
- cap_left,
- marker_off,
- enable_pointer,
- type_pointer,
- type_tick,//hud
- length_tick,//hud
- working,
- radius, //suma
- divisions, //suma
- zoom //suma
- );
- } else {
- p = (instr_item *) new gauge_instr( x, // x
- y, // y
- width, // width
- height, // height
- load_fn, // data source
- options,
- scaling,
- maxValue,minValue,
- major_divs, minor_divs,
- dp_showing,
- modulator,
- working);
- }
-
- return p;
-}// end readCard
-
-static instr_item *
-readLabel(const SGPropertyNode * node)
-{
- instr_item *p;
-
- int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? LARGE : SMALL;
-
- name = node->getStringValue("name");
- x = node->getIntValue("x");
- y = node->getIntValue("y");
- width = node->getIntValue("width");
- height = node->getIntValue("height");
- loadfn = node->getStringValue("data_source");
- label_format = node->getStringValue("label_format");
- prelabel = node->getStringValue("pre_label_string");
- postlabel = node->getStringValue("post_label_string");
- scaling = node->getFloatValue("scale_data");
- options = node->getIntValue("options");
- justi = node->getIntValue("justification");
- blinking = node->getIntValue("blinking");
- latitude = node->getBoolValue("latitude",false);
- longitude = node->getBoolValue("longitude",false);
- label_box = node->getBoolValue("label_box",false);//hud
- working = node->getBoolValue("working");
- digits = node->getIntValue("digits"); //suma
-
-
- SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
-
-
- if ( justi == 0 ) {
- justification = LEFT_JUST;
- } else {
- if ( justi == 1 ) {
- justification = CENTER_JUST;
- } else {
- if ( justi == 2 ) {
- justification = RIGHT_JUST;
- }
- }
- }
-
- if ( prelabel == "NULL" ) {
- pre_label_string = NULL;
- } else {
- if ( prelabel == "blank" ) {
- pre_label_string = " ";
- } else {
- pre_label_string = prelabel.c_str();
- }
- }
-
- if ( postlabel == "blank" ) {
- post_label_string = " ";
- } else {
- if ( postlabel == "NULL" ) {
- post_label_string = NULL;
- } else {
- if ( postlabel == "units" ) {
- post_label_string = units;
- } else {
- post_label_string = postlabel.c_str();
- }
- }
- }
-
- if ( loadfn== "aux1" ) {
- load_fn = get_aux1;
- } else if ( loadfn == "aux2" ) {
- load_fn = get_aux2;
- } else if ( loadfn == "aux3" ) {
- load_fn = get_aux3;
- } else if ( loadfn == "aux4" ) {
- load_fn = get_aux4;
- } else if ( loadfn == "aux5" ) {
- load_fn = get_aux5;
- } else if ( loadfn == "aux6" ) {
- load_fn = get_aux6;
- } else if ( loadfn == "aux7" ) {
- load_fn = get_aux7;
- } else if ( loadfn == "aux8" ) {
- load_fn = get_aux8;
- } else if ( loadfn == "aux9" ) {
- load_fn = get_aux9;
- } else if ( loadfn == "aux10" ) {
- load_fn = get_aux10;
- } else if ( loadfn == "aux11" ) {
- load_fn = get_aux11;
- } else if ( loadfn == "aux12" ) {
- load_fn = get_aux12;
- } else if ( loadfn == "aux13" ) {
- load_fn = get_aux13;
- } else if ( loadfn == "aux14" ) {
- load_fn = get_aux14;
- } else if ( loadfn == "aux15" ) {
- load_fn = get_aux15;
- } else if ( loadfn == "aux16" ) {
- load_fn = get_aux16;
- } else if ( loadfn == "aux17" ) {
- load_fn = get_aux17;
- } else if ( loadfn == "aux18" ) {
- load_fn = get_aux18;
- } else if ( loadfn == "ax" ) {
- load_fn = get_Ax;
- } else if ( loadfn == "speed" ) {
- load_fn = get_speed;
- } else if ( loadfn == "mach" ) {
- load_fn = get_mach;
- } else if ( loadfn == "altitude" ) {
- load_fn = get_altitude;
- } else if ( loadfn == "agl" ) {
- load_fn = get_agl;
- } else if ( loadfn == "framerate" ) {
- load_fn = get_frame_rate;
- } else if ( loadfn == "heading" ) {
- load_fn = get_heading;
- } else if ( loadfn == "fov" ) {
- load_fn = get_fov;
- } else if ( loadfn == "vfc_tris_culled" ) {
- load_fn = get_vfc_tris_culled;
- } else if ( loadfn == "vfc_tris_drawn" ) {
- load_fn = get_vfc_tris_drawn;
- } else if ( loadfn == "aoa" ) {
- load_fn = get_aoa;
- } else if ( loadfn == "latitude" ) {
- load_fn = get_latitude;
- } else if ( loadfn == "anzg" ) {
- load_fn = get_anzg;
- } else if ( loadfn == "longitude" ) {
- load_fn = get_longitude;
- } else if (loadfn=="throttleval") {
- load_fn = get_throttleval;
- }
-
- p = (instr_item *) new instr_label ( x,
- y,
- width,
- height,
- load_fn,
- label_format.c_str(),
- pre_label_string,
- post_label_string,
- scaling,
- options,
- justification,
- font_size,
- blinking,
- latitude,
- longitude,
- label_box, //hud
- working,
- digits); //suma
-
- return p;
-} // end readLabel
-
-static instr_item *
-readTBI(const SGPropertyNode * node)
-{
-
- instr_item *p;
-
- name = node->getStringValue("name");
- x = node->getIntValue("x");
- y = node->getIntValue("y");
- width = node->getIntValue("width");
- height = node->getIntValue("height");
- maxBankAngle = node->getFloatValue("maxBankAngle");
- maxSlipAngle = node->getFloatValue("maxSlipAngle");
- gap_width = node->getIntValue("gap_width");
- working = node->getBoolValue("working");
- tsi = node->getBoolValue("tsi"); //suma
- rad = node->getFloatValue("rad"); //suma