float HUD_matrix[16];
-//$$$ begin - added, Neetha, 28 Nov 2k
-
static string name;
static int x;
static int y;
static string label_format;
static string prelabel;
static string postlabel;
-static int justi;
-static int blinking;
static float maxBankAngle;
static float maxSlipAngle;
static UINT gap_width;
-static bool latitude;
-static bool longitude;
static bool tick_bottom;
static bool tick_top;
static bool tick_right;
static string type_pointer;
static string type_tick;
static string length_tick;
-static bool label_box;
-static int digits;
static float radius;
static int divisions;
static int zoom;
static FLTFNPTR load_fn;
-static fgLabelJust justification;
-static const char *pre_label_string = 0;
-static const char *post_label_string = 0;
int readHud( istream &input );
int readInstrument ( const SGPropertyNode * node);
static instr_item * readCard ( const SGPropertyNode * node);
-static instr_item * readLabel( const SGPropertyNode * node);
static instr_item * readTBI( const SGPropertyNode * node);
-//$$$ end - added, Neetha, 28 Nov 2k
static void drawHUD();
static void fgUpdateHUDVirtual();
return p;
}// end readCard
-static instr_item *
-readLabel(const SGPropertyNode * node)
-{
- instr_item *p;
-
- int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? HUD_FONT_LARGE : HUD_FONT_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);
- working = node->getBoolValue("working");
- digits = node->getIntValue("digits");
-
-
- 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();
- }
- }
- }
-
-#ifdef ENABLE_SP_FMDS
- 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
-#endif
- 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,
- working,
- digits);
-
- return p;
-} // end readLabel
-
static instr_item *
readTBI(const SGPropertyNode * node)
{
if (ladder_group != 0) {
int nLadders = ladder_group->nChildren();
for (int j = 0; j < nLadders; j++) {
-
HIptr = static_cast<instr_item *>(new HudLadder(ladder_group->getChild(j)));
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- }// for - ladders
+ HUD_deque.insert(HUD_deque.begin(), HIptr);
+ }
}
const SGPropertyNode * card_group = node->getNode("cards");
if (card_group != 0) {
int nCards = card_group->nChildren();
for (int j = 0; j < nCards; j++) {
-
HIptr = readCard(card_group->getChild(j));
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- }//for - cards
+ HUD_deque.insert(HUD_deque.begin(), HIptr);
+ }
}
const SGPropertyNode * label_group = node->getNode("labels");
if (label_group != 0) {
int nLabels = label_group->nChildren();
for (int j = 0; j < nLabels; j++) {
-
- HIptr = readLabel(label_group->getChild(j));
- HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- }//for - labels
+ HIptr = static_cast<instr_item *>(new instr_label(label_group->getChild(j)));
+ HUD_deque.insert(HUD_deque.begin(), HIptr);
+ }
}
const SGPropertyNode * tbi_group = node->getNode("tbis");
if (tbi_group != 0) {
int nTbis = tbi_group->nChildren();
for (int j = 0; j < nTbis; j++) {
-
HIptr = readTBI(tbi_group->getChild(j));
HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- }//for - tbis
+ }
}
const SGPropertyNode * rwy_group = node->getNode("runways");
if (rwy_group != 0) {
int nRwy = rwy_group->nChildren();
for (int j = 0; j < nRwy; j++) {
- SG_LOG( SG_COCKPIT, SG_DEBUG,
- "************** Reading runway properties" );
+ SG_LOG(SG_COCKPIT, SG_DEBUG, "*** Reading runway properties ***");
HIptr = readRunway(rwy_group->getChild(j));
HUD_deque.insert( HUD_deque.begin(), HIptr);
-
- }//for - runways
+ }
}
return 0;
}//end readinstrument
+#include <Main/fg_props.hxx>
#include "hud.hxx"
-
#ifdef USE_HUD_TextList
#define textString(x, y, text, digit) TextString(text, x , y ,digit)
#else
#define textString(x, y, text, digit) puDrawString(guiFnt, text, x, y)
#endif
-//======================= Top of instr_label class =========================
-instr_label::instr_label(
- int x,
- int y,
- UINT width,
- UINT height,
- FLTFNPTR data_source,
- const char *label_format,
- const char *pre_label_string,
- const char *post_label_string,
- float scale_data,
- UINT options,
- fgLabelJust justification,
- int font_size,
- int blinking,
- bool latitude,
- bool longitude,
- bool label_box,
- bool working,
- int digit) :
- instr_item( x, y, width, height,
- data_source,scale_data,options, working, digit),
- pformat ( label_format ),
- pre_str ( pre_label_string ),
- post_str ( post_label_string ),
- justify ( justification ),
- fontSize ( font_size ),
- blink ( blinking ),
- lat ( latitude ),
- lon ( longitude ),
- lbox ( label_box )
+// FIXME
+extern float get_aux1(), get_aux2(), get_aux3(), get_aux4(), get_aux5(), get_aux6();
+extern float get_aux7(), get_aux8(), get_aux9(), get_aux10(), get_aux11(), get_aux12();
+extern float get_aux13(), get_aux14(), get_aux15(), get_aux16(), get_aux17(), get_aux18();
+extern float get_Ax(), get_speed(), get_mach(), get_altitude(), get_agl(), get_frame_rate();
+extern float get_heading(), get_fov(), get_vfc_tris_culled(), get_vfc_tris_drawn(), get_aoa();
+extern float get_latitude(), get_anzg(), get_longitude(), get_throttleval();
+
+instr_label::instr_label(const SGPropertyNode *node) :
+ instr_item(
+ node->getIntValue("x"),
+ node->getIntValue("y"),
+ node->getIntValue("width"),
+ node->getIntValue("height"),
+ NULL /* node->getStringValue("data_source") */, // FIXME
+ node->getFloatValue("scale_data"),
+ node->getIntValue("options"),
+ node->getBoolValue("working"),
+ node->getIntValue("digits")),
+ pformat(node->getStringValue("label_format")),
+ pre_str(node->getStringValue("pre_label_string")),
+ post_str(node->getStringValue("post_label_string")),
+ fontSize(fgGetInt("/sim/startup/xsize") > 1000 ? HUD_FONT_LARGE : HUD_FONT_SMALL), // FIXME
+ blink(node->getIntValue("blinking")),
+ lat(node->getBoolValue("latitude", false)),
+ lon(node->getBoolValue("longitude", false)),
+ lbox(node->getBoolValue("label_box", false))
{
+ SG_LOG(SG_INPUT, SG_INFO, "Done reading instr_label instrument "
+ << node->getStringValue("name", "[none]"));
+
+ string loadfn = node->getStringValue("data_source"); // FIXME
+ float (*load_fn)(void);
+#ifdef ENABLE_SP_FMDS
+ 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
+#endif
+ 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;
+ else
+ load_fn = 0;
+
+ set_data_source(load_fn);
+
+ int just = node->getIntValue("justification");
+ if (just == 0)
+ justify = LEFT_JUST;
+ else if (just == 1)
+ justify = CENTER_JUST;
+ else if (just == 2)
+ justify = RIGHT_JUST;
+
+ if (!strcmp(pre_str, "NULL"))
+ pre_str = NULL;
+ else if (!strcmp(pre_str, "blank"))
+ pre_str = " ";
+
+ const char *units = strcmp(fgGetString("/sim/startup/units"), "feet") ? " m" : " ft"; // FIXME
+
+ if (!strcmp(post_str, "blank"))
+ post_str = " ";
+ else if (!strcmp(post_str, "NULL"))
+ post_str = NULL;
+ else if (!strcmp(post_str, "units"))
+ post_str = units;
+
+
if (pre_str != NULL) {
- if (post_str != NULL )
- sprintf( format_buffer, "%s%s%s", pre_str, pformat, post_str );
+ if (post_str != NULL)
+ sprintf(format_buffer, "%s%s%s", pre_str, pformat, post_str);
else
- sprintf( format_buffer, "%s%s", pre_str, pformat );
+ sprintf(format_buffer, "%s%s", pre_str, pformat);
} else if (post_str != NULL) {
- sprintf( format_buffer, "%s%s", pformat, post_str );
- } // else do nothing if both pre and post strings are nulls. Interesting.
-
+ sprintf(format_buffer, "%s%s", pformat, post_str);
+ } else {
+ strcpy(format_buffer, pformat); // FIXME
+ }
}
}
-// Copy constructor
-instr_label::instr_label(const instr_label & image) :
- instr_item((const instr_item &)image),
- pformat ( image.pformat ),
- pre_str ( image.pre_str ),
- post_str ( image.post_str ),
- blink ( image.blink ),
- lat ( image.lat ),
- lon ( image.lon ),
- lbox ( image.lbox )
-
-{
- if (pre_str != NULL) {
- if (post_str != NULL)
- sprintf( format_buffer, "%s%s%s", pre_str, pformat, post_str );
- else
- sprintf( format_buffer, "%s%s", pre_str, pformat );
-
- } else if (post_str != NULL) {
- sprintf( format_buffer, "%s%s", pformat, post_str );
- } // else do nothing if both pre and post strings are nulls. Interesting.
-
-}
-
-
-//
-// draw Draws a label anywhere in the HUD
-//
-//
-void instr_label::draw( void )
+void instr_label::draw(void)
{
char label_buffer[80];
int posincr;
int lenstr;
- RECT scrn_rect = get_location();
+ RECT scrn_rect = get_location();
if (data_available()) {
if (lat)
- sprintf( label_buffer, format_buffer, coord_format_lat(get_value()) );
+ sprintf(label_buffer, format_buffer, coord_format_lat(get_value()));
else if (lon)
- sprintf( label_buffer, format_buffer, coord_format_lon(get_value()) );
+ sprintf(label_buffer, format_buffer, coord_format_lon(get_value()));
else {
if (lbox) {// Box for label
float x = scrn_rect.left;
glLoadIdentity();
glBegin(GL_LINES);
- glVertex2f( x - 2.0, y - 2.0);
- glVertex2f( x + w + 2.0, y - 2.0);
- glVertex2f( x + w + 2.0, y + h + 2.0);
- glVertex2f( x - 2.0, y + h + 2.0);
+ glVertex2f(x - 2.0, y - 2.0);
+ glVertex2f(x + w + 2.0, y - 2.0);
+ glVertex2f(x + w + 2.0, y + h + 2.0);
+ glVertex2f(x - 2.0, y + h + 2.0);
glEnd();
glEnable(GL_LINE_STIPPLE);
- glLineStipple( 1, 0xAAAA );
+ glLineStipple(1, 0xAAAA);
glBegin(GL_LINES);
- glVertex2f( x + w + 2.0, y - 2.0);
- glVertex2f( x + w + 2.0, y + h + 2.0);
- glVertex2f( x - 2.0, y + h + 2.0);
- glVertex2f( x - 2.0, y - 2.0);
+ glVertex2f(x + w + 2.0, y - 2.0);
+ glVertex2f(x + w + 2.0, y + h + 2.0);
+ glVertex2f(x - 2.0, y + h + 2.0);
+ glVertex2f(x - 2.0, y - 2.0);
glEnd();
glDisable(GL_LINE_STIPPLE);
glPopMatrix();
}
- sprintf( label_buffer, format_buffer, get_value()*data_scaling() );
+ sprintf(label_buffer, format_buffer, get_value() * data_scaling());
}
} else {
-// sprintf( label_buffer, format_buffer );
+ sprintf(label_buffer, format_buffer);
}
- lenstr = getStringWidth( label_buffer );
-
+ lenstr = getStringWidth(label_buffer);
#ifdef DEBUGHUD
- fgPrintf( SG_COCKPIT, SG_DEBUG, format_buffer );
- fgPrintf( SG_COCKPIT, SG_DEBUG, "\n" );
- fgPrintf( SG_COCKPIT, SG_DEBUG, label_buffer );
- fgPrintf( SG_COCKPIT, SG_DEBUG, "\n" );
+ fgPrintf( SG_COCKPIT, SG_DEBUG, format_buffer);
+ fgPrintf( SG_COCKPIT, SG_DEBUG, "\n");
+ fgPrintf( SG_COCKPIT, SG_DEBUG, label_buffer);
+ fgPrintf( SG_COCKPIT, SG_DEBUG, "\n");
#endif
- lenstr = strlen( label_buffer );
+ lenstr = strlen(label_buffer);
- if (justify == RIGHT_JUST) {
+ if (justify == RIGHT_JUST)
posincr = scrn_rect.right - lenstr;
- } else if (justify == CENTER_JUST) {
- posincr = get_span() - (lenstr/2); // -lenstr*4;
- } else {
- // justify == LEFT_JUST
- posincr = 0; // 0;
- }
+ else if (justify == CENTER_JUST)
+ posincr = get_span() - (lenstr / 2); // -lenstr*4;
+ else // justify == LEFT_JUST
+ posincr = 0;
if (fontSize == HUD_FONT_SMALL) {
- textString( scrn_rect.left + posincr, scrn_rect.top,
- label_buffer, get_digits());
+ textString(scrn_rect.left + posincr, scrn_rect.top,
+ label_buffer, get_digits());
} else if (fontSize == HUD_FONT_LARGE) {
- textString( scrn_rect.left + posincr, scrn_rect.top,
- label_buffer, get_digits());
+ textString(scrn_rect.left + posincr, scrn_rect.top,
+ label_buffer, get_digits());
}
}
+