[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