diff options
Diffstat (limited to 'engines/bbvs/dialogs.cpp')
-rw-r--r-- | engines/bbvs/dialogs.cpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/engines/bbvs/dialogs.cpp b/engines/bbvs/dialogs.cpp new file mode 100644 index 0000000000..5247a58ec8 --- /dev/null +++ b/engines/bbvs/dialogs.cpp @@ -0,0 +1,182 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "bbvs/dialogs.h" +#include "common/events.h" +#include "gui/gui-manager.h" +#include "gui/ThemeEval.h" + +namespace Bbvs { + +struct MenuButton { + const char *label; + uint32 cmd; +}; + +static const MenuButton kMenuButtons[] = { + // Main menu + {"New Game", kCmdNewGame}, + {"Continue", kCmdContinue}, + {"Options", kCmdOptions}, + {"Mini Games", kCmdMiniGames}, + {"Quit", kCmdQuit}, + // Options + {"Uninstall", kCmdUninstall}, + {"Credits", kCmdCredits}, + {"Opening", kCmdOpening}, + {"Chicks 'n' Stuff", kCmdChicksNStuff}, + {"Back ..", kCmdBack}, + // Minigames + {"Hock-A-Loogie", kCmdHockALoogie}, + {"Bug Justice", kCmdBugJustice}, + {"Court Chaos", kCmdCourtChaos}, + {"Air Guitar", kCmdAirGuitar}, + {"Back ..", kCmdBack} +}; + +MainMenu::MainMenu(BbvsEngine *vm) : Dialog(0, 0, 1, 1), _vm(vm) { + init(); +} + +MainMenu::~MainMenu() { +} + +void MainMenu::init() { + _buttons[0] = new GUI::ButtonWidget(this, 0, 0, 1, 1, "", 0, 0); + _buttons[1] = new GUI::ButtonWidget(this, 0, 0, 1, 1, "", 0, 0); + _buttons[2] = new GUI::ButtonWidget(this, 0, 0, 1, 1, "", 0, 0); + _buttons[3] = new GUI::ButtonWidget(this, 0, 0, 1, 1, "", 0, 0); + _buttons[4] = new GUI::ButtonWidget(this, 0, 0, 1, 1, "", 0, 0); + gotoMenuScreen(kMainMenuScr); +} + +void MainMenu::reflowLayout() { + const int screenW = g_system->getOverlayWidth(); + const int screenH = g_system->getOverlayHeight(); + + const int buttonWidth = screenW * 70 / 320; + const int buttonHeight = screenH * 14 / 240; + const int buttonPadding = screenW * 3 / 320; + + _w = 2 * buttonWidth + buttonPadding; + _h = 3 * buttonHeight + 3 * buttonPadding; + _x = (screenW - _w) / 2; + _y = screenH - _h; + + int x = 0, y = 0; + + x = 0; + y = 0; + _buttons[0]->resize(x, y, buttonWidth, buttonHeight); + x += buttonWidth + buttonPadding; + _buttons[1]->resize(x, y, buttonWidth, buttonHeight); + + x = 0; + y += buttonHeight + buttonPadding; + _buttons[2]->resize(x, y, buttonWidth, buttonHeight); + x += buttonWidth + buttonPadding; + _buttons[3]->resize(x, y, buttonWidth, buttonHeight); + + x = (_w - buttonWidth) / 2; // Center the last button + y += buttonHeight + buttonPadding; + _buttons[4]->resize(x, y, buttonWidth, buttonHeight); + + GUI::Dialog::reflowLayout(); + +} + +void MainMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32 data) { + switch (command) { + // Main menu + case kCmdNewGame: + close(); + _vm->newGame(); + break; + case kCmdContinue: + close(); + _vm->continueGameFromQuickSave(); + break; + case kCmdOptions: + gotoMenuScreen(kOptionsMenuScr); + break; + case kCmdMiniGames: + gotoMenuScreen(kMiniGamesMenuScr); + break; + case kCmdQuit: + close(); + _vm->quitGame(); + break; + // Options menu + case kCmdUninstall: + break; + case kCmdCredits: + gotoScene(45); + break; + case kCmdOpening: + gotoScene(43); + break; + case kCmdChicksNStuff: + gotoScene(41); + break; + // Minigames menu + case kCmdHockALoogie: + gotoScene(27); + break; + case kCmdBugJustice: + gotoScene(29); + break; + case kCmdCourtChaos: + gotoScene(28); + break; + case kCmdAirGuitar: + gotoScene(30); + break; + case kCmdBack: + gotoMenuScreen(kMainMenuScr); + break; + default: + Dialog::handleCommand(sender, command, data); + } +} + +void MainMenu::gotoMenuScreen(int screen) { + for (int i = 0; i < 5; ++i) { + const MenuButton *btn = &kMenuButtons[screen * 5 + i]; + _buttons[i]->setLabel(btn->label); + _buttons[i]->setCmd(btn->cmd); + _buttons[i]->setEnabled(btn->cmd != 0); + } + // Enable the "Continue" button if a savegame at slot 0 exists + if (screen == kMainMenuScr) + _buttons[1]->setEnabled(canContinue()); +} + +bool MainMenu::canContinue() { + return _vm->existsSavegame(0); +} + +void MainMenu::gotoScene(int sceneNum) { + close(); + _vm->setNewSceneNum(sceneNum); +} + +} // End of namespace Hugo |