- 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);
+
+ 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");
+
+ FG_LOG(FG_INPUT, FG_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);
+
+ 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");
+ working = node->getBoolValue("working");
+
+
+ FG_LOG(FG_INPUT, FG_INFO, "Done reading instrument " << name);
+
+
+ if(type=="guage")
+ 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;
+
+
+ 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,
+ 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);
+ working = node->getBoolValue("working");
+
+
+ FG_LOG(FG_INPUT, FG_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=="aux16")
+ load_fn = get_aux16;
+ else
+ if(loadfn=="aux17")
+ load_fn = get_aux17;
+ else
+ if(loadfn=="aux9")
+ load_fn = get_aux9;
+ else
+ if(loadfn=="aux11")
+ load_fn = get_aux11;
+ else
+ if(loadfn=="aux12")
+ load_fn = get_aux12;
+ else
+ if(loadfn=="aux10")
+ load_fn = get_aux10;
+ 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=="aux8")
+ load_fn = get_aux8;
+ 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=="longitude")
+ load_fn = get_longitude;
+
+
+ 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,
+ working);
+
+ 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");
+
+ FG_LOG(FG_INPUT, FG_INFO, "Done reading instrument " << name);
+
+
+ p = (instr_item *) new fgTBI_instr( x,
+ y,
+ width,
+ height,
+ get_roll,
+ get_sideslip,
+ maxBankAngle,
+ maxSlipAngle,
+ gap_width,
+ working);
+
+ return p;
+} //end readTBI
+
+
+int readInstrument(const SGPropertyNode * node)
+{
+
+ instr_item *HIptr;