MADS: Main menu selections now working

This commit is contained in:
Paul Gilbert 2014-07-27 11:10:59 -04:00
parent 9b00eedd40
commit 913751edae
5 changed files with 113 additions and 53 deletions

View File

@ -202,7 +202,8 @@ public:
enum DialogId {
DIALOG_NONE = 0, DIALOG_GAME_MENU = 1, DIALOG_SAVE = 2, DIALOG_RESTORE = 3,
DIALOG_OPTIONS = 4, DIALOG_DIFFICULTY = 5, DIALOG_ERROR = 6,
DIALOG_MAIN_MENU = 7
DIALOG_MAIN_MENU = 7, DIALOG_TEXTVIEW = 8, DIALOG_ANIMVIEW = 9,
DIALOG_ADVERT = 10
};
class Dialogs {

View File

@ -270,41 +270,46 @@ bool DialogsNebular::commandCheck(const char *idStr, Common::String &valStr,
}
void DialogsNebular::showDialog() {
switch (_pendingDialog) {
case DIALOG_MAIN_MENU: {
MainMenu *menu = new MainMenu(_vm);
menu->show();
delete menu;
break;
}
case DIALOG_DIFFICULTY: {
DifficultyDialog *dlg = new DifficultyDialog(_vm);
dlg->show();
delete dlg;
break;
}
case DIALOG_GAME_MENU: {
GameMenuDialog *dlg = new GameMenuDialog(_vm);
dlg->show();
delete dlg;
break;
}
case DIALOG_SAVE: {
showScummVMSaveDialog();
break;
}
case DIALOG_RESTORE: {
showScummVMRestoreDialog();
break;
}
case DIALOG_OPTIONS: {
OptionsDialog *dlg = new OptionsDialog(_vm);
dlg->show();
delete dlg;
break;
}
default:
break;
while (_pendingDialog != DIALOG_NONE) {
DialogId dialogId = _pendingDialog;
_pendingDialog = DIALOG_NONE;
switch (dialogId) {
case DIALOG_MAIN_MENU: {
MainMenu *menu = new MainMenu(_vm);
menu->show();
delete menu;
break;
}
case DIALOG_DIFFICULTY: {
DifficultyDialog *dlg = new DifficultyDialog(_vm);
dlg->show();
delete dlg;
break;
}
case DIALOG_GAME_MENU: {
GameMenuDialog *dlg = new GameMenuDialog(_vm);
dlg->show();
delete dlg;
break;
}
case DIALOG_SAVE: {
showScummVMSaveDialog();
break;
}
case DIALOG_RESTORE: {
showScummVMRestoreDialog();
break;
}
case DIALOG_OPTIONS: {
OptionsDialog *dlg = new OptionsDialog(_vm);
dlg->show();
delete dlg;
break;
}
default:
break;
}
}
}

View File

@ -60,9 +60,7 @@ ProtectionResult GameNebular::checkCopyProtection() {
}
void GameNebular::startGame() {
// Show the main menu
// TODO: Show the main menu here
/*
// Check copy protection
ProtectionResult protectionResult = checkCopyProtection();
switch (protectionResult) {
@ -80,11 +78,13 @@ void GameNebular::startGame() {
// Copy protection check succeeded
break;
}
*/
initSection(_sectionNumber);
_statusFlag = true;
_vm->_dialogs->_pendingDialog = DIALOG_DIFFICULTY;
// Show the main menu
_vm->_dialogs->_pendingDialog = DIALOG_MAIN_MENU;
_vm->_dialogs->showDialog();
_vm->_dialogs->_pendingDialog = DIALOG_NONE;

View File

@ -319,34 +319,36 @@ void MainMenu::unhighlightItem() {
}
void MainMenu::handleAction(MADSGameAction action) {
warning("Action %d", (int)action);
/*
_vm->_events->hideCursor();
_breakFlag = true;
switch (action) {
case START_GAME:
// Show the difficulty dialog
_vm->_dialogs->_pendingDialog = DIALOG_DIFFICULTY;
break;
case RESUME_GAME:
// Load a sample starting scene - note that, currently, calling loadScene automatically
// removes this menu screen from being displayed
_vm->_mouse->cursorOn();
_vm->_viewManager->addView(_vm->_scene);
_vm->_scene->loadScene(101);
// The original resumed the most recently saved game. Instead,
// just show the load game scren
_vm->_dialogs->_pendingDialog = DIALOG_RESTORE;
return;
case SHOW_INTRO:
_vm->_viewManager->showAnimView("@rexopen");
AnimationView::execute("@rexopen");
break;
case CREDITS:
_vm->_viewManager->showTextView("credits");
TextView::execute("credits");
return;
case QUOTES:
_vm->_viewManager->showTextView("quotes");
TextView::execute("quotes");
return;
case EXIT:
{
_vm->_dialogs->_pendingDialog = DIALOG_ADVERT;
/*
// When the Exit action is done from the menu, show one of two possible advertisements
// Activate the scene display with the specified scene
@ -359,14 +361,32 @@ void MainMenu::handleAction(MADSGameAction action) {
_vm->_events->quitFlag = true;
return;
}
*/
break;
default:
break;
}
*/
}
/*------------------------------------------------------------------------*/
char TextView::_resourceName[100];
void TextView::execute(const Common::String &resName) {
assert(resName.size() < 100);
strcpy(_resourceName, resName.c_str());
}
/*------------------------------------------------------------------------*/
char AnimationView::_resourceName[100];
void AnimationView::execute(const Common::String &resName) {
assert(resName.size() < 100);
strcpy(_resourceName, resName.c_str());
}
} // End of namespace Nebular
} // End of namespace MADS

View File

@ -116,6 +116,40 @@ public:
virtual ~MainMenu();
};
/**
* Scrolling text view
*/
class TextView : public MenuView {
private:
static char _resourceName[100];
public:
/**
* Queue the given text resource for display
*/
static void execute(const Common::String &resName);
TextView(MADSEngine *vm) : MenuView(vm) {}
virtual ~TextView() {}
};
/**
* Animation cutscene view
*/
class AnimationView : public MenuView {
private:
static char _resourceName[100];
public:
/**
* Queue the given text resource for display
*/
static void execute(const Common::String &resName);
AnimationView(MADSEngine *vm) : MenuView(vm) {}
virtual ~AnimationView() {}
};
} // End of namespace Nebular
} // End of namespace MADS