From 076d6b1bc1c4f62732ff46a0931c6bc28ef9a08f Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 29 Jul 2007 16:31:29 +0000 Subject: Restructure Kyrandia sourcecode (part 2, compiling works again) svn-id: r28296 --- engines/kyra/gui_v1.cpp | 329 ++++++++++++------------------------------------ 1 file changed, 81 insertions(+), 248 deletions(-) (limited to 'engines/kyra/gui_v1.cpp') diff --git a/engines/kyra/gui_v1.cpp b/engines/kyra/gui_v1.cpp index fe051dd75c..2452185c24 100644 --- a/engines/kyra/gui_v1.cpp +++ b/engines/kyra/gui_v1.cpp @@ -23,11 +23,11 @@ * */ -#include "kyra/kyra.h" +#include "kyra/kyra_v1.h" #include "kyra/screen.h" #include "kyra/script.h" #include "kyra/text.h" -#include "kyra/animator.h" +#include "kyra/animator_v1.h" #include "kyra/sound.h" #include "common/config-manager.h" @@ -37,14 +37,14 @@ namespace Kyra { -void KyraEngine::registerDefaultSettings() { +void KyraEngine_v1::registerDefaultSettings() { // Most settings already have sensible defaults. This one, however, is // specific to the Kyra engine. ConfMan.registerDefault("walkspeed", 2); ConfMan.registerDefault("cdaudio", _flags.platform == Common::kPlatformFMTowns); } -void KyraEngine::readSettings() { +void KyraEngine_v1::readSettings() { int talkspeed = ConfMan.getInt("talkspeed"); // The default talk speed is 60. This should be mapped to "Normal". @@ -78,7 +78,7 @@ void KyraEngine::readSettings() { setWalkspeed(_configWalkspeed); } -void KyraEngine::writeSettings() { +void KyraEngine_v1::writeSettings() { bool speechMute, subtitles; int talkspeed; @@ -130,14 +130,14 @@ void KyraEngine::writeSettings() { ConfMan.flushToDisk(); } -void KyraEngine::initMainButtonList() { +void KyraEngine_v1::initMainButtonList() { _haveScrollButtons = false; _buttonList = &_buttonData[0]; for (int i = 0; _buttonDataListPtr[i]; ++i) _buttonList = initButton(_buttonList, _buttonDataListPtr[i]); } -Button *KyraEngine::initButton(Button *list, Button *newButton) { +Button *KyraEngine_v1::initButton(Button *list, Button *newButton) { if (!newButton) return list; if (!list) @@ -154,7 +154,7 @@ Button *KyraEngine::initButton(Button *list, Button *newButton) { return list; } -int KyraEngine::buttonInventoryCallback(Button *caller) { +int KyraEngine_v1::buttonInventoryCallback(Button *caller) { int itemOffset = caller->specialValue - 2; uint8 inventoryItem = _currentCharacter->inventoryItems[itemOffset]; if (_itemInHand == -1) { @@ -198,7 +198,7 @@ int KyraEngine::buttonInventoryCallback(Button *caller) { return 0; } -int KyraEngine::buttonAmuletCallback(Button *caller) { +int KyraEngine_v1::buttonAmuletCallback(Button *caller) { if (!(_deathHandler & 8)) return 1; int jewel = caller->specialValue - 0x14; @@ -294,7 +294,7 @@ int KyraEngine::buttonAmuletCallback(Button *caller) { return 1; } -void KyraEngine::processButtonList(Button *list) { +void KyraEngine_v1::processButtonList(Button *list) { if (_haveScrollButtons) { if (_mouseWheel < 0) gui_scrollUp(&_scrollUpButton); @@ -367,7 +367,7 @@ void KyraEngine::processButtonList(Button *list) { } } -void KyraEngine::processButton(Button *button) { +void KyraEngine_v1::processButton(Button *button) { if (!button) return; @@ -411,7 +411,7 @@ void KyraEngine::processButton(Button *button) { (this->*callback)(button); } -void KyraEngine::processAllMenuButtons() { +void KyraEngine_v1::processAllMenuButtons() { if (!_menuButtonList) return; @@ -425,7 +425,7 @@ void KyraEngine::processAllMenuButtons() { return; } -void KyraEngine::processMenuButton(Button *button) { +void KyraEngine_v1::processMenuButton(Button *button) { if (!_displayMenu) return; @@ -449,7 +449,7 @@ void KyraEngine::processMenuButton(Button *button) { processButton(button); } -int KyraEngine::drawBoxCallback(Button *button) { +int KyraEngine_v1::drawBoxCallback(Button *button) { if (!_displayMenu) return 0; @@ -460,7 +460,7 @@ int KyraEngine::drawBoxCallback(Button *button) { return 0; } -int KyraEngine::drawShadedBoxCallback(Button *button) { +int KyraEngine_v1::drawShadedBoxCallback(Button *button) { if (!_displayMenu) return 0; @@ -471,7 +471,7 @@ int KyraEngine::drawShadedBoxCallback(Button *button) { return 0; } -void KyraEngine::setGUILabels() { +void KyraEngine_v1::setGUILabels() { int offset = 0; int offsetOptions = 0; int offsetMainMenu = 0; @@ -561,7 +561,7 @@ void KyraEngine::setGUILabels() { _onCDString = _guiStrings[21]; } -int KyraEngine::buttonMenuCallback(Button *caller) { +int KyraEngine_v1::buttonMenuCallback(Button *caller) { _displayMenu = true; assert(_guiStrings); @@ -584,9 +584,9 @@ int KyraEngine::buttonMenuCallback(Button *caller) { _screen->setPaletteIndex(0xFE, 60, 60, 0); for (int i = 0; i < 6; i++) { _menuButtonData[i].process0 = _menuButtonData[i].process1 = _menuButtonData[i].process2 = 4; - _menuButtonData[i].process0PtrCallback = &KyraEngine::drawShadedBoxCallback; - _menuButtonData[i].process1PtrCallback = &KyraEngine::drawBoxCallback; - _menuButtonData[i].process2PtrCallback = &KyraEngine::drawShadedBoxCallback; + _menuButtonData[i].process0PtrCallback = &KyraEngine_v1::drawShadedBoxCallback; + _menuButtonData[i].process1PtrCallback = &KyraEngine_v1::drawBoxCallback; + _menuButtonData[i].process2PtrCallback = &KyraEngine_v1::drawShadedBoxCallback; } _screen->savePageToDisk("SEENPAGE.TMP", 0); @@ -627,7 +627,7 @@ int KyraEngine::buttonMenuCallback(Button *caller) { return 0; } -void KyraEngine::initMenu(Menu &menu) { +void KyraEngine_v1::initMenu(Menu &menu) { _menuButtonList = 0; _screen->hideMouse(); @@ -707,14 +707,14 @@ void KyraEngine::initMenu(Menu &menu) { _scrollUpButton.x = menu.scrollUpBtnX + menu.x; _scrollUpButton.y = menu.scrollUpBtnY + menu.y; - _scrollUpButton.buttonCallback = &KyraEngine::gui_scrollUp; + _scrollUpButton.buttonCallback = &KyraEngine_v1::gui_scrollUp; _scrollUpButton.nextButton = 0; _menuButtonList = initButton(_menuButtonList, &_scrollUpButton); processMenuButton(&_scrollUpButton); _scrollDownButton.x = menu.scrollDownBtnX + menu.x; _scrollDownButton.y = menu.scrollDownBtnY + menu.y; - _scrollDownButton.buttonCallback = &KyraEngine::gui_scrollDown; + _scrollDownButton.buttonCallback = &KyraEngine_v1::gui_scrollDown; _scrollDownButton.nextButton = 0; _menuButtonList = initButton(_menuButtonList, &_scrollDownButton); processMenuButton(&_scrollDownButton); @@ -726,7 +726,7 @@ void KyraEngine::initMenu(Menu &menu) { _screen->updateScreen(); } -void KyraEngine::calcCoords(Menu &menu) { +void KyraEngine_v1::calcCoords(Menu &menu) { assert(menu.nrOfItems < 7); int widthBackup = _screen->_charWidth; @@ -798,7 +798,7 @@ void KyraEngine::calcCoords(Menu &menu) { _screen->_charWidth = widthBackup; } -void KyraEngine::gui_getInput() { +void KyraEngine_v1::gui_getInput() { Common::Event event; static uint32 lastScreenUpdate = 0; uint32 now = _system->getMillis(); @@ -841,22 +841,22 @@ void KyraEngine::gui_getInput() { _system->delayMillis(3); } -int KyraEngine::gui_resumeGame(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_resumeGame()"); +int KyraEngine_v1::gui_resumeGame(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_resumeGame()"); processMenuButton(button); _displayMenu = false; return 0; } -const char *KyraEngine::getSavegameFilename(int num) { +const char *KyraEngine_v1::getSavegameFilename(int num) { static char saveLoadSlot[12]; sprintf(saveLoadSlot, "%s.%.3d", _targetName.c_str(), num); return saveLoadSlot; } -int KyraEngine::getNextSavegameSlot() { +int KyraEngine_v1::getNextSavegameSlot() { Common::InSaveFile *in; for (int i = 1; i < 1000; i++) { @@ -869,7 +869,7 @@ int KyraEngine::getNextSavegameSlot() { return 0; } -void KyraEngine::setupSavegames(Menu &menu, int num) { +void KyraEngine_v1::setupSavegames(Menu &menu, int num) { Common::InSaveFile *in; static char savenames[5][31]; uint8 startSlot; @@ -900,8 +900,8 @@ void KyraEngine::setupSavegames(Menu &menu, int num) { } } -int KyraEngine::gui_saveGameMenu(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_saveGameMenu()"); +int KyraEngine_v1::gui_saveGameMenu(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_saveGameMenu()"); processMenuButton(button); _menu[2].item[5].enabled = true; @@ -911,7 +911,7 @@ int KyraEngine::gui_saveGameMenu(Button *button) { _menu[2].menuName = _guiStrings[8]; // Select a position to save to: _specialSavegameString = _guiStrings[9]; // [ EMPTY SLOT ] for (int i = 0; i < 5; i++) - _menu[2].item[i].callback = &KyraEngine::gui_saveGame; + _menu[2].item[i].callback = &KyraEngine_v1::gui_saveGame; _savegameOffset = 0; setupSavegames(_menu[2], 5); @@ -940,8 +940,8 @@ int KyraEngine::gui_saveGameMenu(Button *button) { return 0; } -int KyraEngine::gui_loadGameMenu(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_loadGameMenu()"); +int KyraEngine_v1::gui_loadGameMenu(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_loadGameMenu()"); if (_menuDirectlyToLoad) { _menu[2].item[5].enabled = false; } else { @@ -955,7 +955,7 @@ int KyraEngine::gui_loadGameMenu(Button *button) { _specialSavegameString = _newGameString[0]; //[ START A NEW GAME ] _menu[2].menuName = _guiStrings[7]; // Which game would you like to reload? for (int i = 0; i < 5; i++) - _menu[2].item[i].callback = &KyraEngine::gui_loadGame; + _menu[2].item[i].callback = &KyraEngine_v1::gui_loadGame; _savegameOffset = 0; setupSavegames(_menu[2], 5); @@ -987,7 +987,7 @@ int KyraEngine::gui_loadGameMenu(Button *button) { return 0; } -void KyraEngine::gui_redrawTextfield() { +void KyraEngine_v1::gui_redrawTextfield() { _screen->fillRect(38, 91, 287, 102, 250); _text->printText(_savegameName, 38, 92, 253, 0, 0); @@ -999,7 +999,7 @@ void KyraEngine::gui_redrawTextfield() { _screen->updateScreen(); } -void KyraEngine::gui_updateSavegameString() { +void KyraEngine_v1::gui_updateSavegameString() { int length; if (_keyPressed.keycode) { @@ -1026,8 +1026,8 @@ void KyraEngine::gui_updateSavegameString() { _keyPressed.reset(); } -int KyraEngine::gui_saveGame(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_saveGame()"); +int KyraEngine_v1::gui_saveGame(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_saveGame()"); processMenuButton(button); _gameToLoad = button->specialValue; @@ -1074,16 +1074,16 @@ int KyraEngine::gui_saveGame(Button *button) { return 0; } -int KyraEngine::gui_savegameConfirm(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_savegameConfirm()"); +int KyraEngine_v1::gui_savegameConfirm(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_savegameConfirm()"); processMenuButton(button); _displaySubMenu = false; return 0; } -int KyraEngine::gui_loadGame(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_loadGame()"); +int KyraEngine_v1::gui_loadGame(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_loadGame()"); processMenuButton(button); _displaySubMenu = false; _gameToLoad = button->specialValue; @@ -1091,8 +1091,8 @@ int KyraEngine::gui_loadGame(Button *button) { return 0; } -int KyraEngine::gui_cancelSubMenu(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_cancelLoadGameMenu()"); +int KyraEngine_v1::gui_cancelSubMenu(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_cancelLoadGameMenu()"); processMenuButton(button); _displaySubMenu = false; _cancelSubMenu = true; @@ -1100,8 +1100,8 @@ int KyraEngine::gui_cancelSubMenu(Button *button) { return 0; } -int KyraEngine::gui_quitPlaying(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_quitPlaying()"); +int KyraEngine_v1::gui_quitPlaying(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_quitPlaying()"); processMenuButton(button); if (gui_quitConfirm(_guiStrings[14])) { // Are you sure you want to quit playing? @@ -1114,8 +1114,8 @@ int KyraEngine::gui_quitPlaying(Button *button) { return 0; } -bool KyraEngine::gui_quitConfirm(const char *str) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_quitConfirm()"); +bool KyraEngine_v1::gui_quitConfirm(const char *str) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_quitConfirm()"); _screen->loadPageFromDisk("SEENPAGE.TMP", 0); _screen->savePageToDisk("SEENPAGE.TMP", 0); @@ -1139,8 +1139,8 @@ bool KyraEngine::gui_quitConfirm(const char *str) { return !_cancelSubMenu; } -int KyraEngine::gui_quitConfirmYes(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_quitConfirmYes()"); +int KyraEngine_v1::gui_quitConfirmYes(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_quitConfirmYes()"); processMenuButton(button); _displaySubMenu = false; _cancelSubMenu = false; @@ -1148,8 +1148,8 @@ int KyraEngine::gui_quitConfirmYes(Button *button) { return 0; } -int KyraEngine::gui_quitConfirmNo(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_quitConfirmNo()"); +int KyraEngine_v1::gui_quitConfirmNo(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_quitConfirmNo()"); processMenuButton(button); _displaySubMenu = false; _cancelSubMenu = true; @@ -1157,8 +1157,8 @@ int KyraEngine::gui_quitConfirmNo(Button *button) { return 0; } -int KyraEngine::gui_gameControlsMenu(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_gameControlsMenu()"); +int KyraEngine_v1::gui_gameControlsMenu(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_gameControlsMenu()"); readSettings(); @@ -1175,14 +1175,14 @@ int KyraEngine::gui_gameControlsMenu(Button *button) { } _menu[5].item[3].labelString = _voiceTextString; //"Voice / Text " - _menu[5].item[3].callback = &KyraEngine::gui_controlsChangeVoice; + _menu[5].item[3].callback = &KyraEngine_v1::gui_controlsChangeVoice; } else { //_menu[5].height = 136; //_menu[5].item[5].y = 110; _menu[5].item[4].enabled = 0; _menu[5].item[3].labelString = _textSpeedString; // "Text speed " - _menu[5].item[3].callback = &KyraEngine::gui_controlsChangeText; + _menu[5].item[3].callback = &KyraEngine_v1::gui_controlsChangeText; } gui_setupControls(_menu[5]); @@ -1208,8 +1208,8 @@ int KyraEngine::gui_gameControlsMenu(Button *button) { return 0; } -void KyraEngine::gui_setupControls(Menu &menu) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_setupControls()"); +void KyraEngine_v1::gui_setupControls(Menu &menu) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_setupControls()"); switch (_configMusic) { case 0: @@ -1299,8 +1299,8 @@ void KyraEngine::gui_setupControls(Menu &menu) { initMenu(menu); } -int KyraEngine::gui_controlsChangeMusic(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_controlsChangeMusic()"); +int KyraEngine_v1::gui_controlsChangeMusic(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_controlsChangeMusic()"); processMenuButton(button); _configMusic = ++_configMusic % (_flags.platform == Common::kPlatformFMTowns ? 3 : 2); @@ -1308,8 +1308,8 @@ int KyraEngine::gui_controlsChangeMusic(Button *button) { return 0; } -int KyraEngine::gui_controlsChangeSounds(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_controlsChangeSounds()"); +int KyraEngine_v1::gui_controlsChangeSounds(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_controlsChangeSounds()"); processMenuButton(button); _configSounds = !_configSounds; @@ -1317,8 +1317,8 @@ int KyraEngine::gui_controlsChangeSounds(Button *button) { return 0; } -int KyraEngine::gui_controlsChangeWalk(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_controlsChangeWalk()"); +int KyraEngine_v1::gui_controlsChangeWalk(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_controlsChangeWalk()"); processMenuButton(button); _configWalkspeed = ++_configWalkspeed % 5; @@ -1327,8 +1327,8 @@ int KyraEngine::gui_controlsChangeWalk(Button *button) { return 0; } -int KyraEngine::gui_controlsChangeText(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_controlsChangeText()"); +int KyraEngine_v1::gui_controlsChangeText(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_controlsChangeText()"); processMenuButton(button); _configTextspeed = ++_configTextspeed % 4; @@ -1336,8 +1336,8 @@ int KyraEngine::gui_controlsChangeText(Button *button) { return 0; } -int KyraEngine::gui_controlsChangeVoice(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_controlsChangeVoice()"); +int KyraEngine_v1::gui_controlsChangeVoice(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_controlsChangeVoice()"); processMenuButton(button); _configVoice = ++_configVoice % 3; @@ -1345,14 +1345,14 @@ int KyraEngine::gui_controlsChangeVoice(Button *button) { return 0; } -int KyraEngine::gui_controlsApply(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_controlsApply()"); +int KyraEngine_v1::gui_controlsApply(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_controlsApply()"); writeSettings(); return gui_cancelSubMenu(button); } -int KyraEngine::gui_scrollUp(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_scrollUp()"); +int KyraEngine_v1::gui_scrollUp(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_scrollUp()"); processMenuButton(button); if (_savegameOffset > 0) { @@ -1363,8 +1363,8 @@ int KyraEngine::gui_scrollUp(Button *button) { return 0; } -int KyraEngine::gui_scrollDown(Button *button) { - debugC(9, kDebugLevelGUI, "KyraEngine::gui_scrollDown()"); +int KyraEngine_v1::gui_scrollDown(Button *button) { + debugC(9, kDebugLevelGUI, "KyraEngine_v1::gui_scrollDown()"); processMenuButton(button); _savegameOffset++; @@ -1374,7 +1374,7 @@ int KyraEngine::gui_scrollDown(Button *button) { return 0; } -void KyraEngine::gui_processHighlights(Menu &menu) { +void KyraEngine_v1::gui_processHighlights(Menu &menu) { int x1, y1, x2, y2; Common::Point mouse = getMousePos(); @@ -1403,7 +1403,7 @@ void KyraEngine::gui_processHighlights(Menu &menu) { } } -void KyraEngine::gui_redrawText(Menu menu) { +void KyraEngine_v1::gui_redrawText(Menu menu) { int textX; int i = menu.highlightedItem; @@ -1422,7 +1422,7 @@ void KyraEngine::gui_redrawText(Menu menu) { _text->printText(menu.item[i].itemString, textX, textY, menu.item[i].textColor, 0, 0); } -void KyraEngine::gui_redrawHighlight(Menu menu) { +void KyraEngine_v1::gui_redrawHighlight(Menu menu) { int textX; int i = menu.highlightedItem; @@ -1441,7 +1441,7 @@ void KyraEngine::gui_redrawHighlight(Menu menu) { _text->printText(menu.item[i].itemString, textX, textY, menu.item[i].highlightColor, 0, 0); } -void KyraEngine::gui_fadePalette() { +void KyraEngine_v1::gui_fadePalette() { if (_flags.platform == Common::kPlatformAmiga) return; @@ -1461,7 +1461,7 @@ void KyraEngine::gui_fadePalette() { _screen->fadePalette(_screen->_currentPalette, 2); } -void KyraEngine::gui_restorePalette() { +void KyraEngine_v1::gui_restorePalette() { if (_flags.platform == Common::kPlatformAmiga) return; @@ -1469,172 +1469,5 @@ void KyraEngine::gui_restorePalette() { _screen->fadePalette(_screen->_currentPalette, 2); } -#pragma mark - - -// Kyra 2 and 3 main menu - -void KyraEngine::gui_updateMainMenuAnimation() { - _screen->updateScreen(); -} - -bool KyraEngine::gui_mainMenuGetInput() { - Common::Event event; - - while (_eventMan->pollEvent(event)) { - switch (event.type) { - case Common::EVENT_QUIT: - quitGame(); - break; - case Common::EVENT_LBUTTONUP: - return true; - default: - break; - } - } - return false; -} - -int KyraEngine::gui_handleMainMenu() { - debugC(9, kDebugLevelMain, "KyraEngine::gui_handleMainMenu()"); - int command = -1; - - uint8 colorMap[16]; - memset(colorMap, 0, sizeof(colorMap)); - _screen->setTextColorMap(colorMap); - - const char * const *strings = &_mainMenuStrings[_lang << 2]; - Screen::FontId oldFont = _screen->setFont(Screen::FID_8_FNT); - int charWidthBackUp = _screen->_charWidth; - - _screen->_charWidth = -2; - _screen->setScreenDim(3); - int backUpX = _screen->_curDim->sx; - int backUpY = _screen->_curDim->sy; - int backUpWidth = _screen->_curDim->w; - int backUpHeight = _screen->_curDim->h; - _screen->copyRegion(backUpX, backUpY, backUpX, backUpY, backUpWidth, backUpHeight, 0, 3); - - int x = _screen->_curDim->sx << 3; - int y = _screen->_curDim->sy; - int width = _screen->_curDim->w << 3; - int height = _screen->_curDim->h; - - gui_drawMainBox(x, y, width, height, 1); - gui_drawMainBox(x + 1, y + 1, width - 2, height - 2, 0); - - int selected = 0; - - gui_drawMainMenu(strings, selected); - - _screen->showMouse(); - - int fh = _screen->getFontHeight(); - int textPos = ((_screen->_curDim->w >> 1) + _screen->_curDim->sx) << 3; - - Common::Rect menuRect(x + 16, y + 4, x + width - 16, y + 4 + fh * 4); - - while (!_quitFlag) { - gui_updateMainMenuAnimation(); - bool mousePressed = gui_mainMenuGetInput(); - - Common::Point mouse = getMousePos(); - if (menuRect.contains(mouse)) { - int item = (mouse.y - menuRect.top) / fh; - - if (item != selected) { - gui_printString(strings[selected], textPos, menuRect.top + selected * fh, 0x80, 0, 5); - gui_printString(strings[item], textPos, menuRect.top + item * fh, 0xFF, 0, 5); - - selected = item; - } - - if (mousePressed) { - // TODO: Flash the text - command = item; - break; - } - } - _system->delayMillis(10); - } - - if (_quitFlag) - command = -1; - - _screen->copyRegion(backUpX, backUpY, backUpX, backUpY, backUpWidth, backUpHeight, 3, 0); - _screen->_charWidth = charWidthBackUp; - _screen->setFont(oldFont); - - return command; -} - -void KyraEngine::gui_drawMainMenu(const char * const *strings, int select) { - debugC(9, kDebugLevelMain, "KyraEngine::gui_drawMainMenu(%p)", (const void*)strings); - static const uint16 menuTable[] = { 0x01, 0x04, 0x0C, 0x04, 0x00, 0x80, 0xFF, 0x00, 0x01, 0x02, 0x03 }; - - int top = _screen->_curDim->sy; - top += menuTable[1]; - - for (int i = 0; i < menuTable[3]; ++i) { - int curY = top + i * _screen->getFontHeight(); - int color = (i == select) ? menuTable[6] : menuTable[5]; - gui_printString(strings[i], ((_screen->_curDim->w >> 1) + _screen->_curDim->sx) << 3, curY, color, 0, 5); - } -} - -void KyraEngine::gui_drawMainBox(int x, int y, int w, int h, int fill) { - debugC(9, kDebugLevelMain, "KyraEngine::gui_drawMainBox(%d, %d, %d, %d, %d)", x, y, w, h, fill); - static const uint8 kyra3ColorTable[] = { 0x16, 0x19, 0x1A, 0x16 }; - static const uint8 kyra2ColorTable[] = { 0x0, 0x19, 0x28, 0xc8 }; - - const uint8 *colorTable; - if (_flags.gameID == GI_KYRA3) - colorTable = kyra3ColorTable; - else - colorTable = kyra2ColorTable; - - --w; --h; - - if (fill) - _screen->fillRect(x, y, x+w, y+h, colorTable[0]); - - _screen->drawClippedLine(x, y+h, x+w, y+h, colorTable[1]); - _screen->drawClippedLine(x+w, y, x+w, y+h, colorTable[1]); - _screen->drawClippedLine(x, y, x+w, y, colorTable[2]); - _screen->drawClippedLine(x, y, x, y+h, colorTable[2]); - - _screen->setPagePixel(_screen->_curPage, x, y+h, colorTable[3]); - _screen->setPagePixel(_screen->_curPage, x+w, y, colorTable[3]); -} - -void KyraEngine::gui_printString(const char *format, int x, int y, int col1, int col2, int flags, ...) { - debugC(9, kDebugLevelMain, "KyraEngine::gui_printString('%s', %d, %d, %d, %d, %d, ...)", format, x, y, col1, col2, flags); - if (!format) - return; - - char string[512]; - va_list vaList; - va_start(vaList, flags); - vsprintf(string, format, vaList); - va_end(vaList); - - if (flags & 1) - x -= _screen->getTextWidth(string) >> 1; - - if (flags & 2) - x -= _screen->getTextWidth(string); - - if (flags & 4) { - _screen->printText(string, x - 1, y, 240, col2); - _screen->printText(string, x, y + 1, 240, col2); - } - - if (flags & 8) { - _screen->printText(string, x - 1, y, 227, col2); - _screen->printText(string, x, y + 1, 227, col2); - } - - _screen->printText(string, x, y, col1, col2); -} - } // end of namespace Kyra -- cgit v1.2.3