[Scummvm-git-logs] scummvm master -> 42046169bb183cc514772b07617592311dedab0e
ysj1173886760
42030331+ysj1173886760 at users.noreply.github.com
Mon Jul 26 08:33:18 UTC 2021
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
6ddac2e948 DIRECTOR: implement kTheLoc of sprite.
42046169bb DIRECTOR: amend the implementation of asString for point type datum.
Commit: 6ddac2e9485dc488b1074d7d2af4864870df8ea6
https://github.com/scummvm/scummvm/commit/6ddac2e9485dc488b1074d7d2af4864870df8ea6
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-26T16:31:27+08:00
Commit Message:
DIRECTOR: implement kTheLoc of sprite.
Changed paths:
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 7961d7e5af..088df38f03 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1187,7 +1187,10 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
d.u.i = sprite->_thickness & 0x3;
break;
case kTheLoc:
- warning("STUB: Lingo::getTheSprite(): Unprocessed getting field \"%s\" of sprite", field2str(field));
+ d.type = POINT;
+ d.u.farr = new DatumArray;
+ d.u.farr->push_back(channel->_currentPoint.x);
+ d.u.farr->push_back(channel->_currentPoint.y);
break;
case kTheLocH:
d.u.i = channel->_currentPoint.x;
@@ -1401,7 +1404,13 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
}
break;
case kTheLoc:
- warning("STUB: Lingo::setTheSprite(): Unprocessed setting field \"%s\" of sprite", field2str(field));
+ if (channel->_currentPoint.x != d.asPoint().x || channel->_currentPoint.y != d.asPoint().y) {
+ g_director->getCurrentMovie()->getWindow()->addDirtyRect(channel->getBbox());
+ channel->_dirty = true;
+ }
+
+ channel->_currentPoint.x = d.asPoint().x;
+ channel->_currentPoint.y = d.asPoint().y;
break;
case kTheLocH:
if (d.asInt() != channel->_currentPoint.x) {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 649920429d..e3bee6f3ad 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -903,6 +903,15 @@ CastMemberID Datum::asMemberID() const {
return g_lingo->resolveCastMember(*this, 0);
}
+Common::Point Datum::asPoint() const {
+ if (type != POINT) {
+ warning("Incorrect operation asPoint() for type: %s", type2str());
+ return Common::Point(0, 0);
+ }
+
+ return Common::Point(u.farr->operator[](0).asInt(), u.farr->operator[](1).asInt());
+}
+
bool Datum::isRef() const {
return (isVarRef() || isCastRef() || type == CHUNKREF);
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 670b9005c4..86b828c952 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -145,6 +145,7 @@ struct Datum { /* interpreter stack type */
int asInt() const;
Common::String asString(bool printonly = false) const;
CastMemberID asMemberID() const;
+ Common::Point asPoint() const;
bool isRef() const;
bool isVarRef() const;
Commit: 42046169bb183cc514772b07617592311dedab0e
https://github.com/scummvm/scummvm/commit/42046169bb183cc514772b07617592311dedab0e
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-26T16:33:05+08:00
Commit Message:
DIRECTOR: amend the implementation of asString for point type datum.
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index e3bee6f3ad..b88203b6af 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -850,9 +850,6 @@ Common::String Datum::asString(bool printonly) const {
s += Common::String::format("chunk: %s %d to %d of %s (%s)", chunkType.c_str(), u.cref->startChunk, u.cref->endChunk, src.c_str(), chunk.c_str());
}
break;
- case POINT:
- s = "point:";
- // fallthrough
case ARRAY:
s += "[";
@@ -878,6 +875,16 @@ Common::String Datum::asString(bool printonly) const {
}
s += "]";
+ break;
+ case POINT:
+ s = "point(";
+ for (uint i = 0; i < u.farr->size(); i++) {
+ if (i > 0)
+ s += ", ";
+ s += Common::String::format("%d", u.farr->operator[](i).asInt());
+ }
+ s += ")";
+
break;
case RECT:
s = "rect(";
More information about the Scummvm-git-logs
mailing list