[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