[Scummvm-git-logs] scummvm master -> c54b0457ed6d3f77427cc508fa465fa76e7990af
mduggan
noreply at scummvm.org
Fri Mar 24 23:31:31 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c54b0457ed TETRAEDGE: Implement original options screen.
Commit: c54b0457ed6d3f77427cc508fa465fa76e7990af
https://github.com/scummvm/scummvm/commit/c54b0457ed6d3f77427cc508fa465fa76e7990af
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2023-03-25T08:28:11+09:00
Commit Message:
TETRAEDGE: Implement original options screen.
Changed paths:
engines/tetraedge/game/application.h
engines/tetraedge/game/credits.cpp
engines/tetraedge/game/main_menu.cpp
engines/tetraedge/game/options_menu.cpp
engines/tetraedge/game/options_menu.h
diff --git a/engines/tetraedge/game/application.h b/engines/tetraedge/game/application.h
index 8c7e3b8043f..2fcb104ff18 100644
--- a/engines/tetraedge/game/application.h
+++ b/engines/tetraedge/game/application.h
@@ -29,6 +29,7 @@
#include "tetraedge/game/credits.h"
#include "tetraedge/game/global_bonus_menu.h"
#include "tetraedge/game/main_menu.h"
+#include "tetraedge/game/options_menu.h"
#include "tetraedge/game/loc_file.h"
#include "tetraedge/game/owner_error_menu.h"
#include "tetraedge/game/splash_screens.h"
@@ -92,6 +93,7 @@ public:
BonusMenu &bonusMenu() { return _bonusMenu; }
GlobalBonusMenu &globalBonusMenu() { return _globalBonusMenu; }
MainMenu &mainMenu() { return _mainMenu; }
+ OptionsMenu &optionsMenu() { return _optionsMenu; }
TeMusic &music() { return _music; }
Credits &credits() { return _credits; }
UpsellScreen &upsellScreen() { return _upsellScreen; }
@@ -154,6 +156,7 @@ private:
GlobalBonusMenu _globalBonusMenu;
BonusMenu _bonusMenu;
MainMenu _mainMenu;
+ OptionsMenu _optionsMenu;
Credits _credits;
OwnerErrorMenu _ownerErrorMenu;
SplashScreens _splashScreens;
diff --git a/engines/tetraedge/game/credits.cpp b/engines/tetraedge/game/credits.cpp
index c090925713d..3f48f112e95 100644
--- a/engines/tetraedge/game/credits.cpp
+++ b/engines/tetraedge/game/credits.cpp
@@ -151,7 +151,7 @@ void Credits::leave() {
_timer.stop();
_gui.unload();
if (_returnToOptions) {
- error("TODO: Implement returning to options menu");
+ app->optionsMenu().enter();
} else {
// WORKAROUND: Ensure game is left before opening menu to
// stop inventory button appearing in menu.
diff --git a/engines/tetraedge/game/main_menu.cpp b/engines/tetraedge/game/main_menu.cpp
index 87ec3fb14d0..7f4ddf898ef 100644
--- a/engines/tetraedge/game/main_menu.cpp
+++ b/engines/tetraedge/game/main_menu.cpp
@@ -288,7 +288,15 @@ bool MainMenu::onNewGameConfirmed() {
}
bool MainMenu::onOptionsButtonValidated() {
- g_engine->openConfigDialog();
+ if (ConfMan.getBool("use_scummvm_options")) {
+ g_engine->openConfigDialog();
+ } else {
+ Application *app = g_engine->getApplication();
+ app->captureFade();
+ leave();
+ app->optionsMenu().enter();
+ app->fade();
+ }
return true;
}
diff --git a/engines/tetraedge/game/options_menu.cpp b/engines/tetraedge/game/options_menu.cpp
index 904445178e9..63bd5492654 100644
--- a/engines/tetraedge/game/options_menu.cpp
+++ b/engines/tetraedge/game/options_menu.cpp
@@ -19,21 +19,321 @@
*
*/
+#include "tetraedge/tetraedge.h"
#include "tetraedge/game/options_menu.h"
+#include "tetraedge/game/application.h"
+#include "tetraedge/game/game.h"
+#include "tetraedge/te/te_sound_manager.h"
namespace Tetraedge {
-OptionsMenu::OptionsMenu() {
+static Common::String pageStr(int i) {
+ return Common::String::format("page%d", i);
+}
+
+OptionsMenu::OptionsMenu() : _tutoPage(1) {
}
void OptionsMenu::enter() {
+ Application *app = g_engine->getApplication();
+
+ if (!app->appSpriteLayout()._tiledSurfacePtr->isLoaded()) {
+ // TODO: Check
+ app->appSpriteLayout().load("menus/menu.ogv");
+ app->appSpriteLayout().play();
+ }
+ load("menus/options/optionsMenu.lua");
+ _gui2.load("menus/options/tuto.lua");
+ app->frontLayout().addChild(layoutChecked("menu2"));
+ app->frontLayout().addChild(_gui2.buttonLayoutChecked("tuto"));
+ _gui2.buttonLayoutChecked("tuto")->setVisible(false);
+
+ const Common::String musicPath = value("musicPath").toString();
+ if (!app->music().isPlaying() || (app->music().getAccessName() != musicPath)) {
+ app->music().load(musicPath);
+ app->music().play();
+ app->music().volume(1.0);
+ }
+
+ buttonLayoutChecked("quitButton")->onMouseClickValidated().add(this, &OptionsMenu::onQuitButton);
+ buttonLayoutChecked("creditsButton")->onMouseClickValidated().add(this, &OptionsMenu::onCreditsButton);
+ TeButtonLayout *supportBtn = buttonLayout("supportButton");
+ if (supportBtn) {
+ supportBtn->onMouseClickValidated().add(this, &OptionsMenu::onSupportButton);
+ }
+ TeButtonLayout *termsBtn = buttonLayout("termsButton");
+ if (termsBtn) {
+ termsBtn->onMouseClickValidated().add(this, &OptionsMenu::onTermsOfServiceButton);
+ }
+ TeButtonLayout *privBtn = buttonLayout("privacyButton");
+ if (privBtn) {
+ privBtn->onMouseClickValidated().add(this, &OptionsMenu::onPrivacyPolicyButton);
+ }
+
+ buttonLayoutChecked("sfxVolumeMinusButton")->onMouseClickValidated().add(this, &OptionsMenu::onSFXVolumeMinusButton);
+ buttonLayoutChecked("sfxVolumePlusButton")->onMouseClickValidated().add(this, &OptionsMenu::onSFXVolumePlusButton);
+ buttonLayoutChecked("musicVolumeMinusButton")->onMouseClickValidated().add(this, &OptionsMenu::onMusicVolumeMinusButton);
+ buttonLayoutChecked("musicVolumePlusButton")->onMouseClickValidated().add(this, &OptionsMenu::onMusicVolumePlusButton);
+ buttonLayoutChecked("dialogVolumeMinusButton")->onMouseClickValidated().add(this, &OptionsMenu::onDialogVolumeMinusButton);
+ buttonLayoutChecked("dialogVolumePlusButton")->onMouseClickValidated().add(this, &OptionsMenu::onDialogVolumePlusButton);
+ buttonLayoutChecked("videoVolumeMinusButton")->onMouseClickValidated().add(this, &OptionsMenu::onVideoVolumeMinusButton);
+ buttonLayoutChecked("videoVolumePlusButton")->onMouseClickValidated().add(this, &OptionsMenu::onVideoVolumePlusButton);
+ buttonLayoutChecked("sfxVolumeMinusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("sfxVolumePlusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("musicVolumeMinusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("musicVolumePlusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("dialogVolumeMinusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("dialogVolumePlusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("videoVolumeMinusButton")->setDoubleValidationProtectionEnabled(false);
+ buttonLayoutChecked("videoVolumePlusButton")->setDoubleValidationProtectionEnabled(false);
+ _tutoPage = 1;
+ buttonLayoutChecked("tutoButton")->onMouseClickValidated().add(this, &OptionsMenu::onVisibleTuto);
+
+ TeLayout *bg = _gui2.layoutChecked("background");
+ for (int i = 1; i <= bg->childCount(); i++) {
+ TeButtonLayout *page = _gui2.buttonLayoutChecked(pageStr(i));
+ if (i == bg->childCount()) {
+ page->onMouseClickValidated().add(this, &OptionsMenu::onCloseTuto);
+ } else {
+ page->onMouseClickValidated().add(this, &OptionsMenu::onVisibleTutoNextPage);
+ }
+ }
+
+ //
+ // WORKAROUND: This is set to PanScan ratio 1.0, but with our code
+ // but that shrinks it down to pillarboxed. Force back to full size.
+ //
+ layoutChecked("background")->setRatioMode(TeILayout::RATIO_MODE_NONE);
+
+ updateSFXVolumeJauge();
+ updateMusicVolumeJauge();
+ updateDialogVolumeJauge();
+ updateVideoVolumeJauge();
+ return;
}
void OptionsMenu::leave() {
+ if (loaded()) {
+ unload();
+ _gui2.unload();
+ }
+}
+
+bool OptionsMenu::onCloseTuto() {
+ Application *app = g_engine->getApplication();
+ app->captureFade();
+ _gui2.buttonLayoutChecked("tuto")->setVisible(false);
+ _tutoPage = 1;
+ app->fade();
+ return false;
+}
+
+bool OptionsMenu::onCreditsButton() {
+ Game *game = g_engine->getGame();
+ game->stopSound("sounds/Ambiances/b_automatebike.ogg");
+ game->stopSound("sounds/Ambiances/b_engrenagebg.ogg");
+ Application *app = g_engine->getApplication();
+ app->captureFade();
+ leave();
+ app->credits().enter(true);
+ // TODO: app->appSpriteLayout().something
+ app->fade();
+ return false;
+}
+
+bool OptionsMenu::onDialogVolumeMinusButton() {
+ int n = 0;
+ while (layout(Common::String("dialogVolumeSprite%d", n)) != nullptr)
+ n++;
+ float diff = (n ? (1.0f / n) : 0.1f);
+ TeSoundManager *sndmgr = g_engine->getSoundManager();
+ float curvol = sndmgr->getChannelVolume("dialog");
+ sndmgr->setChannelVolume("dialog", MAX(0.0f, curvol - diff));
+ updateDialogVolumeJauge();
+ _music2.stop();
+ if (!_music1.isPlaying()) {
+ _music1.setChannelName("dialog");
+ _music1.repeat(false);
+ _music1.load(value("dialogTestPath").toString());
+ _music1.play();
+ }
+ return false;
+}
+
+bool OptionsMenu::onDialogVolumePlusButton() {
+ int n = 0;
+ while (layout(Common::String("dialogVolumeSprite%d", n)) != nullptr)
+ n++;
+ float diff = (n ? (1.0f / n) : 0.1f);
+ TeSoundManager *sndmgr = g_engine->getSoundManager();
+ float curvol = sndmgr->getChannelVolume("dialog");
+ sndmgr->setChannelVolume("dialog", MIN(1.0f, curvol + diff));
+ updateDialogVolumeJauge();
+ _music2.stop();
+ if (!_music1.isPlaying()) {
+ _music1.setChannelName("dialog");
+ _music1.repeat(false);
+ _music1.load(value("dialogTestPath").toString());
+ _music1.play();
+ }
+ return false;
+}
+
+bool OptionsMenu::onMusicVolumeMinusButton() {
+ int n = 0;
+ while (layout(Common::String("musicVolumeSprite%d", n)) != nullptr)
+ n++;
+ float diff = (n ? (1.0f / n) : 0.1f);
+ TeSoundManager *sndmgr = g_engine->getSoundManager();
+ float curvol = sndmgr->getChannelVolume("music");
+ sndmgr->setChannelVolume("music", MAX(0.0f, curvol - diff));
+ updateMusicVolumeJauge();
+ return false;
+}
+
+bool OptionsMenu::onMusicVolumePlusButton() {
+ int n = 0;
+ while (layout(Common::String("musicVolumeSprite%d", n)) != nullptr)
+ n++;
+ float diff = (n ? (1.0f / n) : 0.1f);
+ TeSoundManager *sndmgr = g_engine->getSoundManager();
+ float curvol = sndmgr->getChannelVolume("music");
+ sndmgr->setChannelVolume("music", MIN(1.0f, curvol + diff));
+ updateMusicVolumeJauge();
+ return false;
+}
+
+bool OptionsMenu::onQuitButton() {
+ Application *app = g_engine->getApplication();
+ app->captureFade();
+ leave();
+ app->mainMenu().enter();
+ app->fade();
+ return true;
+}
+bool OptionsMenu::onSFXVolumeMinusButton() {
+ int n = 0;
+ while (layout(Common::String("sfxVolumeSprite%d", n)) != nullptr)
+ n++;
+ float diff = (n ? (1.0f / n) : 0.1f);
+ TeSoundManager *sndmgr = g_engine->getSoundManager();
+ float curvol = sndmgr->getChannelVolume("sfx");
+ sndmgr->setChannelVolume("sfx", MAX(0.0f, curvol - diff));
+ updateSFXVolumeJauge();
+ return false;
}
-// TODO: Add more functions here.
+bool OptionsMenu::onSFXVolumePlusButton() {
+ int n = 0;
+ while (layout(Common::String("sfxVolumeSprite%d", n)) != nullptr)
+ n++;
+ float diff = (n ? (1.0f / n) : 0.1f);
+ TeSoundManager *sndmgr = g_engine->getSoundManager();
+ float curvol = sndmgr->getChannelVolume("sfx");
+ sndmgr->setChannelVolume("sfx", MIN(1.0f, curvol + diff));
+ updateSFXVolumeJauge();
+ return false;
+}
+
+bool OptionsMenu::onVideoVolumeMinusButton() {
+ int n = 0;
+ while (layout(Common::String("videoVolumeSprite%d", n)) != nullptr)
+ n++;
+ //float diff = (n ? (1.0f / n) : 0.1f);
+ //TeSoundManager *sndmgr = g_engine->getSoundManager();
+ //float curvol = sndmgr->getChannelVolume("video");
+ warning("TODO: Implement onVideoVolumeMinusButton");
+ updateVideoVolumeJauge();
+ return false;
+}
+
+bool OptionsMenu::onVideoVolumePlusButton() {
+ int n = 0;
+ while (layout(Common::String("videoVolumeSprite%d", n)) != nullptr)
+ n++;
+ //float diff = (n ? (1.0f / n) : 0.1f);
+ //TeSoundManager *sndmgr = g_engine->getSoundManager();
+ //float curvol = sndmgr->getChannelVolume("video");
+ warning("TODO: Implement onVideoVolumePlusButton");
+ updateVideoVolumeJauge();
+ return false;
+}
+
+bool OptionsMenu::onVisibleTuto() {
+ Application *app = g_engine->getApplication();
+ app->captureFade();
+ TeButtonLayout *tutobtn = _gui2.buttonLayoutChecked("tuto");
+ TeLayout *background = _gui2.layoutChecked("background");
+ tutobtn->setVisible(true);
+ for (int i = 1; i <= background->childCount(); i++) {
+ _gui2.buttonLayoutChecked(pageStr(i))->setVisible(false);
+ }
+ _gui2.buttonLayoutChecked(pageStr(1))->setVisible(true);
+ app->fade();
+ return false;
+}
+
+bool OptionsMenu::onVisibleTutoNextPage() {
+ TeButtonLayout *tutobtn = _gui2.buttonLayoutChecked("tuto");
+ tutobtn->setVisible(true);
+ TeLayout *bg = _gui2.layoutChecked("background");
+
+ for (int i = 1; i <= bg->childCount(); i++) {
+ _gui2.buttonLayoutChecked(pageStr(i))->setVisible(false);
+ }
+
+ _gui2.buttonLayoutChecked(pageStr(_tutoPage))->setVisible(false);
+ _tutoPage++;
+ _gui2.buttonLayoutChecked(pageStr(_tutoPage))->setVisible(true);
+ return false;
+}
+
+void OptionsMenu::updateJauge(const Common::String &chan, const Common::String &spriteName) {
+ TeSoundManager *sndMgr = g_engine->getSoundManager();
+ const float chanVol = sndMgr->getChannelVolume(chan);
+ TeSpriteLayout *volSprite = spriteLayout(spriteName);
+ if (volSprite)
+ volSprite->_tiledSurfacePtr->setLeftCropping(sndMgr->getChannelVolume(chan));
+
+ int n = 0;
+ while (layout(Common::String::format("%s%d", spriteName.c_str(), n)) != nullptr)
+ n++;
+
+ int i = 0;
+ while (true) {
+ TeLayout *sprite = layout(Common::String::format("%s%d", spriteName.c_str(), i));
+ if (!sprite)
+ break;
+ bool enableSprite = false;
+ if (i * (1.0f / n) - FLT_EPSILON <= chanVol) {
+ enableSprite = chanVol < (i + 1) * (1.0f / n) - FLT_EPSILON;
+ }
+ sprite->setVisible(enableSprite);
+
+ TeLayout *offSprite = layout(Common::String::format("%s%dOff", spriteName.c_str(), i));
+ if (offSprite) {
+ offSprite->setVisible(!enableSprite);
+ }
+ i++;
+ }
+}
+
+void OptionsMenu::updateDialogVolumeJauge() {
+ updateJauge("dialog", "dialogVolumeSprite");
+}
+
+void OptionsMenu::updateMusicVolumeJauge() {
+ updateJauge("music", "musicVolumeSprite");
+}
+
+void OptionsMenu::updateSFXVolumeJauge() {
+ updateJauge("sfx", "sfxVolumeSprite");
+}
+
+void OptionsMenu::updateVideoVolumeJauge() {
+ updateJauge("video", "videoVolumeSprite");
+}
} // end namespace Tetraedge
diff --git a/engines/tetraedge/game/options_menu.h b/engines/tetraedge/game/options_menu.h
index 075e24bf7c4..7bd59e21e8c 100644
--- a/engines/tetraedge/game/options_menu.h
+++ b/engines/tetraedge/game/options_menu.h
@@ -34,18 +34,19 @@ public:
void enter() override;
void leave() override;
+private:
bool onCloseTuto();
bool onCreditsButton();
bool onDialogVolumeMinusButton();
bool onDialogVolumePlusButton();
bool onMusicVolumeMinusButton();
bool onMusicVolumePlusButton();
- bool onPrivacyPolicyButton();
+ bool onPrivacyPolicyButton() { return false; }
bool onQuitButton();
bool onSFXVolumeMinusButton();
bool onSFXVolumePlusButton();
- bool onSupportButton();
- bool onTermsOfServiceButton();
+ bool onSupportButton() { return false; }
+ bool onTermsOfServiceButton() { return false; }
bool onVideoVolumeMinusButton();
bool onVideoVolumePlusButton();
bool onVisibleTuto();
@@ -56,12 +57,13 @@ public:
void updateSFXVolumeJauge();
void updateVideoVolumeJauge();
-private:
-
- // TODO: work out virtual thing here TeLuaGUI _gui2;
+ // Not in the original, but to extract some common code..
+ void updateJauge(const Common::String &chan, const Common::String &spriteName);
+ TeLuaGUI _gui2;
TeMusic _music1;
TeMusic _music2;
+ int _tutoPage;
};
} // end namespace Tetraedge
More information about the Scummvm-git-logs
mailing list