Beispiel #1
0
/** Update function called from the GUIEngine to handle displaying of the
 *  messages. It will make sure that each message is shown for a certain
 *  amount of time, before it is discarded and the next message (if any)
 *  is displayed.
 *  \param dt Time step size.
 */
void update(float dt)
{
    g_all_messages.lock();
    bool empty = g_all_messages.getData().empty();
    g_all_messages.unlock();
    if (empty) return;

    g_all_messages.lock();
    g_current_display_time += dt;
    if (g_current_display_time > g_max_display_time)
    {
        Message *last = g_all_messages.getData().top();
        g_all_messages.getData().pop();
        delete last;
        if (g_all_messages.getData().empty())
        {
            g_all_messages.unlock();
            return;
        }
        g_current_display_time = -1.0f;
    }

    Message *current = g_all_messages.getData().top();
    // Create new data for the display.
    if (g_current_display_time < 0)
    {
        createLabel(current);
    }
    g_all_messages.unlock();

    GUIEngine::getSkin()->drawMessage(g_container, g_area,
                                      current->getRenderType());
    current->draw();

}   // update
Beispiel #2
0
 /** Returns the IP address of this host. We need to return a copy
  *  to make sure the address is thread safe (otherwise it could happen
  *  that e.g. data is taken when the IP address was written, but not
  *  yet the port). */
 const TransportAddress getMyAddress() const
 {
     TransportAddress a;
     m_my_address.lock();
     a.copy(m_my_address.getData());
     m_my_address.unlock();
     return a;
 }   // getMyAddress
Beispiel #3
0
/** Adds a message to the message queue.
 *  \param mt The MessageType of the message.
 *  \param message The actual message.
 */
void add(MessageType mt, const irr::core::stringw &message)
{
    Message *m = new Message(mt, message);
    g_all_messages.lock();
    if (g_all_messages.getData().empty())
    {
        // Indicate that there is a new message, which should
        // which needs a new label etc. to be computed.
        g_current_display_time =-1.0f;
    }
    g_all_messages.getData().push(m);
    g_all_messages.unlock();
}   // add
Beispiel #4
0
/** Called when the screen resolution is changed to compute the new
 *  position of the message. */
void updatePosition()
{
    g_all_messages.lock();
    bool empty = g_all_messages.getData().empty();
    if (empty)
    {
        g_all_messages.unlock();
        return;
    }
    Message *last = g_all_messages.getData().top();
    createLabel(last);
    g_all_messages.unlock();
}   // updatePosition