[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