Exemplo n.º 1
0
void Submenu::control(int key)
{
    int b;
    do
    {
        b = Input::instance->popButton();
    }
    while (Input::instance->popButton() != -1);
    
    //get mouse position
    const Mouse& mouse = Input::instance->mouse();

    int videoHeight = Video::instance->getResolution().second;
    Vector mousePos = Vector(static_cast<float>(mouse.x), 0.0f, static_cast<float>(videoHeight - mouse.y));

    //adjust active entry depending on up/down keys
    if ((key == GLFW_KEY_DOWN) || (key == GLFW_KEY_UP))
    {
        activateNextEntry(key == GLFW_KEY_DOWN);
        m_menu->m_sound->play(m_menu->m_soundOver);
    }

    if (m_menu->m_mousePrevPos != mousePos)
    {
        //adjust active entry depending on mouse position
        for (size_t i = 0; i < m_entries.size(); i++)
        {
            Entry* currentEntry = m_entries[i];
            if ( (m_previousMousePos != mousePos)
                && currentEntry->isMouseOver(mousePos)
                && (currentEntry->isEnabled()))
            {
                if (m_activeEntry != i)
                {
                    m_menu->m_sound->play(m_menu->m_soundOver);
                }
                m_activeEntry = i;
                break;
            }
        }
        m_menu->m_mousePrevPos = mousePos;
    }

    Entry* currentEntry = m_entries[m_activeEntry];

    
    if (b != -1)
    {
        if (currentEntry->isMouseOver(mousePos))
        {
            currentEntry->click(b);
        }
    }
    else if (key != -1)
    {
        currentEntry->click(key);
    }

    m_previousMousePos = mousePos;
}
Exemplo n.º 2
0
void Submenu::control()
{
    const Touches& touches = Input::instance->touches();
    if (touches.empty() == false)
    {
        int x = touches.begin()->second.first;
        int y = touches.begin()->second.second;

        int videoHeight = Video::instance->getResolution().second;
        Vector mousePos = Vector(static_cast<float>(x), 0.0f, static_cast<float>(videoHeight - y));

        if (m_menu->m_mousePrevPos != mousePos)
        {
            //adjust active entry depending on mouse position
            for (size_t i = 0; i < m_entries.size(); i++)
            {
                Entry* currentEntry = m_entries[i];
                if ( (m_previousMousePos != mousePos)
                    && currentEntry->isMouseOver(mousePos)
                    && (currentEntry->isEnabled()))
                {
                    if (m_activeEntry != i)
                    {
                        m_menu->m_sound->play(m_menu->m_soundOver);
                    }
                    m_activeEntry = i;
                    Input::instance->waitForRelease();
                    break;
                }
            }
            m_menu->m_mousePrevPos = mousePos;
        }

        Entry* currentEntry = m_entries[m_activeEntry];
        
        if (currentEntry->isMouseOver(mousePos))
        {
            currentEntry->click();
            Input::instance->waitForRelease();
        }

        m_previousMousePos = mousePos;
    }
}