virtual MenuInputState* run() { int event = _vm->_input->getLastButtonEvent(); if (!((event == kMouseLeftUp) && _selection >= 0)) { redrawMenu(); return this; } int selection = _options[_selection]; switch (selection) { case kMenuQuit: { _vm->quitGame(); break; } case kMenuLoadGame: warning("loadgame not yet implemented"); if (!_vm->_saveLoad->loadGame()) { return this; } break; default: _vm->_nextPart = _firstLocation[selection].part; _vm->scheduleLocationSwitch(_firstLocation[selection].location); } _vm->_system->showMouse(false); cleanup(); return 0; }
void displayMenu() { menuOn = true; fastForwardMode = false; if (checkRumble()) enableMenuOption("Rumble Pak"); else disableMenuOption("Rumble Pak"); // Enable backlight if necessary, and delay as necessary if the console // needs to be initialized. updateScreens(!consoleInitialized); redrawMenu(); }
void ToucheEngine::handleOptions(int forceDisplay) { if (_disabledInputCounter == 0 || forceDisplay != 0) { setDefaultCursor(_currentKeyCharNum); _gameState = kGameStateOptionsDialog; MenuData menuData; memset(&menuData, 0, sizeof(MenuData)); menuData.quit = false; menuData.exit = false; menuData.mode = kMenuSettingsMode; int curMode = -1; bool doRedraw = false; while (!menuData.quit) { if (menuData.mode != curMode) { doRedraw = true; setupMenu(menuData.mode, &menuData); curMode = menuData.mode; if (menuData.mode == kMenuLoadStateMode || menuData.mode == kMenuSaveStateMode) { for (int i = 0; i < kMaxSaveStates; ++i) { menuData.saveLoadDescriptionsTable[i][0] = 0; } Common::String gameStateFileName = generateGameStateFileName(_targetName.c_str(), 0, true); Common::StringArray filenames = _saveFileMan->listSavefiles(gameStateFileName); for (Common::StringArray::const_iterator it = filenames.begin(); it != filenames.end(); ++it) { int i = getGameStateFileSlot(it->c_str()); if (i >= 0 && i < kMaxSaveStates) { Common::InSaveFile *f = _saveFileMan->openForLoading(*it); if (f) { readGameStateDescription(f, menuData.saveLoadDescriptionsTable[i], 32); delete f; } } } } } if (doRedraw) { redrawMenu(&menuData); updateScreenArea(90, 102, 460, 196); doRedraw = false; } Common::Event event; while (_eventMan->pollEvent(event)) { const Button *button = 0; switch (event.type) { case Common::EVENT_RTL: case Common::EVENT_QUIT: menuData.quit = true; menuData.exit = true; break; case Common::EVENT_LBUTTONDOWN: button = menuData.findButtonUnderCursor(event.mouse.x, event.mouse.y); if (button) { handleMenuAction(&menuData, button->action); doRedraw = true; } break; case Common::EVENT_KEYDOWN: if (menuData.mode == kMenuSaveStateMode) { if (event.kbd.keycode == Common::KEYCODE_BACKSPACE) { menuData.removeLastCharFromDescription(_saveLoadCurrentSlot); } else { menuData.addCharToDescription(_saveLoadCurrentSlot, (char)event.kbd.ascii); } doRedraw = true; } break; case Common::EVENT_WHEELUP: handleMenuAction(&menuData, kActionScrollUpSaves); doRedraw = true; break; case Common::EVENT_WHEELDOWN: handleMenuAction(&menuData, kActionScrollDownSaves); doRedraw = true; break; default: break; } } _system->updateScreen(); _system->delayMillis(10); } _fullRedrawCounter = 2; if (!menuData.exit && shouldQuit()) { if (displayQuitDialog()) quitGame(); } _gameState = kGameStateGameLoop; } }