[Scummvm-git-logs] scummvm master -> 865201b9fcabb615530dd34e452411b0d037a908

sev- sev at scummvm.org
Wed Jun 3 20:22:05 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:
865201b9fc DIRECTOR: LINGO: Implement kTheImmediate


Commit: 865201b9fcabb615530dd34e452411b0d037a908
    https://github.com/scummvm/scummvm/commit/865201b9fcabb615530dd34e452411b0d037a908
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-03T22:22:01+02:00

Commit Message:
DIRECTOR: LINGO: Implement kTheImmediate

Changed paths:
    engines/director/lingo/lingo-events.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/sprite.cpp
    engines/director/sprite.h


diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index 0f5fd70127..6f30e6327c 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -146,6 +146,7 @@ void Lingo::registerInputEvent(LEvent event) {
 	Frame *currentFrame = score->_frames[score->getCurrentFrame()];
 	assert(currentFrame != nullptr);
 	uint16 spriteId = score->_currentMouseDownSpriteId;
+	Sprite *sprite = score->getSpriteById(spriteId);
 
 	primaryEventHandler(event);
 
@@ -158,21 +159,29 @@ void Lingo::registerInputEvent(LEvent event) {
 	if (_vm->getVersion() > 3) {
 		if (true) {
 			// TODO: Check whether occurring over a sprite
-			_eventQueue.push(LingoEvent(event, kSpriteScript, currentFrame->_sprites[spriteId]->_scriptId));
+			_eventQueue.push(LingoEvent(event, kSpriteScript, sprite->_scriptId));
 		}
-		_eventQueue.push(LingoEvent(event, kCastScript, currentFrame->_sprites[spriteId]->_castId));
-		_eventQueue.push(LingoEvent(event, kFrameScript, score->_frames[score->getCurrentFrame()]->_actionId));
+		_eventQueue.push(LingoEvent(event, kCastScript, sprite->_castId));
+		_eventQueue.push(LingoEvent(event, kFrameScript, currentFrame->_actionId));
 		// TODO: Is the kFrameScript call above correct?
-	} else if (event == kEventMouseUp) {
+	} else if (event == kEventMouseDown || event == kEventMouseUp) {
+		// If sprite is immediate, its script is run on mouseDown, otherwise on mouseUp
+		bool queueEventNone = false;
+		if (event == kEventMouseDown && sprite->_immediate) {
+			queueEventNone = true;
+		} else if (event == kEventMouseUp && !sprite->_immediate) {
+			queueEventNone = true;
+		}
+	
 		// Frame script overrides sprite script
-		if (!currentFrame->_sprites[spriteId]->_scriptId) {
-			_eventQueue.push(LingoEvent(kEventNone, kSpriteScript, currentFrame->_sprites[spriteId]->_castId + score->_castIDoffset));
-			_eventQueue.push(LingoEvent(event, kSpriteScript, currentFrame->_sprites[spriteId]->_castId + score->_castIDoffset));
+		if (sprite->_scriptId) {
+			if (queueEventNone)
+				_eventQueue.push(LingoEvent(kEventNone, kFrameScript, sprite->_scriptId, spriteId));
 		} else {
-			_eventQueue.push(LingoEvent(kEventNone, kFrameScript, currentFrame->_sprites[spriteId]->_scriptId, spriteId));
+			if (queueEventNone)
+				_eventQueue.push(LingoEvent(kEventNone, kSpriteScript, sprite->_castId + score->_castIDoffset));
+			_eventQueue.push(LingoEvent(event, kSpriteScript, sprite->_castId + score->_castIDoffset));
 		}
-	} else if (event == kEventMouseDown) {
-		_eventQueue.push(LingoEvent(event, kSpriteScript, currentFrame->_sprites[spriteId]->_castId + score->_castIDoffset));
 	}
 	if (event == kEventKeyDown) {
 		// TODO: is the above condition necessary or useful?
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index a74c331fda..0e43f30c36 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -640,6 +640,9 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
 	case kTheHeight:
 		d.u.i = sprite->_height;
 		break;
+	case kTheImmediate:
+		d.u.i = sprite->_immediate;
+		break;
 	case kTheInk:
 		d.u.i = sprite->_ink;
 		break;
@@ -752,6 +755,9 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 	case kTheHeight:
 		sprite->_height = d.asInt();
 		break;
+	case kTheImmediate:
+		sprite->_immediate = d.asInt();
+		break;
 	case kTheInk:
 		sprite->_ink = static_cast<InkType>(d.asInt());
 		break;
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 9e59f869f0..0b1da06a03 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -52,6 +52,7 @@ Sprite::Sprite() {
 	_moveable = false;
 	_editable = false;
 	_puppet = false;
+	_immediate = false;
 	_backColor = 255;
 	_foreColor = 0;
 
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 2117ab1677..e97e73d87f 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -100,6 +100,7 @@ public:
 	bool _moveable;
 	bool _editable;
 	bool _puppet;
+	bool _immediate;
 	byte _backColor;
 	byte _foreColor;
 




More information about the Scummvm-git-logs mailing list