X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fhud.hxx;h=8591bb9b2927583921ebeb344f00319286bc666f;hb=ddda2c68d5000377c7f76193f27ef78645fe316e;hp=23fb57d7be18686003d291f96a17354a3359edac;hpb=43e48070fec3ff8299be0e6aa5a709711def50fe;p=flightgear.git diff --git a/src/Cockpit/hud.hxx b/src/Cockpit/hud.hxx index 23fb57d7b..8591bb9b2 100644 --- a/src/Cockpit/hud.hxx +++ b/src/Cockpit/hud.hxx @@ -16,7 +16,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -38,8 +38,6 @@ # include #endif -#include GLUT_H - #include #include @@ -47,21 +45,25 @@ //# include // for MAXINT //#endif +#include // for_each() #include // STL vector #include // STL double ended queue #include STL_FSTREAM #include +//#include #include #include +#include #include -#include #include #include
#include
+#include #include "hud_opts.hxx" +#include SG_USING_STD(deque); SG_USING_STD(vector); @@ -74,7 +76,7 @@ SG_USING_NAMESPACE(std); typedef struct { int x, y; } POINT; - + typedef struct { int top, bottom, left, right; } RECT; @@ -84,17 +86,6 @@ typedef struct { enum VIEW_MODES{ HUD_VIEW, PANEL_VIEW, CHASE_VIEW, TOWER_VIEW }; -// DAY, NIGHT and brightness levels need to be visible where dialogs and -// controls can be used to set intensity and appropriate color. This will -// be moved. -// Hud general constants -#define HUD_DAY 1 -#define HUD_NIGHT 2 -#define HUD_BRT_BLACK 3 -#define HUD_BRT_DARK 4 -#define HUD_BRT_MEDIUM 5 -#define HUD_BRT_LIGHT 6 - // Label constants #define HUD_FONT_SMALL 1 #define HUD_FONT_LARGE 2 @@ -249,15 +240,24 @@ public: } ~fgLineSeg2D() {} - - void draw() + + void draw() const { glVertex2f(x0, y0); glVertex2f(x1, y1); } }; +class DrawLineSeg2D { + public: + void operator() (const fgLineSeg2D& elem) const { + elem.draw(); + } +}; + + #define USE_HUD_TextList +extern fntTexFont *HUD_Font; extern float HUD_TextSize; extern fntRenderer *HUDtext; extern float HUD_matrix[16]; @@ -267,93 +267,92 @@ private: float x, y; char msg[64]; public: - int digit; //suma - fgText(float x = 0, float y = 0, char *c = NULL,int digits=0): x(x), y(y) //suma - { + int digit; + fgText(float x = 0, float y = 0, char *c = NULL,int digits=0): x(x), y(y) + { strcpy(msg,c); - digit=digits; //suma + digit=digits; } - + 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); } fgText& operator = ( const fgText & image ) { - strcpy(msg,image.msg); x = image.x; y = image.y;digit=image.digit; //suma - return *this; + strcpy(msg,image.msg); x = image.x; y = image.y;digit=image.digit; + return *this; } - ~fgText() {msg[0]='\0';} + ~fgText() { msg[0]='\0'; } int getStringWidth ( char *str ) { if ( HUDtext && str ) { float r, l ; - guiFntHandle->getBBox ( str, HUD_TextSize, 0, &l, &r, NULL, NULL ) ; + HUD_Font->getBBox ( str, HUD_TextSize, 0, &l, &r, NULL, NULL ) ; return FloatToInt( r - l ); } return 0 ; } - + int StringWidth (void ) { if ( HUDtext && strlen( msg )) { float r, l ; - guiFntHandle->getBBox ( msg, HUD_TextSize, 0, &l, &r, NULL, NULL ) ; + HUD_Font->getBBox ( msg, HUD_TextSize, 0, &l, &r, NULL, NULL ) ; return FloatToInt( r - l ); } 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 + // is shown as 10ooo. void Draw(fntRenderer *fnt,int digits) { - if(digits==1) { + if (digits==1) { int c=0,i=0; char *t=msg; int p=4; - if(t[0]=='-') { + if (t[0]=='-') { //if negative value then increase the c and p values //for '-' sign. c++; p++; } char *tmp=msg; - while(tmp[i]!='\0') { - if((tmp[i]>='0') && (tmp[i]<='9')) + while (tmp[i]!='\0') { + if ((tmp[i]>='0') && (tmp[i]<='9')) c++; i++; } - if(c>p) { - fnt->setPointSize(8); + if (c>p) { + fnt->setPointSize(HUD_TextSize * 0.8); int p1=c-3; char *tmp1=msg+p1; int p2=p1*8; - + fnt->start2f(x+p2,y); fnt->puts(tmp1); - fnt->setPointSize(12); + fnt->setPointSize(HUD_TextSize * 1.2); char tmp2[64]; strncpy(tmp2,msg,p1); tmp2[p1]='\0'; - + fnt->start2f(x,y); fnt->puts(tmp2); } else { - fnt->setPointSize(12); + fnt->setPointSize(HUD_TextSize * 1.2); fnt->start2f( x, y ); fnt->puts(tmp); } } else { //if digits not equal to 1 - fnt->setPointSize(8); + fnt->setPointSize(HUD_TextSize * 0.8); fnt->start2f( x, y ); fnt->puts( msg ) ; } } - //end suma void Draw() { @@ -366,30 +365,13 @@ class fgLineList { public: fgLineList( void ) {} ~fgLineList( void ) {} - void add( fgLineSeg2D seg ) { List.push_back(seg); } + void add( const fgLineSeg2D& seg ) { List.push_back(seg); } void erase( void ) { List.erase( List.begin(), List.end() ); } void draw( void ) { - vector < fgLineSeg2D > :: iterator curSeg; - vector < fgLineSeg2D > :: iterator lastSeg; - curSeg = List.begin(); - lastSeg = List.end(); glBegin(GL_LINES); - for ( ; curSeg != lastSeg; curSeg++ ) { - curSeg->draw(); - } + for_each( List.begin(), List.end(), DrawLineSeg2D()); glEnd(); } - /* void draw( void ) { - vector < fgLineSeg2D > :: iterator curSeg; - vector < fgLineSeg2D > :: iterator lastSeg; - curSeg = List.begin(); - lastSeg = List.end(); - glBegin(GL_LINES); - for ( ; curSeg != lastSeg; curSeg++ ) { - curSeg->draw(); - } - glEnd(); - } */ }; class fgTextList { @@ -398,32 +380,11 @@ class fgTextList { public: fgTextList ( void ) { Font = 0; } ~fgTextList( void ) {} - + void setFont( fntRenderer *Renderer ) { Font = Renderer; } - void add( fgText String ) { List.push_back(String); } + void add( const fgText& String ) { List.push_back(String); } void erase( void ) { List.erase( List.begin(), List.end() ); } - - void draw( void ) { - vector < fgText > :: iterator curString; - vector < fgText > :: iterator lastString; - if( Font == 0 ) return; - curString = List.begin(); - lastString = List.end(); - glPushAttrib( GL_COLOR_BUFFER_BIT ); - glEnable ( GL_ALPHA_TEST ) ; - glEnable ( GL_BLEND ) ; - glAlphaFunc ( GL_GREATER, 0.1 ) ; - glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ; - - Font->begin(); - for( ; curString != lastString; curString++ ) { - curString->Draw(Font,curString->digit); //suma - } - Font->end(); - - glDisable ( GL_TEXTURE_2D ) ; - glPopAttrib(); - } + void draw( void ); }; @@ -432,7 +393,7 @@ inline void Text( fgTextList &List, float x, float y, char *s) List.add( fgText( x, y, s) ); } -inline void Text( fgTextList &List, fgText &me) +inline void Text( fgTextList &List, const fgText &me) { List.add(me); } @@ -465,8 +426,8 @@ private: bool broken; UINT scr_span; // Working values for draw; POINT mid_span; // - int digits; //suma - + int digits; + public: instr_item( int x, int y, @@ -476,14 +437,13 @@ public: float data_scaling, UINT options, bool working = true, - int digit = 0); //suma - + int digit = 0); instr_item( const instr_item & image ); - instr_item & operator = ( const instr_item & rhs ); virtual ~instr_item (); + void set_data_source ( FLTFNPTR fn ) { load_value_fn = fn; } int get_brightness ( void ) { return brightness;} RECT get_location ( void ) { return scrn_pos; } bool is_broken ( void ) { return broken; } @@ -494,7 +454,7 @@ public: 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; } UINT huds_vert (UINT options) { return( options & HUDS_VERT ); } UINT huds_left (UINT options) { return( options & HUDS_LEFT ); } @@ -506,7 +466,7 @@ public: 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 ); @@ -515,7 +475,7 @@ public: 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)); @@ -524,15 +484,15 @@ public: { HUD_StippleLineList.add(fgLineSeg2D(x1,y1,x2,y2)); } - void TextString( char *msg, float x, float y,int digit ) //suma + void TextString( char *msg, float x, float y,int digit ) { - HUD_TextList.add(fgText(x, y, msg,digit)); //suma + HUD_TextList.add(fgText(x, y, msg,digit)); } int getStringWidth ( char *str ) { if ( HUDtext && str ) { float r, l ; - guiFntHandle->getBBox ( str, HUD_TextSize, 0, &l, &r, NULL, NULL ) ; + HUD_Font->getBBox ( str, HUD_TextSize, 0, &l, &r, NULL, NULL ) ; return FloatToInt( r - l ); } return 0 ; @@ -541,21 +501,27 @@ public: //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; -//typedef deque < instr_item * > hud_deque_type; -//typedef hud_deque_type::iterator hud_deque_iterator; -//typedef hud_deque_type::const_iterator hud_deque_const_iterator; + +class HUDdraw { + public: + void operator() (HIptr elem) const { + if ( elem->enabled()) + elem->draw(); + } +}; + extern deque< instr_item *> HUD_deque; extern int HUD_style; @@ -568,46 +534,25 @@ extern int HUD_style; class instr_label : public instr_item { private: - const char *pformat; - const char *pre_str; - const char *post_str; + const char *pformat; + const char *pre_str; + const char *post_str; fgLabelJust justify; int fontSize; int blink; - char format_buffer[80]; - bool lat; - bool lon; - bool lbox; + char format_buffer[80]; + bool lat; + bool lon; + bool lbox; public: - 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 ); //suma); - + instr_label(const SGPropertyNode *); ~instr_label(); - instr_label( const instr_label & image); - instr_label & operator = (const instr_label & rhs ); - virtual void draw( void ); // Required method in base class + instr_label(const instr_label& image); + virtual void draw(void); }; -typedef instr_label * pInstlabel; - class lat_label : public instr_item { private: @@ -628,22 +573,20 @@ public: 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 ); ~lat_label(); lat_label( const lat_label & image); - lat_label & operator = (const lat_label & rhs ); virtual void draw( void ); // Required method in base class }; -typedef lat_label * pLatlabel; class lon_label : public instr_item { private: @@ -664,23 +607,65 @@ public: 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); ~lon_label(); lon_label( const lon_label & image); - lon_label & operator = (const lon_label & rhs ); virtual void draw( void ); // Required method in base class }; -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 +{ +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); + + 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 +}; + // // instr_scale This class is an abstract base class for both moving @@ -706,10 +691,10 @@ public: 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, @@ -718,16 +703,15 @@ public: virtual ~instr_scale(); instr_scale( const instr_scale & image); - instr_scale & operator = (const instr_scale & rhs); 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 @@ -737,31 +721,31 @@ public: 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; + float maxValue; + float minValue; + int divisions; + int zoom; + UINT Maj_div; + UINT Min_div; + + public: hud_card( int x, int y, @@ -777,37 +761,36 @@ public: 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 + float radius, + int divisions, + int zoom + ); ~hud_card(); hud_card( const hud_card & image); - hud_card & operator = (const hud_card & rhs ); // virtual void display_enable( bool setting ); virtual void draw( void ); // Required method in base class - void circles(float,float,float); // suma - void fixed(float,float,float,float,float,float); //suma - void zoomed_scale(int,int); //suma + void circles(float,float,float); + void fixed(float,float,float,float,float,float); + void zoomed_scale(int,int); }; -typedef hud_card * pCardScale; class gauge_instr : public instr_scale { public: @@ -828,11 +811,10 @@ public: ~gauge_instr(); gauge_instr( const gauge_instr & image); - gauge_instr & operator = (const gauge_instr & rhs ); virtual void draw( void ); // Required method in base class }; -typedef gauge_instr * pGaugeInst; + // // dual_instr_item This class was created to form the base class // for both panel and HUD Turn Bank Indicators. @@ -853,21 +835,20 @@ public: virtual ~dual_instr_item() {}; dual_instr_item( const dual_instr_item & image); - dual_instr_item & operator = (const dual_instr_item & rhs ); 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 SlewLimit; UINT scr_hole; - bool tsi; //suma - float rad; //suma + bool tsi; + float rad; public: fgTBI_instr( int x, @@ -876,15 +857,14 @@ public: UINT height, FLTFNPTR chn1_source, FLTFNPTR chn2_source, - float maxBankAngle, - float maxSlipAngle, + float maxBankAngle, + float maxSlipAngle, UINT gap_width, bool working, - bool tsi, //suma - float rad); //suma + bool tsi, + float rad); fgTBI_instr( const fgTBI_instr & image); - fgTBI_instr & operator = (const fgTBI_instr & rhs ); ~fgTBI_instr(); @@ -894,7 +874,6 @@ public: virtual void draw( void ); // Required method in base class }; -typedef fgTBI_instr * pTBI; class HudLadder : public dual_instr_item { private: @@ -912,73 +891,42 @@ private: 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; + int nadir; + int hat; + + // The Ladder has it's own temporary display lists fgTextList TextList; fgLineList LineList; fgLineList StippleLineList; public: - HudLadder( string name, - int x, - int y, - UINT width, - UINT height, - float factor, - FLTFNPTR ptch_source, - FLTFNPTR roll_source, - float span_units, - float division_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); //suma - - + HudLadder(const SGPropertyNode *); ~HudLadder(); - HudLadder( const HudLadder & image ); - HudLadder & operator = ( const HudLadder & rhs ); - virtual void draw( void ); - void drawZenith(float,float,float); //suma - void drawNadir(float, float, float); //suma + virtual void draw(void); + void drawZenith(float, float, float); + void drawNadir(float, float, float); - void Text( float x, float y, char *s) + void Text(float x, float y, char *s) { - TextList.add( fgText( x, y, s) ); + TextList.add(fgText(x, y, s)); } - void Line( float x1, float y1, float x2, float y2) + void Line(float x1, float y1, float x2, float y2) { - LineList.add(fgLineSeg2D(x1,y1,x2,y2)); + LineList.add(fgLineSeg2D(x1, y1, x2, y2)); } - void StippleLine( float x1, float y1, float x2, float y2) + void StippleLine(float x1, float y1, float x2, float y2) { - StippleLineList.add(fgLineSeg2D(x1,y1,x2,y2)); + StippleLineList.add(fgLineSeg2D(x1, y1, x2, y2)); } }; @@ -986,31 +934,12 @@ public: //using namespace std; //deque * Hdeque_ptr; -extern void HUD_masterswitch( bool incr ); -extern void HUD_brightkey( bool incr_bright ); extern int fgHUDInit( fgAIRCRAFT * /* current_aircraft */ ); extern int fgHUDInit2( fgAIRCRAFT * /* current_aircraft */ ); extern void fgUpdateHUD( void ); extern void fgUpdateHUD( GLfloat x_start, GLfloat y_start, GLfloat x_end, GLfloat y_end ); -extern void drawOneLine ( UINT x1, UINT y1, UINT x2, UINT y2); -extern void drawOneLine ( RECT &rect); -extern void textString ( int x, - int y, - char *msg, - void *font = GLUT_BITMAP_9_BY_15,int digit=0); //suma -extern void strokeString( int x, - int y, - char *msg, - void *font = GLUT_STROKE_ROMAN, - float theta = 0); - -//extern void strokeString(float xx, -// float yy, -// char *msg, -// void *font = GLUT_STROKE_ROMAN) - /* bool AddHUDInstrument( instr_item *pBlackBox ); void DrawHUD ( void ); @@ -1023,4 +952,32 @@ void fgUpdateHUD2( Hptr hud ); // Future use? void fgHUDSetTimeMode( Hptr hud, int time_of_day ); */ + + + +class HUD_Properties : public SGPropertyChangeListener { +public: + HUD_Properties(); + void valueChanged(SGPropertyNode *n); + void setColor() const; + bool isVisible() const { return _visible; } + bool isAntialiased() const { return _antialiased; } + bool isTransparent() const { return _transparent; } + float alphaClamp() const { return _cl; } + +private: + float clamp(float f) { return f < 0.0f ? 0.0f : f > 1.0f ? 1.0f : f; } + SGPropertyNode_ptr _current; + SGPropertyNode_ptr _visibility; + SGPropertyNode_ptr _antialiasing; + SGPropertyNode_ptr _transparency; + SGPropertyNode_ptr _red, _green, _blue, _alpha; + SGPropertyNode_ptr _alpha_clamp; + SGPropertyNode_ptr _brightness; + bool _visible; + bool _antialiased; + bool _transparent; + float _r, _g, _b, _a, _cl; +}; + #endif // _HUD_H