[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