#include "ATCdisplay.hxx"
-FGATCDisplay *current_atcdisplay;
-
-
// Constructor
-FGATCDisplay::FGATCDisplay( void ) {
+FGATCDisplay::FGATCDisplay() {
rep_msg = false;
change_msg_flag = false;
dsp_offset1 = 0;
// Destructor
-FGATCDisplay::~FGATCDisplay( void ) {
+FGATCDisplay::~FGATCDisplay() {
+}
+
+void FGATCDisplay::init() {
}
-void FGATCDisplay::init( void ) {
+void FGATCDisplay::bind() {
}
+void FGATCDisplay::unbind() {
+}
// update - this actually draws the visuals and should be called from the main Flightgear rendering loop.
-void FGATCDisplay::update() {
+void FGATCDisplay::update(int dt) {
// These strings are used for temporary storage of the transmission string in order
- // that the string we view only changes when the next repitition starts scrolling
+ // that the string we view only changes when the next repetition starts scrolling
// even though the master string (rep_msg_str) may change at any time.
static string msg1 = "";
static string msg2 = "";
}
}
+
+ if(msgList.size()) {
+ //cout << "Attempting to render single message\n";
+ // We have at least one non-repeating message to process
+ msgList_itr = msgList.begin();
+ int i = 0;
+ while(msgList_itr != msgList.end()) {
+ atcMessage m = *msgList_itr;
+ //cout << "m.counter = " << m.counter << '\n';
+ if(m.counter > m.stop_count) {
+ //cout << "Stopping single message\n";
+ msgList_itr = msgList.erase(msgList_itr);
+ } else if(m.counter > m.start_count) {
+ //cout << "Displaying single message\n";
+ // Display the message
+ // FIXME - I'm sure all this opengl code should only be called once until all drawing is finished
+ SGPropertyNode *xsize_node = fgGetNode("/sim/startup/xsize");
+ SGPropertyNode *ysize_node = fgGetNode("/sim/startup/ysize");
+ int iwidth = xsize_node->getIntValue();
+ int iheight = ysize_node->getIntValue();
+ glMatrixMode( GL_PROJECTION );
+ glPushMatrix();
+ glLoadIdentity();
+ gluOrtho2D( 0, iwidth, 0, iheight );
+ glMatrixMode( GL_MODELVIEW );
+ glPushMatrix();
+ glLoadIdentity();
+
+ glDisable( GL_DEPTH_TEST );
+ glDisable( GL_LIGHTING );
+
+ glColor3f( 0.9, 0.4, 0.2 );
+
+ guiFnt.drawString( m.msg.c_str(),
+ 100,
+ (iheight - 40) ); // TODO - relate the distance in that the string is rendered to the string length.
+ glEnable( GL_DEPTH_TEST );
+ glEnable( GL_LIGHTING );
+ glMatrixMode( GL_PROJECTION );
+ glPopMatrix();
+ glMatrixMode( GL_MODELVIEW );
+ glPopMatrix();
+ ++m.counter;
+ msgList[i] = m;
+ ++msgList_itr;
+ ++i;
+ } else {
+ ++m.counter;
+ msgList[i] = m;
+ ++msgList_itr;
+ ++i;
+ }
+ }
+ }
}
+void FGATCDisplay::RegisterSingleMessage(string msg, int delay) {
+ atcMessage m;
+ m.msg = msg;
+ m.repeating = false;
+ m.counter = 0;
+ m.start_count = delay * 30; // Fixme - need to use actual FPS
+ m.stop_count = m.start_count + 100; // Display for 3 - 5 seconds for now - this might have to change eg. be related to length of message in future
+ //cout << "m.stop_count = " << m.stop_count << '\n';
+ m.id = 0;
+
+ msgList.push_back(m);
+ //cout << "Single message registered\n";
+}
void FGATCDisplay::RegisterRepeatingMessage(string msg) {
rep_msg = true;