[Scummvm-git-logs] scummvm master -> 8d251696059e28a51fd4941e973f07fb3566c2c8
npjg
nathanael.gentrydb8 at gmail.com
Thu Jun 18 22:12:39 UTC 2020
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:
4fdba316fc DIRECTOR: LINGO: Fetch cast IDs in b_cast
8d25169605 DIRECTOR: Implement rudimentary constraint of sprite
Commit: 4fdba316fc6214ae92267fad1b2ef432831e76e6
https://github.com/scummvm/scummvm/commit/4fdba316fc6214ae92267fad1b2ef432831e76e6
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-18T18:12:32-04:00
Commit Message:
DIRECTOR: LINGO: Fetch cast IDs in b_cast
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 5dd44ab790..666d93a651 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2142,9 +2142,7 @@ void LB::b_version(int nargs) {
void LB::b_cast(int nargs) {
Datum d = g_lingo->pop();
- warning("STUB: b_cast");
-
- Datum res(0);
+ Datum res(g_lingo->castIdFetch(d));
res.type = REFERENCE;
g_lingo->push(res);
}
Commit: 8d251696059e28a51fd4941e973f07fb3566c2c8
https://github.com/scummvm/scummvm/commit/8d251696059e28a51fd4941e973f07fb3566c2c8
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-18T18:12:32-04:00
Commit Message:
DIRECTOR: Implement rudimentary constraint of sprite
Changed paths:
engines/director/lingo/lingo-the.cpp
engines/director/score.cpp
engines/director/score.h
engines/director/sprite.cpp
engines/director/sprite.h
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 5f05bf8c30..74139f4e58 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -712,7 +712,7 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
d.u.i = sprite->_castId;
break;
case kTheConstraint:
- d.u.i = sprite->_constraint;
+ d.u.i = channel->_constraint;
break;
case kTheEditableText:
d.u.i = sprite->_cast ? sprite->_cast->isEditable() : 0;
@@ -831,7 +831,15 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
sprite->setCast(d.asInt());
break;
case kTheConstraint:
- sprite->_constraint = d.asInt();
+ if (d.type == REFERENCE) {
+ // Reference: Cast ID
+ // Find the first channel that uses this cast.
+ for (uint i = 0; i < score->_channels.size(); i++)
+ if (score->_channels[i]->_sprite->_castId == d.u.i)
+ d.u.i = i;
+ }
+
+ channel->_constraint = d.u.i;
break;
case kTheEditableText:
sprite->_cast ? sprite->_cast->setEditable(d.asInt()) : false;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 808ea0361a..b843c4b314 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -65,7 +65,16 @@ void Channel::updateLocation() {
}
void Channel::addDelta(Common::Point pos) {
- // This method is for easily implementing constraint of sprite
+ if (_sprite->_moveable && _constraint > 0) {
+ Common::Rect constraintBbox = g_director->getCurrentScore()->_channels[_constraint]->getBbox();
+
+ Common::Rect currentBbox = getBbox();
+ currentBbox.translate(pos.x, pos.y);
+
+ // TODO: Snap to the nearest point on the rectangle.
+ if (constraintBbox.findIntersectingRect(currentBbox) != currentBbox)
+ return;
+ }
_delta += pos;
}
diff --git a/engines/director/score.h b/engines/director/score.h
index 0c3c5258e4..3c950cf545 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -90,6 +90,7 @@ struct Channel {
Sprite *_sprite;
bool _visible;
+ uint _constraint;
Common::Point _currentPoint;
Common::Point _delta;
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index a06d225b9e..c7b1211ab9 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -53,7 +53,6 @@ Sprite::Sprite() {
_dirty = false;
_width = 0;
_height = 0;
- _constraint = 0;
_moveable = false;
_editable = false;
_puppet = false;
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index e49fd67420..f6b9373f6c 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -95,9 +95,6 @@ public:
Common::Point _startPoint;
int16 _width;
int16 _height;
- // TODO: default constraint = 0, if turned on, sprite is constrainted to the bounding rect
- // As i know, constrainted != 0 only if sprite moveable
- byte _constraint;
bool _moveable;
bool _editable;
bool _puppet;
More information about the Scummvm-git-logs
mailing list