[Scummvm-git-logs] scummvm master -> fad94268a94c67720d39dd5c7b8c6a478debb256
npjg
nathanael.gentrydb8 at gmail.com
Wed Jun 17 18:29:32 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:
fad94268a9 DIRECTOR: Send mouse events to actionable sprites first
Commit: fad94268a94c67720d39dd5c7b8c6a478debb256
https://github.com/scummvm/scummvm/commit/fad94268a94c67720d39dd5c7b8c6a478debb256
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-17T14:28:08-04:00
Commit Message:
DIRECTOR: Send mouse events to actionable sprites first
Changed paths:
engines/director/events.cpp
engines/director/score.cpp
engines/director/score.h
engines/director/sprite.cpp
engines/director/sprite.h
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 5f4db0bf61..557ef9dc6a 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -99,7 +99,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
// D3 doesn't have both mouse up and down.
// But we still want to know if the mouse is down for press effects.
- spriteId = sc->getSpriteIDFromPos(pos);
+ spriteId = sc->getSpriteIDFromPos(pos, true);
sc->_currentMouseDownSpriteId = spriteId;
if (sc->getSpriteById(spriteId)->_scriptId)
sc->_currentClickOnSpriteId = spriteId;
@@ -118,7 +118,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
case Common::EVENT_LBUTTONUP:
pos = g_system->getEventManager()->getMousePos();
- spriteId = sc->getSpriteIDFromPos(pos);
+ spriteId = sc->getSpriteIDFromPos(pos, true);
if (!sc->getChannelById(sc->_currentMouseDownSpriteId)->getBbox().contains(pos))
sc->_currentMouseDownSpriteId = 0;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index caa18a6e0a..84e7f4c51f 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -766,9 +766,9 @@ const Stxt *Score::getStxt(int castId) {
return result;
}
-uint16 Score::getSpriteIDFromPos(Common::Point pos) {
+uint16 Score::getSpriteIDFromPos(Common::Point pos, bool onlyActive) {
for (int i = _channels.size() - 1; i >= 0; i--)
- if (_channels[i]->getBbox().contains(pos))
+ if (_channels[i]->getBbox().contains(pos) && (!onlyActive || _channels[i]->_sprite->isActive()))
return i;
return 0;
diff --git a/engines/director/score.h b/engines/director/score.h
index 3047d47a3d..58e1923e53 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -140,7 +140,7 @@ public:
int getCurrentLabelNumber();
int getNextLabelNumber(int referenceFrame);
- uint16 getSpriteIDFromPos(Common::Point pos);
+ uint16 getSpriteIDFromPos(Common::Point pos, bool onlyActive = false);
bool checkSpriteIntersection(uint16 spriteId, Common::Point pos);
Cast *getCastMember(int castId);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 7e53b20f9c..01a0f8eb6d 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -107,6 +107,10 @@ bool Sprite::isDirty() {
return _castType != kCastTypeNull && (_dirty || (_cast && _cast->isModified()));
}
+bool Sprite::isActive() {
+ return _moveable || _puppet || _scriptId;
+}
+
void Sprite::setClean() {
_dirty = false;
if (_cast)
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index f7f601941d..e49fd67420 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -64,6 +64,7 @@ public:
void updateCast();
void translate(Common::Point delta, bool moveTo = false);
bool isDirty();
+ bool isActive();
void setClean();
uint16 getPattern();
void setPattern(uint16 pattern);
More information about the Scummvm-git-logs
mailing list