#define _HUD_HXX
#include <simgear/compiler.h>
+#include <simgear/props/condition.hxx>
#ifdef HAVE_CONFIG_H
# include <config.h>
#include <vector>
#include <deque>
-#include STL_FSTREAM
+#include <fstream>
-SG_USING_STD(deque);
-SG_USING_STD(vector);
-SG_USING_NAMESPACE(std);
+using std::deque;
+using std::vector;
-#include <plib/sg.h>
+#include <osg/State>
#include <simgear/math/SGLimits.hxx>
#include <simgear/constants.h>
class FGViewer;
-class SGCondition;
+
+
+class ClipBox {
+public:
+ ClipBox(const SGPropertyNode *, float xoffset = 0, float yoffset = 0);
+ void set();
+ void unset();
+
+private:
+ bool _active;
+ float _xoffs, _yoffs;
+ SGConstPropertyNode_ptr _top_node;
+ SGConstPropertyNode_ptr _bot_node;
+ SGConstPropertyNode_ptr _left_node;
+ SGConstPropertyNode_ptr _right_node;
+ GLdouble _top[4];
+ GLdouble _bot[4];
+ GLdouble _left[4];
+ GLdouble _right[4];
+};
+
class LineSegment {
void init();
void update(double);
+ void reinit();
+
// called from Main/renderer.cxx to draw 2D and 3D HUD
- void draw();
+ void draw(osg::State&);
// listener callback to read various HUD related properties
void valueChanged(SGPropertyNode *);
inline bool is3D() const { return _3Denabled; }
inline float alphaClamp() const { return _cl; }
inline double timer() const { return _timer; }
- static void textAlign(fntRenderer *r, const char *s, int align, float *x, float *y,
+ static void textAlign(fntRenderer *rend, const char *s, int align, float *x, float *y,
float *l, float *r, float *b, float *t);
enum Units { FEET, METER };
protected:
void common_draw();
int load(const char *, float x = 320.0f, float y = 240.0f,
- int level = 0, const string& indent = "");
+ int level = 0, const std::string& indent = "");
private:
+ void deinit();
+
void draw3D();
void draw2D(GLfloat, GLfloat, GLfloat, GLfloat);
class AimingReticle;
deque<Item *> _items;
+ deque<Item *> _ladders;
+ SGPropertyNode_ptr _path;
SGPropertyNode_ptr _current;
SGPropertyNode_ptr _visibility;
SGPropertyNode_ptr _3DenabledN;
fntTexFont *_font;
float _font_size;
int _style;
+ bool _listener_active;
+ ClipBox *_clip_box;
TextList _text_list;
LineList _line_list;
LineList _stipple_line_list;
void draw_line(float x1, float y1, float x2, float y2);
void draw_stipple_line(float x1, float y1, float x2, float y2);
- void draw_text(float x, float y, char *msg, int align = 0, int digit = 0);
+ void draw_text(float x, float y, const char *msg, int align = 0, int digit = 0);
void draw_circle(float x1, float y1, float r) const;
+ void draw_arc(float x1, float y1, float t0, float t1, float r) const;
void draw_bullet(float, float, float);
HUD *_hud;
- string _name;
+ std::string _name;
int _options;
float _x, _y, _w, _h;
float _center_x, _center_y;
private:
- SGCondition *_condition;
+ SGSharedPtr<SGCondition> _condition;
float _disp_factor; // Multiply by to get numbers shown on scale.
float _scr_span; // Working values for draw;
int _digits;
Input _input;
Format _mode;
- string _format;
+ std::string _format;
int _halign; // HUDText alignment
int _blink;
bool _box;
float _pointer_width;
float _pointer_length;
- SGCondition *_blink_condition;
+ SGSharedPtr<SGCondition> _blink_condition;
double _blink_interval;
double _blink_target; // time for next blink state change
bool _blink_state;
virtual void draw();
protected:
+ void draw_vertical(float);
+ void draw_horizontal(float);
void draw_fixed_pointer(float, float, float, float, float, float);
- void zoomed_scale(int, int);
char *format_value(float);
private:
bool _draw_cap_right;
bool _draw_cap_left;
float _marker_offset;
+ float _label_offset;
float _label_gap;
bool _pointer;
Format _label_fmt;
- string _format;
- int _zoom;
+ std::string _format;
+ int _div_ratio; // _major_divs/_minor_divs
+ bool _odd_type; // whether to put numbers at 0/2/4 or 1/3/5
enum { BUFSIZE = 64 };
char _buf[BUFSIZE];
class HUD::Ladder : public Item {
public:
Ladder(HUD *parent, const SGPropertyNode *, float x, float y);
+ ~Ladder();
virtual void draw();
private:
void draw_zenith(float, float);
void draw_nadir(float, float);
- void draw_text(float x, float y, char *s, int align = 0) {
+ void draw_text(float x, float y, const char *s, int align = 0) {
_locTextList.add(x, y, s, align, 0);
}
- void draw_line(float x1, float y1, float x2, float y2) {
- _locLineList.add(LineSegment(x1, y1, x2, y2));
- }
-
- void draw_stipple_line(float x1, float y1, float x2, float y2) {
- _locStippleLineList.add(LineSegment(x1, y1, x2, y2));
+ void draw_line(float x1, float y1, float x2, float y2, bool stipple = false) {
+ if (stipple)
+ _locStippleLineList.add(LineSegment(x1, y1, x2, y2));
+ else
+ _locLineList.add(LineSegment(x1, y1, x2, y2));
}
enum Type { PITCH, CLIMB_DIVE } _type;
Input _roll;
float _width_units;
int _div_units;
- unsigned int _scr_hole;
+ float _scr_hole;
+ float _zero_bar_overlength;
+ bool _dive_bar_angle;
+ float _tick_length;
float _vmax;
float _vmin;
float _compression;
bool _dynamic_origin;
- bool _clip_plane;
bool _frl; // fuselage reference line
bool _target_spot;
bool _target_markers;
bool _nadir;
bool _hat;
+ ClipBox *_clip_box;
// The Ladder has its own temporary display lists
TextList _locTextList;
LineList _locLineList;
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);
+ FGRunway* get_active_runway();
void get_rwy_points(sgdVec3 *points);
void setLineWidth();
double _default_pitch;
double _default_heading;
GLint _view[4];
- FGRunway _runway;
- FGViewer* _cockpit_view;
+ FGRunway* _runway;
unsigned short _stipple_out; // stipple pattern of the outline of the runway
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
virtual void draw();
private:
- SGCondition *_active_condition; // stadiametric (true) or standby (false)
+ SGSharedPtr<SGCondition> _active_condition; // stadiametric (true) or standby (false)
+ SGSharedPtr<SGCondition> _tachy_condition; // tachymetric (true) or standby (false)
+ SGSharedPtr<SGCondition> _align_condition; // tachymetric (true) or standby (false)
+
Input _diameter; // inner/outer radius relation
+ Input _pitch;
+ Input _yaw;
+ Input _speed;
+ Input _range;
+ Input _t0;
+ Input _t1;
+ Input _offset_x;
+ Input _offset_y;
+
float _bullet_size;
float _inner_radius;
-};
+ float _compression;
+ float _limit_x;
+ float _limit_y;
+};
#endif // _HUD_HXX