[Scummvm-git-logs] scummvm master -> c54ccf480b73b416c96c3985b37c20173efcdb06
djsrv
noreply at scummvm.org
Mon Jun 27 03:53:12 UTC 2022
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f638e61a04 DIRECTOR: LINGO: Implement map builtin STUB
42dfdd9f35 DIRECTOR: LINGO: Implement constraint in Channel::getBbox(), Fix getActive() to return true for movable sprites
c54ccf480b DIRECTOR: LINGO: Add type checks and support for POINT, RECT and ARRAY DatumTypes in b_map
Commit: f638e61a04588d2783fc3056266f020f297420dc
https://github.com/scummvm/scummvm/commit/f638e61a04588d2783fc3056266f020f297420dc
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-06-26T22:53:08-05:00
Commit Message:
DIRECTOR: LINGO: Implement map builtin STUB
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index a17d7d85781..485376e8474 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2576,11 +2576,22 @@ void LB::b_inside(int nargs) {
}
void LB::b_map(int nargs) {
- g_lingo->printSTUBWithArglist("b_map", nargs);
+ Datum toRect = g_lingo->pop();
+ Datum fromRect = g_lingo->pop();
+ Datum srcPnt = g_lingo->pop();
- g_lingo->dropStack(nargs);
+ int toWidth = toRect.u.farr->arr[2].u.i - toRect.u.farr->arr[0].u.i;
+ int toHeight = toRect.u.farr->arr[3].u.i - toRect.u.farr->arr[1].u.i;
+ int fromWidth = fromRect.u.farr->arr[2].u.i - fromRect.u.farr->arr[0].u.i;
+ int fromHeight = fromRect.u.farr->arr[3].u.i - fromRect.u.farr->arr[1].u.i;
- g_lingo->push(Datum(0));
+ Datum d;
+ d.type = POINT;
+ d.u.farr = new FArray();
+ d.u.farr->arr.push_back(-((fromRect.u.farr->arr[2].u.i - srcPnt.u.farr->arr[0].u.i) * (toWidth / fromWidth)) + (fromRect.u.farr->arr[0].u.i) + toRect.u.farr->arr[0].u.i);
+ d.u.farr->arr.push_back(-((fromRect.u.farr->arr[3].u.i - srcPnt.u.farr->arr[1].u.i) * (toHeight / fromHeight)) + (fromRect.u.farr->arr[3].u.i));
+
+ g_lingo->push(d);
}
void LB::b_offsetRect(int nargs) {
Commit: 42dfdd9f35564d2e084b7b0be45be2ef692a2c8e
https://github.com/scummvm/scummvm/commit/42dfdd9f35564d2e084b7b0be45be2ef692a2c8e
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-06-26T22:53:08-05:00
Commit Message:
DIRECTOR: LINGO: Implement constraint in Channel::getBbox(), Fix getActive() to return true for movable sprites
Changed paths:
engines/director/channel.cpp
engines/director/sprite.cpp
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index c95516cde7a..83d5817fc7e 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -334,7 +334,20 @@ bool Channel::isVideoDirectToStage() {
Common::Rect Channel::getBbox(bool unstretched) {
Common::Rect result(unstretched ? _sprite->_width : _width,
- unstretched ? _sprite->_height : _height);
+ unstretched ? _sprite->_height : _height);
+ result.moveTo(getPosition());
+
+ if (_constraint) {
+ Common::Rect constraintBbox = g_director->getCurrentMovie()->getScore()->_channels[_constraint]->getBbox();
+ if (result.top < constraintBbox.top)
+ _currentPoint.y = constraintBbox.top;
+ if (result.left < constraintBbox.left)
+ _currentPoint.x = constraintBbox.left;
+ if (result.top > constraintBbox.bottom)
+ _currentPoint.y = constraintBbox.bottom;
+ if (result.left > constraintBbox.right)
+ _currentPoint.x = constraintBbox.right;
+ }
result.moveTo(getPosition());
return result;
@@ -663,14 +676,14 @@ void Channel::addDelta(Common::Point pos) {
if (!constraintBbox.contains(currentBbox)) {
if (currentBbox.top < constraintBbox.top) {
pos.y += constraintBbox.top - currentBbox.top;
- } else if (currentBbox.bottom > constraintBbox.bottom) {
- pos.y += constraintBbox.bottom - currentBbox.bottom;
+ } else if (currentBbox.top > constraintBbox.bottom) {
+ pos.y += constraintBbox.bottom;
}
if (currentBbox.left < constraintBbox.left) {
pos.x += constraintBbox.left - currentBbox.left;
- } else if (currentBbox.right > constraintBbox.right) {
- pos.x += constraintBbox.right - currentBbox.right;
+ } else if (currentBbox.left > constraintBbox.right) {
+ pos.x += constraintBbox.right;
}
}
}
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 0cfa44851ed..b4830509b33 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -350,6 +350,9 @@ bool Sprite::respondsToMouse() {
}
bool Sprite::isActive() {
+ if (_moveable)
+ return true;
+
if (_cast && _cast->_type == kCastButton)
return true;
Commit: c54ccf480b73b416c96c3985b37c20173efcdb06
https://github.com/scummvm/scummvm/commit/c54ccf480b73b416c96c3985b37c20173efcdb06
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-06-26T22:53:08-05:00
Commit Message:
DIRECTOR: LINGO: Add type checks and support for POINT, RECT and ARRAY DatumTypes in b_map
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 485376e8474..810767f56a6 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2578,18 +2578,38 @@ void LB::b_inside(int nargs) {
void LB::b_map(int nargs) {
Datum toRect = g_lingo->pop();
Datum fromRect = g_lingo->pop();
- Datum srcPnt = g_lingo->pop();
+ Datum srcArr = g_lingo->pop();
+
+ if (!(toRect.type == RECT || (toRect.type == ARRAY && toRect.u.farr->arr.size() == 4)) ||
+ !(fromRect.type == RECT || (fromRect.type == ARRAY && fromRect.u.farr->arr.size() == 4))) {
+ warning("LB::b_map(): Invalid Datum Type of source and destination Rects");
+ return;
+ }
int toWidth = toRect.u.farr->arr[2].u.i - toRect.u.farr->arr[0].u.i;
int toHeight = toRect.u.farr->arr[3].u.i - toRect.u.farr->arr[1].u.i;
int fromWidth = fromRect.u.farr->arr[2].u.i - fromRect.u.farr->arr[0].u.i;
int fromHeight = fromRect.u.farr->arr[3].u.i - fromRect.u.farr->arr[1].u.i;
+ if (!(srcArr.type == POINT ||
+ srcArr.type == RECT ||
+ (srcArr.type == ARRAY && (srcArr.u.farr->arr.size() == 2 || srcArr.u.farr->arr.size() == 4)))) {
+ warning("LB::b_map(): Invalid Datum type of input Point / Rect");
+ return;
+ }
+
Datum d;
d.type = POINT;
d.u.farr = new FArray();
- d.u.farr->arr.push_back(-((fromRect.u.farr->arr[2].u.i - srcPnt.u.farr->arr[0].u.i) * (toWidth / fromWidth)) + (fromRect.u.farr->arr[0].u.i) + toRect.u.farr->arr[0].u.i);
- d.u.farr->arr.push_back(-((fromRect.u.farr->arr[3].u.i - srcPnt.u.farr->arr[1].u.i) * (toHeight / fromHeight)) + (fromRect.u.farr->arr[3].u.i));
+ d.u.farr->arr.push_back((srcArr.u.farr->arr[0].u.i - fromRect.u.farr->arr[0].u.i) * (toWidth / fromWidth) + toRect.u.farr->arr[0].u.i);
+ d.u.farr->arr.push_back((srcArr.u.farr->arr[1].u.i - fromRect.u.farr->arr[1].u.i) * (toHeight / fromHeight) + toRect.u.farr->arr[1].u.i);
+
+ if (srcArr.type == RECT ||
+ (srcArr.type == ARRAY && srcArr.u.farr->arr.size() == 4)) {
+ d.type = RECT;
+ d.u.farr->arr.push_back((srcArr.u.farr->arr[2].u.i - srcArr.u.farr->arr[0].u.i) * (toWidth / fromWidth) + d.u.farr->arr[0].u.i);
+ d.u.farr->arr.push_back((srcArr.u.farr->arr[3].u.i - srcArr.u.farr->arr[1].u.i) * (toWidth / fromWidth) + d.u.farr->arr[1].u.i);
+ }
g_lingo->push(d);
}
More information about the Scummvm-git-logs
mailing list