[Scummvm-git-logs] scummvm master -> f1822511d5d59193f08217322c7e64d5fe43463e
sev-
sev at scummvm.org
Wed Apr 15 22:21:09 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:
d0c4fd90ad DIRECTOR: Give sprites a currentPoint
f1822511d5 DIRECTOR: LINGO: Implement moveableSprite of sprite
Commit: d0c4fd90ad6a6249e5df3dc1a60b57c076b1573b
https://github.com/scummvm/scummvm/commit/d0c4fd90ad6a6249e5df3dc1a60b57c076b1573b
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-04-16T00:21:05+02:00
Commit Message:
DIRECTOR: Give sprites a currentPoint
Rather than just a startPoint.
Changed paths:
engines/director/frame.cpp
engines/director/lingo/lingo-the.cpp
engines/director/sprite.h
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index ba612cb398..76ed1c90d2 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -293,6 +293,8 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
sprite._startPoint.y = stream->readUint16();
sprite._startPoint.x = stream->readUint16();
+ sprite._currentPoint = sprite._startPoint;
+
sprite._height = stream->readUint16();
sprite._width = stream->readUint16();
@@ -701,10 +703,10 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
// for outlined shapes, line thickness of 1 means invisible.
lineSize -= 1;
- Common::Rect shapeRect = Common::Rect(sp->_startPoint.x,
- sp->_startPoint.y,
- sp->_startPoint.x + sp->_width,
- sp->_startPoint.y + sp->_height);
+ Common::Rect shapeRect = Common::Rect(sp->_currentPoint.x,
+ sp->_currentPoint.y,
+ sp->_currentPoint.x + sp->_width,
+ sp->_currentPoint.y + sp->_height);
Graphics::ManagedSurface tmpSurface;
tmpSurface.create(shapeRect.width(), shapeRect.height(), Graphics::PixelFormat::createFormatCLUT8());
@@ -794,8 +796,8 @@ void Frame::renderButton(Graphics::ManagedSurface &surface, uint16 spriteId) {
uint32 rectLeft = button->_initialRect.left;
uint32 rectTop = button->_initialRect.top;
- int x = _sprites[spriteId]->_startPoint.x;
- int y = _sprites[spriteId]->_startPoint.y;
+ int x = _sprites[spriteId]->_currentPoint.x;
+ int y = _sprites[spriteId]->_currentPoint.y;
if (_vm->getVersion() > 3) {
x += rectLeft;
@@ -857,8 +859,8 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo
Score *score = _vm->getCurrentScore();
Sprite *sprite = _sprites[spriteId];
- int x = sprite->_startPoint.x; // +rectLeft;
- int y = sprite->_startPoint.y; // +rectTop;
+ int x = sprite->_currentPoint.x; // +rectLeft;
+ int y = sprite->_currentPoint.y; // +rectTop;
int height = textCast->_initialRect.height(); //_sprites[spriteId]->_height;
int width;
@@ -1048,8 +1050,8 @@ void Frame::renderBitmap(Graphics::ManagedSurface &surface, uint16 spriteId) {
int32 rectLeft = bc->_initialRect.left;
int32 rectTop = bc->_initialRect.top;
- int x = sprite->_startPoint.x - regX + rectLeft;
- int y = sprite->_startPoint.y - regY + rectTop;
+ int x = sprite->_currentPoint.x - regX + rectLeft;
+ int y = sprite->_currentPoint.y - regY + rectTop;
int height = sprite->_height;
int width = _vm->getVersion() > 4 ? bc->_initialRect.width() : sprite->_width;
Common::Rect drawRect(x, y, x + width, y + height);
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index f6f1d0e0d6..6bb7c15ca0 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -550,10 +550,10 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
d.u.i = sprite->_thickness & 0x3;
break;
case kTheLocH:
- d.u.i = sprite->_startPoint.x;
+ d.u.i = sprite->_currentPoint.x;
break;
case kTheLocV:
- d.u.i = sprite->_startPoint.y;
+ d.u.i = sprite->_currentPoint.y;
break;
case kTheMoveableSprite:
d.u.i = sprite->_moveable;
@@ -670,10 +670,10 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
sprite->_thickness = d.u.i;
break;
case kTheLocH:
- sprite->_startPoint.x = d.u.i;
+ sprite->_currentPoint.x = d.u.i;
break;
case kTheLocV:
- sprite->_startPoint.y = d.u.i;
+ sprite->_currentPoint.y = d.u.i;
break;
case kTheMoveableSprite:
sprite->_moveable = d.u.i;
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index fd6eba929a..3f79973656 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -83,6 +83,7 @@ public:
byte _thickness;
Common::Point _startPoint;
+ Common::Point _currentPoint;
uint16 _width;
uint16 _height;
// TODO: default constraint = 0, if turned on, sprite is constrainted to the bounding rect
Commit: f1822511d5d59193f08217322c7e64d5fe43463e
https://github.com/scummvm/scummvm/commit/f1822511d5d59193f08217322c7e64d5fe43463e
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-04-16T00:21:05+02:00
Commit Message:
DIRECTOR: LINGO: Implement moveableSprite of sprite
Changed paths:
engines/director/director.h
engines/director/events.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/director.h b/engines/director/director.h
index 1047801984..7a768782c7 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -128,6 +128,7 @@ public:
// events.cpp
void processEvents();
void setDraggedSprite(uint16 id);
+ void releaseDraggedSprite();
uint32 getMacTicks();
void waitForClick();
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index b9de63a623..5133cfc286 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -80,6 +80,19 @@ void DirectorEngine::processEvents() {
case Common::EVENT_MOUSEMOVE:
sc->_lastEventTime = g_director->getMacTicks();
sc->_lastRollTime = sc->_lastEventTime;
+
+ if (_draggingSprite) {
+ Sprite* draggedSprite = currentFrame->_sprites[_draggingSpriteId];
+ if (draggedSprite->_moveable) {
+ pos = g_system->getEventManager()->getMousePos();
+ Common::Point delta = pos - _draggingSpritePos;
+ draggedSprite->_currentPoint.x += delta.x;
+ draggedSprite->_currentPoint.y += delta.y;
+ _draggingSpritePos = pos;
+ } else {
+ releaseDraggedSprite();
+ }
+ }
break;
case Common::EVENT_LBUTTONDOWN:
@@ -97,9 +110,9 @@ void DirectorEngine::processEvents() {
debugC(3, kDebugEvents, "event: Button Down @(%d, %d), sprite id: %d", pos.x, pos.y, spriteId);
_lingo->processEvent(kEventMouseDown);
- if (currentFrame->_sprites[spriteId]->_moveable) {
- warning("Moveable");
- }
+ if (currentFrame->_sprites[spriteId]->_moveable)
+ g_director->setDraggedSprite(spriteId);
+
break;
case Common::EVENT_LBUTTONUP:
@@ -110,6 +123,7 @@ void DirectorEngine::processEvents() {
debugC(3, kDebugEvents, "event: Button Up @(%d, %d), sprite id: %d", pos.x, pos.y, spriteId);
sc->_mouseIsDown = false;
+ releaseDraggedSprite();
_lingo->processEvent(kEventMouseUp);
sc->_currentMouseDownSpriteId = 0;
@@ -158,8 +172,11 @@ void DirectorEngine::setDraggedSprite(uint16 id) {
_draggingSprite = true;
_draggingSpriteId = id;
_draggingSpritePos = g_system->getEventManager()->getMousePos();
+}
- warning("STUB: DirectorEngine::setDraggedSprite(%d)", id);
+void DirectorEngine::releaseDraggedSprite() {
+ _draggingSprite = false;
+ _draggingSpriteId = 0;
}
void DirectorEngine::waitForClick() {
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 9b8d34e17a..63693eda2a 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1445,10 +1445,7 @@ void LB::b_move(int nargs) {
void LB::b_moveableSprite(int nargs) {
Frame *frame = g_director->getCurrentScore()->_frames[g_director->getCurrentScore()->getCurrentFrame()];
- // Will have no effect
frame->_sprites[g_lingo->_currentEntityId]->_moveable = true;
-
- g_director->setDraggedSprite(frame->_sprites[g_lingo->_currentEntityId]->_castId);
}
void LB::b_pasteClipBoardInto(int nargs) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 6bb7c15ca0..79f4e5a3da 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -677,6 +677,8 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
break;
case kTheMoveableSprite:
sprite->_moveable = d.u.i;
+ if (!d.u.i)
+ sprite->_currentPoint = sprite->_startPoint;
break;
case kTheMovieRate:
sprite->_movieRate = d.u.i;
More information about the Scummvm-git-logs
mailing list