//$$$ begin - added, Neetha, 28 Nov 2k
-static string name;
-static int x;
-static int y;
+static string name;
+static int x;
+static int y;
static UINT width;
static UINT height;
-static float factor;
+static float factor;
static float span_units;
static float division_units;
static float minor_division = 0;
static UINT lbl_pos;
static bool working;
static string loadfn;
-static UINT options;
+static UINT options;
static float maxValue;
static float minValue;
static float scaling;
static string prelabel;
static string postlabel;
static int justi;
-static int blinking;
+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 bool tick_left;
-static bool cap_bottom;
-static bool cap_top;
-static bool cap_right;
-static bool cap_left;
+static bool latitude;
+static bool longitude;
+static bool tick_bottom;
+static bool tick_top;
+static bool tick_right;
+static bool tick_left;
+static bool cap_bottom;
+static bool cap_top;
+static bool cap_right;
+static bool cap_left;
static float marker_off;
static string type;
static bool enable_pointer;
static string type_pointer;
static bool frl_spot;
-static bool target;
+static bool target;
static bool vel_vector;
static bool drift;
static bool alpha;
-static bool energy;
-static bool climb_dive;
-static bool glide;
-static float glide_slope_val;
-static bool worm_energy;
-static bool waypoint;
-static string type_tick;//hud
-static string length_tick;//hud
-static bool label_box;//hud
-static int digits; //suma
-static float radius; //suma
-static int divisions; //suma
-static int zoom; //suma
-static int zenith; //suma
-static int nadir ; //suma
-static int hat; //suma
-static bool tsi; //suma
-static float rad; //suma
-
-
-static FLTFNPTR load_fn;
+static bool energy;
+static bool climb_dive;
+static bool glide;
+static float glide_slope_val;
+static bool worm_energy;
+static bool waypoint;
+static string type_tick;//hud
+static string length_tick;//hud
+static bool label_box;//hud
+static int digits; //suma
+static float radius; //suma
+static int divisions; //suma
+static int zoom; //suma
+static int zenith; //suma
+static int nadir ; //suma
+static int hat; //suma
+static bool tsi; //suma
+static float rad; //suma
+
+
+static FLTFNPTR load_fn;
static fgLabelJust justification;
static const char *pre_label_string = 0;
static const char *post_label_string = 0;
#define INSTRDEFS 21
//$$$ begin - added, Neetha, 28 Nov 2k
-static instr_item *
+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");
+ 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");
// The factor assumes a base of 55 degrees per 640 pixels.
// Invert to convert the "compression" factor to a
// pixels-per-degree number.
}
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,
+ 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 *
+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
+ 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 == "dial") | (type == "tape") ) {
p = (instr_item *) new hud_card( x,
- y,
+ y,
width,
height,
load_fn,
zoom //suma
);
} else {
- p = (instr_item *) new gauge_instr( x, // x
- y, // y
- width, // width
- height, // height
+ p = (instr_item *) new gauge_instr( x, // x
+ y, // y
+ width, // width
+ height, // height
load_fn, // data source
options,
scaling,
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);//hud
- working = node->getBoolValue("working");
- digits = node->getIntValue("digits"); //suma
+ 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);
load_fn = get_aux18;
} else
#endif
- if ( loadfn == "ax" ) {
+ if ( loadfn == "ax" ) {
load_fn = get_Ax;
} else if ( loadfn == "speed" ) {
load_fn = get_speed;
return p;
} // end readLabel
-static instr_item *
+static instr_item *
readTBI(const SGPropertyNode * node)
{
maxSlipAngle = node->getFloatValue("maxSlipAngle");
gap_width = node->getIntValue("gap_width");
working = node->getBoolValue("working");
- tsi = node->getBoolValue("tsi"); //suma
- rad = node->getFloatValue("rad"); //suma
+ tsi = node->getBoolValue("tsi"); //suma
+ rad = node->getFloatValue("rad"); //suma
SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
- p = (instr_item *) new fgTBI_instr( x,
- y,
+ p = (instr_item *) new fgTBI_instr( x,
+ y,
width,
height,
get_roll,
get_sideslip,
- maxBankAngle,
+ maxBankAngle,
maxSlipAngle,
gap_width,
working,
return p;
} //end readTBI
-static instr_item *
+static instr_item *
readRunway(const SGPropertyNode * node) {
- name = node->getStringValue("name");
- x = node->getIntValue("x");
- y = node->getIntValue("y");
- width = node->getIntValue("width");
- height = node->getIntValue("height");
- scaling = node->getDoubleValue("scale");
- working = node->getBoolValue("working",true);
- runway_instr *ri = new runway_instr(x,y,width,height,scaling,working);
- double scale = node->getDoubleValue("arrow_scale",1.0);
- ri->setDrawArrow((scale>0)?true:false);
- ri->setDrawArrowAlways((scale>0)?node->getBoolValue("arrow_always"):false);
- ri->setStippleOutline(node->getIntValue("outer_stipple",0xFFFF));
- ri->setStippleCenterline(node->getIntValue("center_stipple",0xFFFF));
- ri->setArrowRotationRadius(node->getDoubleValue("arrow_radius"));
- ri->setArrowScale(scale);
- ri->setLineScale(node->getDoubleValue("line_scale",1.0));
- ri->setScaleDist(node->getDoubleValue("scale_dist_nm"));
- SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
- return (instr_item *) ri;
+ name = node->getStringValue("name");
+ x = node->getIntValue("x");
+ y = node->getIntValue("y");
+ width = node->getIntValue("width");
+ height = node->getIntValue("height");
+ scaling = node->getDoubleValue("scale");
+ working = node->getBoolValue("working",true);
+ runway_instr *ri = new runway_instr(x,y,width,height,scaling,working);
+ double scale = node->getDoubleValue("arrow_scale",1.0);
+ ri->setDrawArrow((scale>0)?true:false);
+ ri->setDrawArrowAlways((scale>0)?node->getBoolValue("arrow_always"):false);
+ ri->setStippleOutline(node->getIntValue("outer_stipple",0xFFFF));
+ ri->setStippleCenterline(node->getIntValue("center_stipple",0xFFFF));
+ ri->setArrowRotationRadius(node->getDoubleValue("arrow_radius"));
+ ri->setArrowScale(scale);
+ ri->setLineScale(node->getDoubleValue("line_scale",1.0));
+ ri->setScaleDist(node->getDoubleValue("scale_dist_nm"));
+ SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
+ return (instr_item *) ri;
}
= fgGetNode("/sim/startup/units");
instr_item *HIptr;
-
+
if ( !strcmp(startup_units_node->getStringValue(), "feet") ) {
strcpy(units, " ft");
} else {
if (ladder_group != 0) {
int nLadders = ladder_group->nChildren();
for (int j = 0; j < nLadders; j++) {
-
+
HIptr = readLadder(ladder_group->getChild(j));
HUD_deque.insert( HUD_deque.begin(), HIptr);
-
+
}// for - ladders
}
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 - tbis
}
-
+
const SGPropertyNode * rwy_group = node->getNode("runways");
if (rwy_group != 0) {
int nRwy = rwy_group->nChildren();
HUD_deque.insert( HUD_deque.begin(), HIptr);
}//for - runways
- }
+ }
return 0;
}//end readinstrument
-int readHud( istream &input )
+int readHud( istream &input )
{
SGPropertyNode root;
guiErrorMessage("Error reading HUD: ", e);
return 0;
}
-
-
+
+
SG_LOG(SG_INPUT, SG_INFO, "Read properties for " <<
root.getStringValue("name"));
- HUD_deque.erase( HUD_deque.begin(), HUD_deque.end()); // empty the HUD deque
+ HUD_deque.erase( HUD_deque.begin(), HUD_deque.end());
SG_LOG(SG_INPUT, SG_INFO, "Reading Hud instruments");
int nInstruments = instrument_group->nChildren();
for (int i = 0; i < nInstruments; i++) {
-
+
const SGPropertyNode * node = instrument_group->getChild(i);
SGPath path( globals->get_fg_root() );
} catch (const sg_exception &e) {
guiErrorMessage("Error reading HUD instrument: ", e);
continue;
- }
+ }
readInstrument(&root2);
}//for loop(i)
SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" );
string hud_path =
- fgGetString("/sim/hud/path", "Huds/Default/default.xml");
+ 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,
return 0; // For now. Later we may use this for an error code.
}
-//$$$ End - added, Neetha, 28 Nov 2k
+//$$$ End - added, Neetha, 28 Nov 2k
void fgHUDReshape(void) {
// all C++.
//
void fgUpdateHUD( void ) {
-
+
static const SGPropertyNode *enable3d_node = fgGetNode("/sim/hud/enable3d");
- if( HUD_style == 1 && enable3d_node->getBoolValue() )
- {
+ if( HUD_style == 1 && enable3d_node->getBoolValue() ) {
fgUpdateHUDVirtual();
return;
}
-
+
static const float normal_aspect = float(640) / float(480);
// note: aspect_ratio is Y/X
float current_aspect = 1.0f/globals->get_current_view()->get_aspect_ratio();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
-
+
// Standard fgfs view direction computation
float lookat[3];
lookat[0] = -sin(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg());
void drawHUD()
{
- if( !HUD_deque.size() ) { // Trust everyone, but ALWAYS cut the cards!
+ if( !HUD_deque.size() ) // Trust everyone, but ALWAYS cut the cards!
return;
- }
HUD_TextList.erase();
HUD_LineList.erase();
// HUD_StippleLineList.erase();
-
+
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
int apY = 480 - 80;
-
-
+
+
if (strcmp( heading_enabled->getStringValue(), "dg-heading-hold") == 0 ) {
snprintf( hud_hdg_text, 256, "hdg = %.1f\n",
fgGetDouble("/autopilot/settings/heading-bug-deg") );
string wp0_id = fgGetString( "/autopilot/route-manager/wp[0]/id" );
if ( wp0_id.length() > 0 ) {
- snprintf( hud_wp0_text, 256, "%5s %6.1fnm %s", wp0_id.c_str(),
+ snprintf( hud_wp0_text, 256, "%5s %6.1fnm %s", wp0_id.c_str(),
fgGetDouble( "/autopilot/route-manager/wp[0]/dist" ),
fgGetString( "/autopilot/route-manager/wp[0]/eta" ) );
HUD_TextList.add( fgText( 40, apY, hud_wp0_text ) );
}
string wp1_id = fgGetString( "/autopilot/route-manager/wp[1]/id" );
if ( wp1_id.length() > 0 ) {
- snprintf( hud_wp1_text, 256, "%5s %6.1fnm %s", wp1_id.c_str(),
+ snprintf( hud_wp1_text, 256, "%5s %6.1fnm %s", wp1_id.c_str(),
fgGetDouble( "/autopilot/route-manager/wp[1]/dist" ),
fgGetString( "/autopilot/route-manager/wp[1]/eta" ) );
HUD_TextList.add( fgText( 40, apY, hud_wp1_text ) );
}
string wp2_id = fgGetString( "/autopilot/route-manager/wp-last/id" );
if ( wp2_id.length() > 0 ) {
- snprintf( hud_wp2_text, 256, "%5s %6.1fnm %s", wp2_id.c_str(),
+ snprintf( hud_wp2_text, 256, "%5s %6.1fnm %s", wp2_id.c_str(),
fgGetDouble( "/autopilot/route-manager/wp-last/dist" ),
fgGetString( "/autopilot/route-manager/wp-last/eta" ) );
HUD_TextList.add( fgText( 40, apY, hud_wp2_text ) );
apY -= 15;
}
}
-
+
if ( strcmp( altitude_enabled->getStringValue(), "altitude-hold" ) == 0 ) {
snprintf( hud_alt_text, 256, "alt = %.0f\n",
fgGetDouble("/autopilot/settings/target-altitude-ft") );
typedef struct {
int x, y;
} POINT;
-
+
typedef struct {
int top, bottom, left, right;
} RECT;
}
~fgLineSeg2D() {}
-
+
void draw() const
{
glVertex2f(x0, y0);
public:
int digit; //suma
fgText(float x = 0, float y = 0, char *c = NULL,int digits=0): x(x), y(y) //suma
- {
+ {
strcpy(msg,c);
digit=digits; //suma
}
-
+
fgText( const fgText & image )
- : x(image.x), y(image.y),digit(image.digit) {strcpy(msg,image.msg);} //suma
+ : x(image.x), y(image.y),digit(image.digit) { strcpy(msg,image.msg); } //suma
fgText& operator = ( const fgText & image ) {
strcpy(msg,image.msg); x = image.x; y = image.y;digit=image.digit; //suma
- return *this;
+ return *this;
}
- ~fgText() {msg[0]='\0';}
+ ~fgText() { msg[0]='\0'; }
int getStringWidth ( char *str )
{
}
return 0 ;
}
-
+
int StringWidth (void )
{
if ( HUDtext && strlen( msg )) {
}
return 0 ;
}
-
+
// this code is changed to display Numbers with big/small digits
// according to MIL Standards for example Altitude above 10000 ft
// is shown as 10ooo. begin suma
}
char *tmp=msg;
while(tmp[i]!='\0') {
- if((tmp[i]>='0') && (tmp[i]<='9'))
+ if((tmp[i]>='0') && (tmp[i]<='9'))
c++;
i++;
}
int p1=c-3;
char *tmp1=msg+p1;
int p2=p1*8;
-
+
fnt->start2f(x+p2,y);
fnt->puts(tmp1);
char tmp2[64];
strncpy(tmp2,msg,p1);
tmp2[p1]='\0';
-
+
fnt->start2f(x,y);
fnt->puts(tmp2);
} else {
public:
fgTextList ( void ) { Font = 0; }
~fgTextList( void ) {}
-
+
void setFont( fntRenderer *Renderer ) { Font = Renderer; }
void add( const fgText& String ) { List.push_back(String); }
void erase( void ) { List.erase( List.begin(), List.end() ); }
bool broken;
UINT scr_span; // Working values for draw;
POINT mid_span; //
- int digits; //suma
-
+ int digits; //suma
+
public:
instr_item( int x,
int y,
float data_scaling,
UINT options,
bool working = true,
- int digit = 0); //suma
+ int digit = 0); //suma
instr_item( const instr_item & image );
UINT get_span ( void ) { return scr_span; }
POINT get_centroid ( void ) { return mid_span; }
UINT get_options ( void ) { return opts; }
- int get_digits ( void ) { return digits; } //suma
+ int get_digits ( void ) { return digits; } //suma
UINT huds_vert (UINT options) { return( options & HUDS_VERT ); }
UINT huds_left (UINT options) { return( options & HUDS_LEFT ); }
UINT huds_notext (UINT options) { return( options & HUDS_NOTEXT ); }
UINT huds_top (UINT options) { return( options & HUDS_TOP ); }
UINT huds_bottom (UINT options) { return( options & HUDS_BOTTOM ); }
-
+
virtual void display_enable( bool working ) { is_enabled = !! working;}
virtual void update( void );
void SetPosition ( int x, int y, UINT width, UINT height );
UINT get_Handle( void );
virtual void draw( void ) = 0; // Required method in derived classes
-
+
void drawOneLine( float x1, float y1, float x2, float y2)
{
HUD_LineList.add(fgLineSeg2D(x1,y1,x2,y2));
}
void TextString( char *msg, float x, float y,int digit ) //suma
{
- HUD_TextList.add(fgText(x, y, msg,digit)); //suma
+ HUD_TextList.add(fgText(x, y, msg,digit)); //suma
}
int getStringWidth ( char *str )
{
//code to draw ticks as small circles
void drawOneCircle(float x1, float y1, float r)
{
- glBegin(GL_LINE_LOOP); // Use polygon to approximate a circle
- for(int count=0; count<25; count++) {
- float cosine = r * cos(count * 2 * SG_PI/10.0);
- float sine = r * sin(count * 2 * SG_PI/10.0);
+ glBegin(GL_LINE_LOOP); // Use polygon to approximate a circle
+ for(int count=0; count<25; count++) {
+ float cosine = r * cos(count * 2 * SG_PI/10.0);
+ float sine = r * sin(count * 2 * SG_PI/10.0);
glVertex2f(cosine+x1, sine+y1);
- }
- glEnd();
+ }
+ glEnd();
}
-
+
};
typedef instr_item *HIptr;
int fontSize;
int blink;
char format_buffer[80];
- bool lat;
- bool lon;
- bool lbox;
+ bool lat;
+ bool lon;
+ bool lbox;
public:
instr_label( int x,
fgLabelJust justification,
int font_size,
int blinking,
- bool latitude,
- bool longitude,
- bool label_box,
+ bool latitude,
+ bool longitude,
+ bool label_box,
bool working,
int digit ); //suma);
const char *label_format,
const char *pre_label_string,
const char *post_label_string,
- float scale_data,
+ float scale_data,
UINT options,
fgLabelJust justification,
int font_size,
int blinking,
bool working,
- int digits =0 );//suma
+ int digits =0 );//suma
~lat_label();
const char *label_format,
const char *pre_label_string,
const char *post_label_string,
- float scale_data,
+ float scale_data,
UINT options,
fgLabelJust justification,
int font_size,
int blinking,
bool working,
- int digit=0); //suma
+ int digit=0); //suma
~lon_label();
typedef lon_label * pLonlabel;
//
-// fgRunway_instr This class is responsible for rendering the active runway
-// in the hud (if visible).
-class runway_instr : public instr_item
+// fgRunway_instr This class is responsible for rendering the active runway
+// in the hud (if visible).
+class runway_instr : public instr_item
{
-private:
- void boundPoint(const sgdVec3& v, sgdVec3& m);
- bool boundOutsidePoints(sgdVec3& v, sgdVec3& m);
- bool drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3& p1, const sgdVec3& p2);
- void drawArrow();
- bool get_active_runway(FGRunway& rwy);
- void get_rwy_points(sgdVec3 *points);
- void setLineWidth(void);
-
- sgdVec3 points3d[6],points2d[6];
- double mm[16],pm[16], arrowScale, arrowRad, lnScale, scaleDist, default_pitch, default_heading;
- GLint view[4];
- FGRunway runway;
- FGViewer* cockpit_view;
- unsigned short stippleOut,stippleCen;
- bool drawIA,drawIAAlways;
- RECT location;
- POINT center;
-
+private:
+ void boundPoint(const sgdVec3& v, sgdVec3& m);
+ bool boundOutsidePoints(sgdVec3& v, sgdVec3& m);
+ bool drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3& p1, const sgdVec3& p2);
+ void drawArrow();
+ bool get_active_runway(FGRunway& rwy);
+ void get_rwy_points(sgdVec3 *points);
+ void setLineWidth(void);
+
+ sgdVec3 points3d[6],points2d[6];
+ double mm[16],pm[16], arrowScale, arrowRad, lnScale, scaleDist, default_pitch, default_heading;
+ GLint view[4];
+ FGRunway runway;
+ FGViewer* cockpit_view;
+ unsigned short stippleOut,stippleCen;
+ bool drawIA,drawIAAlways;
+ RECT location;
+ POINT center;
+
public:
runway_instr( int x,
- int y,
- int width,
- int height,
- float scale_data,
- bool working = true);
+ int y,
+ int width,
+ int height,
+ float scale_data,
+ bool working = true);
virtual void draw( void ); // Required method in base class
- void setArrowRotationRadius(double radius);
- void setArrowScale(double scale); // Scales the runway indication arrow
- void setDrawArrow(bool draw); // Draws arrow when runway is not visible in HUD if draw=true
- void setDrawArrowAlways(bool draw); //Always draws arrow if draw=true;
- void setLineScale(double scale); //Sets the maximum line scale
- void setScaleDist(double dist_nm); //Sets the distance where to start scaling the lines
- void setStippleOutline(unsigned short stipple); //Sets the stipple pattern of the outline of the runway
- void setStippleCenterline(unsigned short stipple); //Sets the stipple patter of the center line of the runway
+ void setArrowRotationRadius(double radius);
+ void setArrowScale(double scale); // Scales the runway indication arrow
+ void setDrawArrow(bool draw); // Draws arrow when runway is not visible in HUD if draw=true
+ void setDrawArrowAlways(bool draw); //Always draws arrow if draw=true;
+ void setLineScale(double scale); //Sets the maximum line scale
+ void setScaleDist(double dist_nm); //Sets the distance where to start scaling the lines
+ void setStippleOutline(unsigned short stipple); //Sets the stipple pattern of the outline of the runway
+ void setStippleCenterline(unsigned short stipple); //Sets the stipple patter of the center line of the runway
};
UINT height,
FLTFNPTR load_fn,
UINT options,
- float show_range,
- float max_value,
- float min_value,
- float disp_scaling,
+ float show_range,
+ float max_value,
+ float min_value,
+ float disp_scaling,
UINT major_divs,
UINT minor_divs,
UINT rollover,
virtual void draw ( void ) {}; // No-op here. Defined in derived classes.
UINT div_min ( void ) { return Min_div;}
UINT div_max ( void ) { return Maj_div;}
- float min_val ( void ) { return Minimum_value;}
- float max_val ( void ) { return Maximum_value;}
+ float min_val ( void ) { return Minimum_value;}
+ float max_val ( void ) { return Maximum_value;}
UINT modulo ( void ) { return Modulo; }
- float factor ( void ) { return scale_factor;}
- float range_to_show( void ) { return range_shown;}
+ float factor ( void ) { return scale_factor;}
+ float range_to_show ( void ) { return range_shown;}
};
// hud_card_ This class displays the indicated quantity on
class hud_card : public instr_scale {
private:
- float val_span;
+ float val_span;
string type;
- float half_width_units;
- bool draw_tick_bottom;
- bool draw_tick_top;
- bool draw_tick_right;
- bool draw_tick_left;
- bool draw_cap_bottom;
- bool draw_cap_top;
- bool draw_cap_right;
- bool draw_cap_left;
- float marker_offset;
- bool pointer;
- string pointer_type;
- string tick_type;
- string tick_length;
- float radius; //suma
- float maxValue; //suma
- float minValue; //suma
- int divisions; //suma
- int zoom; //suma
- UINT Maj_div; //suma
- UINT Min_div; //suma
-
-
+ float half_width_units;
+ bool draw_tick_bottom;
+ bool draw_tick_top;
+ bool draw_tick_right;
+ bool draw_tick_left;
+ bool draw_cap_bottom;
+ bool draw_cap_top;
+ bool draw_cap_right;
+ bool draw_cap_left;
+ float marker_offset;
+ bool pointer;
+ string pointer_type;
+ string tick_type;
+ string tick_length;
+ float radius; //suma
+ float maxValue; //suma
+ float minValue; //suma
+ int divisions; //suma
+ int zoom; //suma
+ UINT Maj_div; //suma
+ UINT Min_div; //suma
+
+
public:
hud_card( int x,
int y,
UINT modulator,
int dp_showing,
float value_span,
- string type,
- bool draw_tick_bottom,
- bool draw_tick_top,
- bool draw_tick_right,
- bool draw_tick_left,
- bool draw_cap_bottom,
- bool draw_cap_top,
- bool draw_cap_right,
- bool draw_cap_left,
- float marker_offset,
- bool pointer,
- string pointer_type,
+ string type,
+ bool draw_tick_bottom,
+ bool draw_tick_top,
+ bool draw_tick_right,
+ bool draw_tick_left,
+ bool draw_cap_bottom,
+ bool draw_cap_top,
+ bool draw_cap_right,
+ bool draw_cap_left,
+ float marker_offset,
+ bool pointer,
+ string pointer_type,
string tick_type,
string tick_length,
bool working,
float radius, //suma
int divisions, //suma
- int zoom //suma
+ int zoom //suma
);
float current_ch1( void ) { return (float)alt_data_source();}
float current_ch2( void ) { return (float)get_value();}
- virtual void draw ( void ) { }
+ virtual void draw( void ) { }
};
-class fgTBI_instr : public dual_instr_item
+class fgTBI_instr : public dual_instr_item
{
private:
UINT BankLimit;
UINT height,
FLTFNPTR chn1_source,
FLTFNPTR chn2_source,
- float maxBankAngle,
- float maxSlipAngle,
+ float maxBankAngle,
+ float maxSlipAngle,
UINT gap_width,
bool working,
- bool tsi, //suma
+ bool tsi, //suma
float rad); //suma
fgTBI_instr( const fgTBI_instr & image);
bool velocity_vector;
bool drift_marker;
bool alpha_bracket;
- bool energy_marker;
- bool climb_dive_marker;
- bool glide_slope_marker;
- float glide_slope;
- bool energy_worm;
- bool waypoint_marker;
- int zenith; //suma
- int nadir; //suma
- int hat; //suma
-
+ bool energy_marker;
+ bool climb_dive_marker;
+ bool glide_slope_marker;
+ float glide_slope;
+ bool energy_worm;
+ bool waypoint_marker;
+ int zenith; //suma
+ int nadir; //suma
+ int hat; //suma
+
// The Ladder has it's own temporary display lists
fgTextList TextList;
public:
HudLadder( const string& name,
- int x,
+ int x,
int y,
UINT width,
UINT height,
- float factor,
+ float factor,
FLTFNPTR ptch_source,
FLTFNPTR roll_source,
float span_units,
float minor_division,
UINT screen_hole,
UINT lbl_pos,
- bool frl,
- bool target_spot,
- bool velocity_vector,
- bool drift_marker,
- bool alpha_bracket,
- bool energy_marker,
- bool climb_dive_marker,
- bool glide_slope_marker,
- float glide_slope,
- bool energy_worm,
- bool waypoint_marker,
- bool working,
- int zenith, //suma
- int nadir, //suma
- int hat
+ bool frl,
+ bool target_spot,
+ bool velocity_vector,
+ bool drift_marker,
+ bool alpha_bracket,
+ bool energy_marker,
+ bool climb_dive_marker,
+ bool glide_slope_marker,
+ float glide_slope,
+ bool energy_worm,
+ bool waypoint_marker,
+ bool working,
+ int zenith, //suma
+ int nadir, //suma
+ int hat
); //suma