float x, y;
} Point;
- typedef struct {
- float top, bottom, left, right;
- } Rect;
-
// called from Main/renderer.cxx to draw 2D and 3D HUD
void draw();
_offset = n->getFloatValue("offset", offset);
_min = n->getFloatValue("min", min);
_max = n->getFloatValue("max", max);
- _coeff = n->getFloatValue("damp", 0.0);
+ _coeff = 1.0 - 1.0 / powf(10, fabsf(n->getFloatValue("damp", 0.0)));
SGPropertyNode *p = ((SGPropertyNode *)n)->getNode("property", false);
if (p) {
const char *path = p->getStringValue();
_damped = f;
if (_coeff > 0.0f)
f = _damped = f * (1.0f - _coeff) + _damped * _coeff;
- return f < _min ? _min : f > _max ? _max : f;
+ return clamp(f);
}
inline float isValid() const { return _valid; }
inline float min() const { return _min; }
inline float max() const { return _max; }
inline float factor() const { return _factor; }
+ float clamp(float v) const { return v < _min ? _min : v > _max ? _max : v; }
void set_min(float m, bool force = true) {
if (force || _min == -SGLimitsf::max())
-class HUD::Item { // An Abstract Base Class (ABC)
+class HUD::Item {
public:
Item(HUD *parent, const SGPropertyNode *, float x = 0.0f, float y = 0.0f);
virtual ~Item () {}
virtual bool isEnabled();
protected:
-
- inline Rect get_location() const { return _scrn_pos; }
inline float get_span() const { return _scr_span; }
inline Point get_centroid() const { return _mid_span; }
inline int get_digits() const { return _digits; }
- inline float get_x() const { return _scrn_pos.left; }
- inline float get_y() const { return _scrn_pos.top; }
- inline float get_width() const { return _scrn_pos.right; }
- inline float get_height() const { return _scrn_pos.bottom; }
-
inline bool option_vert() const { return (_options & VERT) == VERT; }
inline bool option_left() const { return (_options & LEFT) == LEFT; }
inline bool option_right() const { return (_options & RIGHT) == RIGHT; }
HUD *_hud;
string _name;
int _options;
+ float _x, _y, _w, _h;
private:
SGCondition *_condition;
- Rect _scrn_pos; // Framing - affects scale dimensions
- // and orientation. Vert vs Horz, etc.
float _disp_factor; // Multiply by to get numbers shown on scale.
float _scr_span; // Working values for draw;
Point _mid_span;
protected:
inline unsigned int modulo() const { return _modulo; }
- inline float factor() const { return scale_factor; }
- inline float range_to_show() const { return _range_shown; }
+ inline float factor() const { return _display_factor; }
+ inline float range_to_show() const { return _range_shown; }
Input _input;
- unsigned int _major_divs; // major division marker units
- unsigned int _minor_divs; // minor division marker units
+ float _major_divs; // major division marker units
+ float _minor_divs; // minor division marker units
private:
float _range_shown; // Width Units.
- float scale_factor; // factor => screen units/range values.
- unsigned int _modulo; // Roll over point
+ float _display_factor; // factor => screen units/range values.
+ unsigned int _modulo; // Roll over point
};
Input _pitch;
Input _roll;
enum Type { PITCH, CLIMB_DIVE } _type;
- unsigned int width_units;
+ float _width_units;
int div_units;
- unsigned int minor_div;
unsigned int label_pos;
unsigned int _scr_hole;
float _vmax;
float _vmin;
float _compression;
- bool _frl;
+ bool _frl; // fuselage reference line
bool _target_spot;
bool _velocity_vector;
bool _drift_marker;
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);
+ 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);
unsigned short _stipple_center; // stipple pattern of the center line of the runway
bool _draw_arrow; // draw arrow when runway is not visible in HUD
bool _draw_arrow_always; // always draws arrow
- Rect _location;
+ float _left, _right, _top, _bottom;
Point _center;
};