[Scummvm-git-logs] scummvm master -> d937daceb45a1fa8b6fac4674bb248c5cf22ae0a

aquadran aquadran at gmail.com
Mon Oct 26 19:57:29 UTC 2020


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:
d937daceb4 STARK: Play sound when hovering active cursor (#2566)


Commit: d937daceb45a1fa8b6fac4674bb248c5cf22ae0a
    https://github.com/scummvm/scummvm/commit/d937daceb45a1fa8b6fac4674bb248c5cf22ae0a
Author: Dmitry Gladkov (dmitry.gladkov at gmail.com)
Date: 2020-10-26T20:57:25+01:00

Commit Message:
STARK: Play sound when hovering active cursor (#2566)

STARK: Play sound when hovering over action items

Changed paths:
    engines/stark/services/staticprovider.h
    engines/stark/ui/cursor.cpp
    engines/stark/ui/cursor.h
    engines/stark/ui/world/actionmenu.cpp
    engines/stark/ui/world/actionmenu.h
    engines/stark/ui/world/gamewindow.cpp
    engines/stark/ui/world/inventorywindow.cpp


diff --git a/engines/stark/services/staticprovider.h b/engines/stark/services/staticprovider.h
index 757562c9c6..098c3542da 100644
--- a/engines/stark/services/staticprovider.h
+++ b/engines/stark/services/staticprovider.h
@@ -76,6 +76,8 @@ public:
 	};
 
 	enum UISound {
+		kActionMouthHover = 0,
+		kActionHover = 1,
 		kInventoryNewItem = 2
 	};
 
diff --git a/engines/stark/ui/cursor.cpp b/engines/stark/ui/cursor.cpp
index 02f57af8f1..8db11d741b 100644
--- a/engines/stark/ui/cursor.cpp
+++ b/engines/stark/ui/cursor.cpp
@@ -31,6 +31,7 @@
 #include "engines/stark/services/staticprovider.h"
 
 #include "engines/stark/resources/item.h"
+#include "engines/stark/resources/sound.h"
 
 #include "engines/stark/visual/image.h"
 #include "engines/stark/visual/text.h"
@@ -44,11 +45,12 @@ Cursor::Cursor(Gfx::Driver *gfx) :
 		_cursorImage(nullptr),
 		_mouseText(nullptr),
 		_currentCursorType(kImage),
-		_fading(false),
+		_itemActive(false),
 		_fadeLevelIncreasing(true),
 		_fadeLevel(0),
 		_hintDisplayDelay(150) {
 	setCursorType(kDefault);
+	_actionHoverSound = StarkStaticProvider->getUISound(StaticProvider::kActionHover);
 }
 
 Cursor::~Cursor() {
@@ -74,8 +76,16 @@ void Cursor::setMousePosition(const Common::Point &pos) {
 	_hintDisplayDelay = 150;
 }
 
-void Cursor::setFading(bool fading) {
-	_fading = fading;
+void Cursor::setItemActive(bool itemActive) {
+	if (_itemActive == itemActive) {
+		return;
+	}
+	if (itemActive) {
+		_actionHoverSound->play();
+	} else {
+		_actionHoverSound->stop();
+	}
+	_itemActive = itemActive;
 }
 
 void Cursor::onScreenChanged() {
@@ -85,7 +95,7 @@ void Cursor::onScreenChanged() {
 }
 
 void Cursor::updateFadeLevel() {
-	if (_fading) {
+	if (_itemActive) {
 		if (_fadeLevelIncreasing) {
 			_fadeLevel += 0.001f * StarkGlobal->getMillisecondsPerGameloop();
 		} else {
diff --git a/engines/stark/ui/cursor.h b/engines/stark/ui/cursor.h
index e0d5a94d56..4e3cb84449 100644
--- a/engines/stark/ui/cursor.h
+++ b/engines/stark/ui/cursor.h
@@ -35,6 +35,10 @@ namespace Gfx {
 class Driver;
 }
 
+namespace Resources {
+class Sound;
+}
+
 /**
  * Manager for the current game Cursor
  */
@@ -49,8 +53,8 @@ public:
 	/** Update the mouse position */
 	void setMousePosition(const Common::Point &pos);
 
-	/** Make cycle the cursor's brightness */
-	void setFading(bool fading);
+	/** Make cycle the cursor's brightness and play sound */
+	void setItemActive(bool fading);
 
 	/** Update when the screen resolution has changed */
 	void onScreenChanged();
@@ -87,7 +91,9 @@ private:
 	VisualText *_mouseText;
 	CursorType _currentCursorType;
 
-	bool _fading;
+	Resources::Sound *_actionHoverSound;
+
+	bool _itemActive;
 	float _fadeLevel;
 	bool _fadeLevelIncreasing;
 	static const float _fadeValueMax;
diff --git a/engines/stark/ui/world/actionmenu.cpp b/engines/stark/ui/world/actionmenu.cpp
index 023bc11182..9dc355b83d 100644
--- a/engines/stark/ui/world/actionmenu.cpp
+++ b/engines/stark/ui/world/actionmenu.cpp
@@ -33,6 +33,7 @@
 #include "engines/stark/resources/knowledgeset.h"
 #include "engines/stark/resources/level.h"
 #include "engines/stark/resources/pattable.h"
+#include "engines/stark/resources/sound.h"
 
 #include "engines/stark/services/services.h"
 #include "engines/stark/services/gameinterface.h"
@@ -57,6 +58,7 @@ ActionMenu::ActionMenu(Gfx::Driver *gfx, Cursor *cursor) :
 		_itemDescription(nullptr),
 		_item(nullptr),
 		_inventory(nullptr),
+		_activeMenuType(kActionNone),
 		_autoCloseTimeRemaining(kAutoCloseDisabled) {
 
 	_background = StarkStaticProvider->getUIElement(StaticProvider::kActionMenuBg);
@@ -74,6 +76,10 @@ ActionMenu::ActionMenu(Gfx::Driver *gfx, Cursor *cursor) :
 	_buttons[kActionMouth].action = Resources::PATTable::kActionTalk;
 	_buttons[kActionMouth].rect = Common::Rect(42, 35, 83, 74);
 
+	_actionMouthHoverSound = StarkStaticProvider->getUISound(StaticProvider::kActionMouthHover);
+	_actionMouthHoverSound->setLooping(false);
+	_actionHoverSound = StarkStaticProvider->getUISound(StaticProvider::kActionHover);
+
 	clearActions();
 }
 
@@ -122,6 +128,8 @@ void ActionMenu::open(Resources::ItemVisual *item, const Common::Point &itemRela
 void ActionMenu::close() {
 	_visible = false;
 	_item = nullptr;
+	_activeMenuType = kActionNone;
+	_actionHoverSound->stop();
 }
 
 Common::Rect ActionMenu::computePosition(const Common::Point &mouse) const {
@@ -139,14 +147,11 @@ Common::Rect ActionMenu::computePosition(const Common::Point &mouse) const {
 }
 
 void ActionMenu::onRender() {
-	Common::Point mousePos = getRelativeMousePosition();
-
 	_background->render(Common::Point(0, 0), false);
 
 	for (uint i = 0; i < ARRAYSIZE(_buttons); i++) {
 		if (_buttons[i].enabled) {
-			bool active = _buttons[i].rect.contains(mousePos);
-			VisualImageXMG *visual = StarkGameInterface->getActionImage(_buttons[i].action, active);
+			VisualImageXMG *visual = StarkGameInterface->getActionImage(_buttons[i].action, i == _activeMenuType);
 			visual->render(Common::Point(_buttons[i].rect.left, _buttons[i].rect.top), false);
 		}
 	}
@@ -173,18 +178,34 @@ void ActionMenu::enableAction(uint32 action) {
 	}
 }
 
+void ActionMenu::updateActionSound() {
+	if (_activeMenuType == kActionNone) {
+		_actionHoverSound->stop();
+		return;
+	}
+	_actionHoverSound->play();
+	if (_activeMenuType == kActionMouth) {
+		_actionMouthHoverSound->play();
+	}
+}
+
 void ActionMenu::onMouseMove(const Common::Point &pos) {
-	bool hoveringAction = false;
+	int32 prevActive = _activeMenuType;
+	int32 newActive  = kActionNone;
 	for (uint i = 0; i < ARRAYSIZE(_buttons); i++) {
 		if (_buttons[i].enabled && _buttons[i].rect.contains(pos)) {
-			hoveringAction = true;
+			newActive = i;
 		}
 	}
 
-	if (hoveringAction) {
-		_cursor->setCursorType(Cursor::kActive);
-	} else {
-		_cursor->setCursorType(Cursor::kDefault);
+	if (newActive != prevActive) {
+		_activeMenuType = newActive;
+		if (_activeMenuType == kActionNone) {
+			_cursor->setCursorType(Cursor::kDefault);
+		} else {
+			_cursor->setCursorType(Cursor::kActive);
+		}
+		updateActionSound();
 	}
 
 	_autoCloseTimeRemaining = kAutoCloseSuspended;
diff --git a/engines/stark/ui/world/actionmenu.h b/engines/stark/ui/world/actionmenu.h
index af856fbae7..edbd597395 100644
--- a/engines/stark/ui/world/actionmenu.h
+++ b/engines/stark/ui/world/actionmenu.h
@@ -35,6 +35,7 @@ class GameWindow;
 
 namespace Resources {
 class ItemVisual;
+class Sound;
 }
 
 class ActionMenu : public Window {
@@ -60,11 +61,13 @@ protected:
 private:
 	void clearActions();
 	void enableAction(uint32 action);
+	void updateActionSound();
 
 	enum ActionMenuType {
-		kActionHand  = 0,
-		kActionEye   = 1,
-		kActionMouth = 2
+		kActionNone  = -1,
+		kActionHand  =  0,
+		kActionEye   =  1,
+		kActionMouth =  2
 	};
 
 	struct ActionButton {
@@ -85,6 +88,11 @@ private:
 	InventoryWindow *_inventory;
 
 	int32 _autoCloseTimeRemaining;
+
+	int32 _activeMenuType;
+
+	Resources::Sound *_actionMouthHoverSound;
+	Resources::Sound *_actionHoverSound;
 };
 
 } // End of namespace Stark
diff --git a/engines/stark/ui/world/gamewindow.cpp b/engines/stark/ui/world/gamewindow.cpp
index 07a2547030..afb8e23a2e 100644
--- a/engines/stark/ui/world/gamewindow.cpp
+++ b/engines/stark/ui/world/gamewindow.cpp
@@ -117,7 +117,6 @@ void GameWindow::onRender() {
 
 void GameWindow::onMouseMove(const Common::Point &pos) {
 	_renderEntries = StarkGlobal->getCurrent()->getLocation()->listRenderEntries();
-	_cursor->setFading(false);
 
 	if (!StarkUserInterface->isInteractive()) {
 		_objectUnderCursor = nullptr;
@@ -129,13 +128,14 @@ void GameWindow::onMouseMove(const Common::Point &pos) {
 	int16 selectedInventoryItem = _inventory->getSelectedInventoryItem();
 	int16 singlePossibleAction = -1;
 	bool defaultAction = false;
+	bool itemActive = false;
 
 	checkObjectAtPos(pos, selectedInventoryItem, singlePossibleAction, defaultAction);
 
 	if (selectedInventoryItem != -1 && !defaultAction) {
 		VisualImageXMG *cursorImage = StarkGameInterface->getCursorImage(selectedInventoryItem);
 		_cursor->setCursorImage(cursorImage);
-		_cursor->setFading(singlePossibleAction == selectedInventoryItem);
+		itemActive = singlePossibleAction == selectedInventoryItem;
 	} else if (_objectUnderCursor) {
 		switch (singlePossibleAction) {
 			case -1:
@@ -159,6 +159,7 @@ void GameWindow::onMouseMove(const Common::Point &pos) {
 		// Not an object
 		_cursor->setCursorType(Cursor::kDefault);
 	}
+	_cursor->setItemActive(itemActive);
 
 	Common::String mouseHint;
 	if (_objectUnderCursor) {
diff --git a/engines/stark/ui/world/inventorywindow.cpp b/engines/stark/ui/world/inventorywindow.cpp
index 1fe0852ea9..35ed6d90ee 100644
--- a/engines/stark/ui/world/inventorywindow.cpp
+++ b/engines/stark/ui/world/inventorywindow.cpp
@@ -196,15 +196,15 @@ void InventoryWindow::onMouseMove(const Common::Point &pos) {
 		} else if ((canScrollDown() && _scrollDownArrowRect.contains(pos))
 		           || (canScrollUp() && _scrollUpArrowRect.contains(pos))) {
 			_cursor->setCursorType(Cursor::kActive);
-			_cursor->setFading(false);
+			_cursor->setItemActive(false);
 		} else {
 			_cursor->setCursorType(Cursor::kDefault);
 		}
-		_cursor->setFading(false);
+		_cursor->setItemActive(false);
 	} else {
 		VisualImageXMG *cursorImage = StarkGameInterface->getCursorImage(_selectedInventoryItem);
 		_cursor->setCursorImage(cursorImage);
-		_cursor->setFading(hoveredItemAction == _selectedInventoryItem);
+		_cursor->setItemActive(hoveredItemAction == _selectedInventoryItem);
 	}
 
 	if (hoveredItem) {




More information about the Scummvm-git-logs mailing list