[Scummvm-git-logs] scummvm master -> b96dabbaac643ae523e97ff5ff798c12a57c28fb

moralrecordings code at moral.net.au
Tue May 19 16:57:03 UTC 2020


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b96dabbaac DIRECTOR: Move Sprite Cast updates into a class method


Commit: b96dabbaac643ae523e97ff5ff798c12a57c28fb
    https://github.com/scummvm/scummvm/commit/b96dabbaac643ae523e97ff5ff798c12a57c28fb
Author: Scott Percival (code at moral.net.au)
Date: 2020-05-20T00:56:24+08:00

Commit Message:
DIRECTOR: Move Sprite Cast updates into a class method

Changed paths:
    engines/director/lingo/lingo-the.cpp
    engines/director/score.cpp
    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 0383d7057d..8e1d4008ec 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -687,10 +687,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		sprite->_blend = d.asInt();
 		break;
 	case kTheCastNum:
-		if (_vm->getCastMember(d.asInt())) {
-			sprite->_cast = _vm->getCastMember(d.asInt());
-			sprite->_castId = d.asInt();
-		}
+		sprite->setCast(d.asInt());
 		break;
 	case kTheConstraint:
 		sprite->_constraint = d.asInt();
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 17d5a5cfd2..e5a3f4faa5 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -758,71 +758,11 @@ void Score::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
 }
 
 void Score::setSpriteCasts() {
-	// Set cast pointers to sprites
+	// Update sprite cache of cast pointers/info
 	for (uint16 i = 0; i < _frames.size(); i++) {
 		for (uint16 j = 0; j < _frames[i]->_sprites.size(); j++) {
-			uint16 castId = _frames[i]->_sprites[j]->_castId;
-
-			if (castId == 0)
-				continue;
-
-			Cast *member = _vm->getCastMember(castId);
-			if (member) {
-				_frames[i]->_sprites[j]->_cast = member;
-
-				CastType castType = kCastTypeNull;
-				Sprite *sprite = _frames[i]->_sprites[j];
-
-				if (_vm->getVersion() < 4) {
-					debugC(1, kDebugImages, "Score::setSpriteCasts(): Frame: %d Channel: %d type: %d", i, j, sprite->_spriteType);
-					switch (sprite->_spriteType) {
-					case kBitmapSprite:
-						castType = kCastBitmap;
-						break;
-					case kRectangleSprite:
-					case kRoundedRectangleSprite:
-					case kOvalSprite:
-					case kLineTopBottomSprite:
-					case kLineBottomTopSprite:
-					case kOutlinedRectangleSprite:
-					case kOutlinedRoundedRectangleSprite:
-					case kOutlinedOvalSprite:
-					case kCastMemberSprite:
-						if (sprite->_cast != nullptr) {
-							switch (sprite->_cast->_type) {
-							case kCastButton:
-								castType = kCastButton;
-								break;
-							default:
-								castType = kCastShape;
-								break;
-							}
-						} else {
-							castType = kCastShape;
-						}
-						break;
-					case kTextSprite:
-						castType = kCastText;
-						break;
-					case kButtonSprite:
-					case kCheckboxSprite:
-					case kRadioButtonSprite:
-						castType = kCastButton;
-						break;
-					default:
-						warning("Score::setSpriteCasts(): Unhandled sprite type %d", sprite->_spriteType);
-						break;
-					}
-				} else {
-					member = _vm->getCastMember(sprite->_castId);
-					if (!member) {
-						debugC(1, kDebugImages, "Score::setSpriteCasts(): Cast id %d not found", sprite->_castId);
-					} else {
-						castType = member->_type;
-					}
-				}
-				sprite->_castType = castType;
-			}
+			_frames[i]->_sprites[j]->setCast(_frames[i]->_sprites[j]->_castId);
+			debugC(1, kDebugImages, "Score::setSpriteCasts(): Frame: %d Channel: %d type: %d", i, j, _frames[i]->_sprites[j]->_spriteType);
 		}
 	}
 }
