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; }
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; } }