void CritterDialog::onKeyDown(Event::Keyboard* event) { static std::vector<uint32_t> numkeys = { SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6, SDLK_7, SDLK_8, SDLK_9, SDLK_KP_1, SDLK_KP_2, SDLK_KP_3, SDLK_KP_4, SDLK_KP_5, SDLK_KP_6, SDLK_KP_7, SDLK_KP_8, SDLK_KP_9, }; auto key = event->keyCode(); if (key == SDLK_0 || key == SDLK_KP_0) { // Todo: end dialog return; } auto keyIt = std::find(numkeys.begin(), numkeys.end(), key); // Number key pressed if (keyIt != numkeys.end()) { size_t keyOffset = keyIt - numkeys.begin(); // If numpad key if (keyOffset > 8) keyOffset -= 9; if (keyOffset < _answers.size()) _selectAnswer(keyOffset); return; } }
void CritterDialog::onAnswerClick(Event::Event* event) { auto sender = dynamic_cast<UI::TextArea*>(event->target()); size_t i = 0; for (auto answer : _answers) { if (answer == sender) { _selectAnswer(i); return; } ++i; } }