diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp index 45b3c95975..8909b9cdec 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -45,21 +45,36 @@ void Screen::Update( float fDeltaTime ) // update the times of queued ScreenMessages and send if timer has expired // The order you remove messages in must be very careful! Sending a message can // potentially clear all m_QueuedMessages, and set a new state! - for( unsigned i=0; iHandleScreenMessage( m_QueuedMessages[i].SM ); - if(i < m_QueuedMessages.size()) - m_QueuedMessages.erase(m_QueuedMessages.begin()+i); - i--; - } - else - { - m_QueuedMessages[i].fDelayRemaining -= fDeltaTime; - } + if( m_QueuedMessages[i].fDelayRemaining > 0.0f ) + continue; /* not yet */ + + /* Remove the message from the list. */ + const ScreenMessage SM = m_QueuedMessages[i].SM; + m_QueuedMessages.erase(m_QueuedMessages.begin()+i); + i--; + + unsigned size = m_QueuedMessages.size(); + + // send this sucker! + this->HandleScreenMessage( SM ); + + /* If the size changed, start over. */ + if(size != m_QueuedMessages.size()) + i = 0; } }