[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