aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2019-12-27 23:09:57 +0100
committerEugene Sandulenko2019-12-27 23:10:38 +0100
commit25a268bf31ff27ddb9095c985134a8ccbcc65b38 (patch)
tree2c2bd3d26ae0958791f85077a157d8a1c4af6616
parenteb02162def9347d6e209bb52f00187b2109e1cb5 (diff)
downloadscummvm-rg350-25a268bf31ff27ddb9095c985134a8ccbcc65b38.tar.gz
scummvm-rg350-25a268bf31ff27ddb9095c985134a8ccbcc65b38.tar.bz2
scummvm-rg350-25a268bf31ff27ddb9095c985134a8ccbcc65b38.zip
DIRECTOR: Properly implement sprite pattern setting
-rw-r--r--engines/director/frame.cpp2
-rw-r--r--engines/director/lingo/lingo-the.cpp4
-rw-r--r--engines/director/sprite.cpp46
-rw-r--r--engines/director/sprite.h4
4 files changed, 51 insertions, 5 deletions
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 2fcb50f1f9..ccd82c63d5 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -674,7 +674,7 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
// No minus one on the pattern here! MacPlotData will do that for us!
//Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), 1, 1, sp->_backColor);
- Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), sp->_pattern, sp->_lineSize + 1, sp->_backColor);
+ Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), sp->getPattern(), sp->_lineSize + 1, sp->_backColor);
Common::Rect fillRect(shapeRect.width(), shapeRect.height());
switch (sp->_spriteType) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 56dc3fe918..8ae7777c0b 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -418,7 +418,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
sprite->_editableText = *d.toString();
break;
case kThePattern:
- sprite->_pattern = d.u.i;
+ sprite->setPattern(d.u.i);
break;
default:
warning("Lingo::setTheSprite(): Unprocessed setting field %d of sprite", field);
@@ -623,7 +623,7 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
d.u.s = &sprite->_editableText;
break;
case kThePattern:
- d.u.i = sprite->_pattern;
+ d.u.i = sprite->getPattern();
break;
default:
warning("Lingo::getTheSprite(): Unprocessed getting field %d of sprite", field);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 0148c6665e..da86c0cf01 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -39,7 +39,6 @@ Sprite::Sprite() {
_castId = 0;
_backColor = 255;
_foreColor = 0;
- _pattern = 0;
_left = 0;
_right = 0;
_top = 0;
@@ -121,4 +120,49 @@ Sprite::~Sprite() {
delete _buttonCast;
}
+uint16 Sprite::getPattern() {
+ switch (_spriteType) {
+ case kRectangleSprite:
+ case kRoundedRectangleSprite:
+ case kOvalSprite:
+ case kLineTopBottomSprite:
+ case kLineBottomTopSprite:
+ case kOutlinedRectangleSprite:
+ case kOutlinedRoundedRectangleSprite:
+ case kOutlinedOvalSprite:
+ return _castId;
+
+ case kCastMemberSprite:
+ // TODO. Check type being shape, and return its pattern
+ warning("Sprite::getPattern(): kCastMemberSprite");
+ return 0;
+
+ default:
+ return 0;
+ }
+}
+
+void Sprite::setPattern(uint16 pattern) {
+ switch (_spriteType) {
+ case kRectangleSprite:
+ case kRoundedRectangleSprite:
+ case kOvalSprite:
+ case kLineTopBottomSprite:
+ case kLineBottomTopSprite:
+ case kOutlinedRectangleSprite:
+ case kOutlinedRoundedRectangleSprite:
+ case kOutlinedOvalSprite:
+ _castId = pattern;
+
+ case kCastMemberSprite:
+ // TODO
+ warning("Sprite::setPattern(): kCastMemberSprite");
+ return;
+
+ default:
+ return;
+ }
+}
+
+
} // End of namespace Director
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index f918a3a39e..07cbc54a08 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -63,6 +63,9 @@ public:
Sprite(const Sprite &sprite);
~Sprite();
+ uint16 getPattern();
+ void setPattern(uint16 pattern);
+
uint16 _scriptId;
byte _flags2; // x40 editable, 0x80 moveable
byte _unk2;
@@ -91,7 +94,6 @@ public:
byte _moveable;
byte _backColor;
byte _foreColor;
- uint16 _pattern;
uint16 _left;
uint16 _right;