[Scummvm-git-logs] scummvm master -> d5539a66e18c03268bc3b91fce55511377f62ca3
npjg
nathanael.gentrydb8 at gmail.com
Mon Jul 13 21:36:54 UTC 2020
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0d84a57dd4 DIRECTOR: Retrieve cast hilite in the right place
d6af252e09 DIRECTOR: Only test for castInfo on fields that need it
0f5cc7cca8 DIRECTOR: Don't look only for focusable sprites
d5539a66e1 DIRECTOR: Don't run setClean on empty channels
Commit: 0d84a57dd4c8cccce4e16e2ad55f7e2c399aab44
https://github.com/scummvm/scummvm/commit/0d84a57dd4c8cccce4e16e2ad55f7e2c399aab44
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-13T17:32:54-04:00
Commit Message:
DIRECTOR: Retrieve cast hilite in the right place
Changed paths:
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 52cab47dbc..d8f446af63 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1334,11 +1334,6 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
}
Cast *cast = member->getCast();
- if (field == kTheHilite) {
- d.u.i = member->_hilite;
- return d;
- }
-
CastType castType = member->_type;
CastMemberInfo *castInfo = cast->getCastMemberInfo(id);
if (!castInfo) {
@@ -1404,7 +1399,7 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
d.u.i = cast->getCastMemberInitialRect(id).height();
break;
case kTheHilite:
- warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
+ d.u.i = member->_hilite;
break;
case kTheLoaded:
d.u.i = 1; //Not loaded handled above
Commit: d6af252e093a46fb9cc4ec656275684b790c5cfc
https://github.com/scummvm/scummvm/commit/d6af252e093a46fb9cc4ec656275684b790c5cfc
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-13T17:32:54-04:00
Commit Message:
DIRECTOR: Only test for castInfo on fields that need it
Changed paths:
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index d8f446af63..aea7f27050 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1336,10 +1336,8 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
CastType castType = member->_type;
CastMemberInfo *castInfo = cast->getCastMemberInfo(id);
- if (!castInfo) {
+ if (!castInfo)
warning("Lingo::getTheCast(): CastMember info for %d not found", id);
- return d;
- }
switch (field) {
case kTheBackColor:
@@ -1383,7 +1381,8 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
break;
case kTheFileName:
- d = Datum(castInfo->fileName);
+ if (castInfo)
+ d = Datum(castInfo->fileName);
break;
case kTheForeColor:
d.u.i = member->getForeColor();
@@ -1415,7 +1414,8 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
break;
case kTheName:
- d = Datum(castInfo->name);
+ if (castInfo)
+ d = Datum(castInfo->name);
break;
case kTheNumber:
d.u.i = id;
@@ -1450,7 +1450,8 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
break;
case kTheScriptText:
- d = Datum(castInfo->script);
+ if (castInfo)
+ d = Datum(castInfo->script);
break;
case kTheSize:
warning("STUB: Lingo::getTheCast(): Unprocessed getting field \"%s\" of cast %d", field2str(field), id);
Commit: 0f5cc7cca80325362ca797971860aa7e9de7f698
https://github.com/scummvm/scummvm/commit/0f5cc7cca80325362ca797971860aa7e9de7f698
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-13T17:32:54-04:00
Commit Message:
DIRECTOR: Don't look only for focusable sprites
Instead, there is an option to return the topmost non-focusable sprite, too.
Some scripts don't have buttons on them; they are just there for the hilite.
Changed paths:
engines/director/score.cpp
engines/director/score.h
engines/director/sprite.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index cc4d8a9f76..7894194182 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -442,12 +442,18 @@ void Score::screenShot() {
newSurface->free();
}
-uint16 Score::getSpriteIDFromPos(Common::Point pos, bool onlyActive) {
+uint16 Score::getSpriteIDFromPos(Common::Point pos, bool firstActive) {
+ int unfocusableSprite = 0;
+
for (int i = _channels.size() - 1; i >= 0; i--)
- if (_channels[i]->getBbox().contains(pos) && (!onlyActive || _channels[i]->_sprite->isFocusable()))
- return i;
+ if (_channels[i]->getBbox().contains(pos)) {
+ if (!firstActive || _channels[i]->_sprite->isFocusable())
+ return i;
+ else if (unfocusableSprite == 0)
+ unfocusableSprite = i;
+ }
- return 0;
+ return unfocusableSprite;
}
bool Score::checkSpriteIntersection(uint16 spriteId, Common::Point pos) {
diff --git a/engines/director/score.h b/engines/director/score.h
index ba73d13c6f..b8d872e94b 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -87,7 +87,7 @@ public:
int getCurrentLabelNumber();
int getNextLabelNumber(int referenceFrame);
- uint16 getSpriteIDFromPos(Common::Point pos, bool onlyActive = false);
+ uint16 getSpriteIDFromPos(Common::Point pos, bool firstActive = false);
bool checkSpriteIntersection(uint16 spriteId, Common::Point pos);
Common::List<Channel *> getSpriteIntersections(const Common::Rect &r);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 1527625428..ad97c56d19 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -99,7 +99,7 @@ bool Sprite::isFocusable() {
}
bool Sprite::shouldHilite() {
- if ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte))
+ if (isFocusable() && ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte)))
if (g_director->getVersion() < 4 && !_moveable)
if (g_director->getCurrentMovie()->getScriptContext(kScoreScript, _scriptId) ||
g_director->getCurrentMovie()->getScriptContext(kCastScript, _castId))
Commit: d5539a66e18c03268bc3b91fce55511377f62ca3
https://github.com/scummvm/scummvm/commit/d5539a66e18c03268bc3b91fce55511377f62ca3
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-13T17:32:54-04:00
Commit Message:
DIRECTOR: Don't run setClean on empty channels
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 7894194182..6d600280d8 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -409,15 +409,16 @@ void Score::renderSprites(uint16 frameId, RenderMode mode) {
Sprite *currentSprite = channel->_sprite;
Sprite *nextSprite = _frames[frameId]->_sprites[i];
- bool needsUpdate = channel->isDirty(nextSprite) || mode == kRenderForceUpdate;
+ if (channel->isDirty(nextSprite) || mode == kRenderForceUpdate) {
+ if (!currentSprite->_trails)
+ _stage->addDirtyRect(channel->getBbox());
- if (needsUpdate && !currentSprite->_trails)
- _stage->addDirtyRect(channel->getBbox());
-
- channel->setClean(nextSprite, i);
-
- if (needsUpdate)
+ channel->setClean(nextSprite, i);
_stage->addDirtyRect(channel->getBbox());
+ } else if (!channel->_sprite->_puppet) {
+ // Updating scripts, etc. does not require a full re-render
+ channel->_sprite->_scriptId = nextSprite->_scriptId;
+ }
}
}
More information about the Scummvm-git-logs
mailing list