@@ -1990,7 +1930,7 @@ void Score::renderShape(uint16 spriteId) {
 
 	if (_vm->getVersion() >= 3 && spriteType == kCastMemberSprite) {
 		if (!sp->_cast) {
-			warning("Frame::renderShape(): kCastMemberSprite has no cast defined");
+			warning("Score::renderShape(): kCastMemberSprite has no cast defined");
 			return;
 		}
 		switch (sp->_cast->_type) {
@@ -2026,7 +1966,7 @@ void Score::renderShape(uint16 spriteId) {
 			}
 			break;
 		default:
-			warning("Frame::renderShape(): Unhandled cast type: %d", sp->_cast->_type);
+			warning("Score::renderShape(): Unhandled cast type: %d", sp->_cast->_type);
 			break;
 		}
 	}
@@ -2174,7 +2114,7 @@ void Score::renderButton(uint16 spriteId) {
 void Score::renderText(uint16 spriteId, Common::Rect *textRect) {
 	TextCast *textCast = (TextCast*)_sprites[spriteId]->_cast;
 	if (textCast == nullptr) {
-		warning("Frame::renderText(): TextCast #%d is a nullptr", spriteId);
+		warning("Score::renderText(): TextCast #%d is a nullptr", spriteId);
 		return;
 	}
 
@@ -2194,7 +2134,7 @@ void Score::renderText(uint16 spriteId, Common::Rect *textRect) {
 	}
 
 	if (width == 0 || height == 0) {
-		warning("Frame::renderText(): Requested to draw on an empty surface: %d x %d", width, height);
+		warning("Score::renderText(): Requested to draw on an empty surface: %d x %d", width, height);
 		return;
 	}
 
@@ -2301,7 +2241,7 @@ void Score::renderText(uint16 spriteId, Common::Rect *textRect) {
 				y += 2;
 				break;
 			default:
-				warning("Frame::renderText(): Expected button but got unexpected button type: %d", buttonType);
+				warning("Score::renderText(): Expected button but got unexpected button type: %d", buttonType);
 				y += 2;
 				break;
 			}
@@ -2405,7 +2345,7 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 		drawReverseSprite(spriteSurface, drawRect, spriteId);
 		break;
 	default:
-		warning("Frame::inkBasedBlit(): Unhandled ink type %d", ink);
+		warning("Score::inkBasedBlit(): Unhandled ink type %d", ink);
 		_surface->blitFrom(spriteSurface, Common::Point(drawRect.left, drawRect.top));
 		break;
 	}
@@ -2530,7 +2470,7 @@ void Score::drawMatteSprite(const Graphics::Surface &sprite, Common::Rect &drawR
 	}
 
 	if (whiteColor == -1) {
-		debugC(1, kDebugImages, "Frame::drawMatteSprite(): No white color for Matte image");
+		debugC(1, kDebugImages, "Score::drawMatteSprite(): No white color for Matte image");
 
 		for (int yy = 0; yy < srcRect.height(); yy++) {
 			const byte *src = (const byte *)tmp.getBasePtr(srcRect.left, srcRect.top + yy);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index aecb8ccbe1..0f8b203f1e 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -117,5 +117,57 @@ void Sprite::setPattern(uint16 pattern) {
 	}
 }
 
+void Sprite::setCast(uint16 castId) {
+	Cast *member = g_director->getCastMember(castId);
+	if (member) {
+		_cast = member;
+		_castId = castId;
+		_castType = kCastTypeNull;
+
+		if (g_director->getVersion() < 4) {
+			switch (_spriteType) {
+			case kBitmapSprite:
+				_castType = kCastBitmap;
+				break;
+			case kRectangleSprite:
+			case kRoundedRectangleSprite:
+			case kOvalSprite:
+			case kLineTopBottomSprite:
+			case kLineBottomTopSprite:
+			case kOutlinedRectangleSprite:
+			case kOutlinedRoundedRectangleSprite:
+			case kOutlinedOvalSprite:
+			case kCastMemberSprite:
+				if (_cast != nullptr) {
+					switch (_cast->_type) {
+					case kCastButton:
+						_castType = kCastButton;
+						break;
+					default:
+						_castType = kCastShape;
+						break;
+					}
+				} else {
+					_castType = kCastShape;
+				}
+				break;
+			case kTextSprite:
+				_castType = kCastText;
+				break;
+			case kButtonSprite:
+			case kCheckboxSprite:
+			case kRadioButtonSprite:
+				_castType = kCastButton;
+				break;
+			default:
+				warning("Sprite::setCast(): Unhandled sprite type %d", _spriteType);
+				break;
+			}
+		} else {
+			_castType = member->_type;
+		}
+	}
+}
+
 
 } // End of namespace Director
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 844d175fa6..7a70feb7c4 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -65,6 +65,8 @@ public:
 	uint16 getPattern();
 	void setPattern(uint16 pattern);
 
+	void setCast(uint16 castid);
+
 	uint16 _scriptId;
 	uint16 _scriptCastIndex;
 	byte _colorcode;  // x40 editable, 0x80 moveable




More information about the Scummvm-git-logs mailing list