aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorAlyssa Milburn2010-12-04 23:47:43 +0000
committerAlyssa Milburn2010-12-04 23:47:43 +0000
commit8ed8adeebaaadfe0d49edd73c19b63d2e3bad89b (patch)
tree37bd2d3ee61e824d0f21f19ff3613702016c7f4f /engines
parent52217fa434ba50751a139b97f634d255a50c6e97 (diff)
downloadscummvm-rg350-8ed8adeebaaadfe0d49edd73c19b63d2e3bad89b.tar.gz
scummvm-rg350-8ed8adeebaaadfe0d49edd73c19b63d2e3bad89b.tar.bz2
scummvm-rg350-8ed8adeebaaadfe0d49edd73c19b63d2e3bad89b.zip
MOHAWK: tidy up LB hardcoded UI click functions, add poetry mode support
svn-id: r54768
Diffstat (limited to 'engines')
-rw-r--r--engines/mohawk/livingbooks.cpp446
-rw-r--r--engines/mohawk/livingbooks.h5
2 files changed, 265 insertions, 186 deletions
diff --git a/engines/mohawk/livingbooks.cpp b/engines/mohawk/livingbooks.cpp
index d081343ad3..5318d8c08e 100644
--- a/engines/mohawk/livingbooks.cpp
+++ b/engines/mohawk/livingbooks.cpp
@@ -683,6 +683,260 @@ void MohawkEngine_LivingBooks::nextPage() {
error("Could not find page after %d.%d for mode %d", _curPage, _curSubPage, (int)_curMode);
}
+void MohawkEngine_LivingBooks::handleUIMenuClick(uint controlId) {
+ LBItem *item;
+
+ switch (controlId) {
+ case 1:
+ if (getFeatures() & GF_LB_10) {
+ loadPage(kLBControlMode, 2, 0);
+ } else {
+ loadPage(kLBControlMode, 3, 0);
+ }
+ break;
+
+ case 2:
+ item = getItemById(10);
+ if (item)
+ item->destroySelf();
+ item = getItemById(11);
+ if (item)
+ item->destroySelf();
+ item = getItemById(199 + _curLanguage);
+ if (item) {
+ item->setVisible(true);
+ item->togglePlaying(true);
+ }
+ break;
+
+ case 3:
+ item = getItemById(10);
+ if (item)
+ item->destroySelf();
+ item = getItemById(11);
+ if (item)
+ item->destroySelf();
+ item = getItemById(12);
+ if (item) {
+ item->setVisible(true);
+ item->togglePlaying(true);
+ }
+ break;
+
+ case 4:
+ if (getFeatures() & GF_LB_10) {
+ loadPage(kLBControlMode, 3, 0);
+ } else {
+ loadPage(kLBControlMode, 2, 0);
+ }
+ break;
+
+ case 10:
+ item = getItemById(10);
+ if (item)
+ item->destroySelf();
+ item = getItemById(11);
+ if (item)
+ item->setVisible(true);
+ if (item)
+ item->togglePlaying(false);
+ break;
+
+ case 11:
+ item = getItemById(11);
+ if (item)
+ item->togglePlaying(true);
+ break;
+
+ case 12:
+ // start game, in play mode
+ loadPage(kLBPlayMode, 1, 0);
+ break;
+
+ default:
+ if (controlId >= 100 && controlId < 100 + (uint)_numLanguages) {
+ uint newLanguage = controlId - 99;
+ if (newLanguage == _curLanguage)
+ break;
+ item = getItemById(99 + _curLanguage);
+ if (item)
+ item->seek(1);
+ _curLanguage = newLanguage;
+ } else if (controlId >= 200 && controlId < 200 + (uint)_numLanguages) {
+ // start game, in read mode
+ loadPage(kLBReadMode, 1, 0);
+ }
+ break;
+ }
+}
+
+void MohawkEngine_LivingBooks::handleUIPoetryMenuClick(uint controlId) {
+ LBItem *item;
+
+ // the menu UI in New Kid on the Block is a hybrid of the normal menu
+ // and the normal options screen
+
+ // TODO: this is mostly untested
+
+ switch (controlId) {
+ case 2:
+ case 3:
+ handleUIOptionsClick(controlId);
+ break;
+
+ case 4:
+ handleUIMenuClick(controlId);
+ break;
+
+ case 6:
+ handleUIMenuClick(2);
+ break;
+
+ case 7:
+ case 0xA:
+ item = getItemById(10);
+ if (item)
+ item->destroySelf();
+ item = getItemById(11);
+ if (item)
+ item->destroySelf();
+ item = getItemById(12);
+ if (item) {
+ item->setVisible(true);
+ item->togglePlaying(controlId == 7);
+ }
+ break;
+
+ case 0xB:
+ item = getItemById(12);
+ if (item)
+ item->togglePlaying(true);
+ break;
+
+ case 0xC:
+ if (!tryLoadPageStart(kLBPlayMode, _curSelectedPage))
+ error("failed to load page %d", _curSelectedPage);
+ break;
+
+ default:
+ if (controlId < 100) {
+ handleUIMenuClick(controlId);
+ } else {
+ if (!tryLoadPageStart(kLBReadMode, _curSelectedPage))
+ error("failed to load page %d", _curSelectedPage);
+ }
+ }
+}
+
+void MohawkEngine_LivingBooks::handleUIQuitClick(uint controlId) {
+ LBItem *item;
+
+ switch (controlId) {
+ case 1:
+ case 2:
+ // button clicked, run animation
+ item = getItemById(10);
+ if (item)
+ item->destroySelf();
+ item = getItemById(11);
+ if (item)
+ item->destroySelf();
+ item = getItemById((controlId == 1) ? 12 : 13);
+ if (item) {
+ item->setVisible(true);
+ item->togglePlaying(false);
+ }
+ break;
+
+ case 10:
+ case 11:
+ item = getItemById(11);
+ if (item)
+ item->togglePlaying(true);
+ break;
+
+ case 12:
+ // 'yes', I want to quit
+ quitGame();
+ break;
+
+ case 13:
+ // 'no', go back to menu
+ loadPage(kLBControlMode, 1, 0);
+ break;
+ }
+}
+
+void MohawkEngine_LivingBooks::handleUIOptionsClick(uint controlId) {
+ LBItem *item;
+
+ switch (controlId) {
+ case 1:
+ item = getItemById(10);
+ if (item)
+ item->destroySelf();
+ item = getItemById(202);
+ if (item) {
+ item->setVisible(true);
+ item->togglePlaying(true);
+ }
+ break;
+
+ case 2:
+ // back
+ item = getItemById(2);
+ if (item)
+ item->seek(1);
+ if (_curSelectedPage == 1) {
+ _curSelectedPage = _numPages;
+ } else {
+ _curSelectedPage--;
+ }
+ for (uint i = 0; i < _numPages; i++) {
+ item = getItemById(1000 + i);
+ if (item)
+ item->setVisible(_curSelectedPage == i + 1);
+ item = getItemById(1100 + i);
+ if (item)
+ item->setVisible(_curSelectedPage == i + 1);
+ }
+ break;
+
+ case 3:
+ // forward
+ item = getItemById(3);
+ if (item)
+ item->seek(1);
+ if (_curSelectedPage == _numPages) {
+ _curSelectedPage = 1;
+ } else {
+ _curSelectedPage++;
+ }
+ for (uint i = 0; i < _numPages; i++) {
+ item = getItemById(1000 + i);
+ if (item)
+ item->setVisible(_curSelectedPage == i + 1);
+ item = getItemById(1100 + i);
+ if (item)
+ item->setVisible(_curSelectedPage == i + 1);
+ }
+ break;
+
+ case 4:
+ loadPage(kLBCreditsMode, 1, 0);
+ break;
+
+ case 5:
+ loadPage(kLBPreviewMode, 1, 0);
+ break;
+
+ case 202:
+ if (!tryLoadPageStart(kLBPlayMode, _curSelectedPage))
+ error("failed to load page %d", _curSelectedPage);
+ break;
+ }
+}
+
void MohawkEngine_LivingBooks::handleNotify(NotifyEvent &event) {
// hard-coded behavior (GUI/navigation)
@@ -706,203 +960,23 @@ void MohawkEngine_LivingBooks::handleNotify(NotifyEvent &event) {
page = 2;
}
- LBItem *item;
switch (page) {
case 1:
// main menu
- // TODO: poetry mode
-
- switch (event.param) {
- case 1:
- if (getFeatures() & GF_LB_10) {
- loadPage(kLBControlMode, 2, 0);
- } else {
- loadPage(kLBControlMode, 3, 0);
- }
- break;
-
- case 2:
- item = getItemById(10);
- if (item)
- item->destroySelf();
- item = getItemById(11);
- if (item)
- item->destroySelf();
- item = getItemById(199 + _curLanguage);
- if (item) {
- item->setVisible(true);
- item->togglePlaying(true);
- }
- break;
-
- case 3:
- item = getItemById(10);
- if (item)
- item->destroySelf();
- item = getItemById(11);
- if (item)
- item->destroySelf();
- item = getItemById(12);
- if (item) {
- item->setVisible(true);
- item->togglePlaying(true);
- }
- break;
-
- case 4:
- if (getFeatures() & GF_LB_10) {
- loadPage(kLBControlMode, 3, 0);
- } else {
- loadPage(kLBControlMode, 2, 0);
- }
- break;
-
- case 10:
- item = getItemById(10);
- if (item)
- item->destroySelf();
- item = getItemById(11);
- if (item)
- item->setVisible(true);
- if (item)
- item->togglePlaying(false);
- break;
-
- case 11:
- item = getItemById(11);
- if (item)
- item->togglePlaying(true);
- break;
-
- case 12:
- // start game, in play mode
- loadPage(kLBPlayMode, 1, 0);
- break;
-
- default:
- if (event.param >= 100 && event.param < 100 + (uint)_numLanguages) {
- uint newLanguage = event.param - 99;
- if (newLanguage == _curLanguage)
- break;
- item = getItemById(99 + _curLanguage);
- if (item)
- item->seek(1);
- _curLanguage = newLanguage;
- } else if (event.param >= 200 && event.param < 200 + (uint)_numLanguages) {
- // start game, in read mode
- loadPage(kLBReadMode, 1, 0);
- }
- break;
- }
+ if (_poetryMode)
+ handleUIPoetryMenuClick(event.param);
+ else
+ handleUIMenuClick(event.param);
break;
case 2:
// quit screen
-
- switch (event.param) {
- case 1:
- case 2:
- // button clicked, run animation
- item = getItemById(10);
- if (item)
- item->destroySelf();
- item = getItemById(11);
- if (item)
- item->destroySelf();
- item = getItemById((event.param == 1) ? 12 : 13);
- if (item) {
- item->setVisible(true);
- item->togglePlaying(false);
- }
- break;
-
- case 10:
- case 11:
- item = getItemById(11);
- if (item)
- item->togglePlaying(true);
- break;
-
- case 12:
- // 'yes', I want to quit
- quitGame();
- break;
-
- case 13:
- // 'no', go back to menu
- loadPage(kLBControlMode, 1, 0);
- break;
- }
+ handleUIQuitClick(event.param);
break;
case 3:
// options screen
-
- switch (event.param) {
- case 1:
- item = getItemById(10);
- if (item)
- item->destroySelf();
- item = getItemById(202);
- if (item) {
- item->setVisible(true);
- item->togglePlaying(true);
- }
- break;
-
- case 2:
- // back
- item = getItemById(2);
- if (item)
- item->seek(1);
- if (_curSelectedPage == 1) {
- _curSelectedPage = _numPages;
- } else {
- _curSelectedPage--;
- }
- for (uint i = 0; i < _numPages; i++) {
- item = getItemById(1000 + i);
- if (item)
- item->setVisible(_curSelectedPage == i + 1);
- item = getItemById(1100 + i);
- if (item)
- item->setVisible(_curSelectedPage == i + 1);
- }
- break;
-
- case 3:
- // forward
- item = getItemById(3);
- if (item)
- item->seek(1);
- if (_curSelectedPage == _numPages) {
- _curSelectedPage = 1;
- } else {
- _curSelectedPage++;
- }
- for (uint i = 0; i < _numPages; i++) {
- item = getItemById(1000 + i);
- if (item)
- item->setVisible(_curSelectedPage == i + 1);
- item = getItemById(1100 + i);
- if (item)
- item->setVisible(_curSelectedPage == i + 1);
- }
- break;
-
- case 4:
- loadPage(kLBCreditsMode, 1, 0);
- break;
-
- case 5:
- loadPage(kLBPreviewMode, 1, 0);
- break;
-
- case 202:
- if (!tryLoadPageStart(kLBPlayMode, _curSelectedPage))
- error("failed to load page %d", _curSelectedPage);
- break;
- }
+ handleUIOptionsClick(event.param);
break;
}
break;
diff --git a/engines/mohawk/livingbooks.h b/engines/mohawk/livingbooks.h
index b702820253..499a3f86ce 100644
--- a/engines/mohawk/livingbooks.h
+++ b/engines/mohawk/livingbooks.h
@@ -482,6 +482,11 @@ private:
bool tryDefaultPage();
+ void handleUIMenuClick(uint controlId);
+ void handleUIPoetryMenuClick(uint controlId);
+ void handleUIQuitClick(uint controlId);
+ void handleUIOptionsClick(uint controlId);
+
Common::Queue<NotifyEvent> _notifyEvents;
void handleNotify(NotifyEvent &event);