[Scummvm-git-logs] scummvm master -> 6493e0d76387191697c2a8ef1c1167fc0752b545

djsrv dservilla at gmail.com
Fri Jul 24 15:04:37 UTC 2020


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:
fbf42314bb DIRECTOR: Add pointers to frame, sprite parents
eae6ab03ec DIRECTOR: Use parent movie in sprite methods
6493e0d763 DIRECTOR: Don't switch movie in processEvent


Commit: fbf42314bbd2ac9da81316a9d5c7d2d9ef024364
    https://github.com/scummvm/scummvm/commit/fbf42314bbd2ac9da81316a9d5c7d2d9ef024364
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-24T11:03:35-04:00

Commit Message:
DIRECTOR: Add pointers to frame, sprite parents

Changed paths:
    engines/director/frame.cpp
    engines/director/frame.h
    engines/director/score.cpp
    engines/director/score.h
    engines/director/sprite.cpp
    engines/director/sprite.h


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index c73812b7df..ae9f815da3 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -24,13 +24,16 @@
 
 #include "director/director.h"
 #include "director/frame.h"
+#include "director/score.h"
+#include "director/movie.h"
 #include "director/sprite.h"
 #include "director/util.h"
 
 namespace Director {
 
-Frame::Frame(DirectorEngine *vm, int numChannels) {
-	_vm = vm;
+Frame::Frame(Score *score, int numChannels) {
+	_score = score;
+	_vm = score->getMovie()->getVM();;
 	_transDuration = 0;
 	_transType = kTransNone;
 	_transArea = 0;
@@ -59,7 +62,7 @@ Frame::Frame(DirectorEngine *vm, int numChannels) {
 	_sprites.resize(_numChannels + 1);
 
 	for (uint16 i = 0; i < _sprites.size(); i++) {
-		Sprite *sp = new Sprite();
+		Sprite *sp = new Sprite(this);
 		_sprites[i] = sp;
 	}
 }
diff --git a/engines/director/frame.h b/engines/director/frame.h
index 9a3008a66e..b77bb5e387 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -67,9 +67,12 @@ struct FrameEntity {
 
 class Frame {
 public:
-	Frame(DirectorEngine *vm, int numChannels);
+	Frame(Score *score, int numChannels);
 	Frame(const Frame &frame);
 	~Frame();
+
+	Score *getScore() const { return _score; }
+
 	void readChannels(Common::ReadStreamEndian *stream);
 	void readChannel(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size);
 
@@ -109,6 +112,7 @@ public:
 	uint8 _skipFrameFlag;
 	uint8 _blend;
 	Common::Array<Sprite *> _sprites;
+	Score *_score;
 	DirectorEngine *_vm;
 };
 
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 643a9f0356..a18a5143e6 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -625,7 +625,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
 	uint16 channelSize;
 	uint16 channelOffset;
 
-	Frame *initial = new Frame(_vm, _numChannelsDisplayed);
+	Frame *initial = new Frame(this, _numChannelsDisplayed);
 	// Push a frame at frame#0 position.
 	// This makes all indexing simpler
 	_frames.push_back(initial);
@@ -642,7 +642,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
 		debugC(8, kDebugLoading, "++++++++++ score frame %d (frameSize %d) size %d", _frames.size(), frameSize, size);
 
 		if (frameSize > 0) {
-			Frame *frame = new Frame(_vm, _numChannelsDisplayed);
+			Frame *frame = new Frame(this, _numChannelsDisplayed);
 			size -= frameSize;
 			frameSize -= 2;
 
diff --git a/engines/director/score.h b/engines/director/score.h
index af1975f876..9617146bb8 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -65,6 +65,8 @@ public:
 	Score(Movie *movie);
 	~Score();
 
+	Movie *getMovie() const { return _movie; }
+
 	void loadFrames(Common::SeekableSubReadStreamEndian &stream);
 	void loadLabels(Common::SeekableSubReadStreamEndian &stream);
 	void loadActions(Common::SeekableSubReadStreamEndian &stream);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index ad97c56d19..7a248550ed 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -24,13 +24,19 @@
 
 #include "director/director.h"
 #include "director/castmember.h"
+#include "director/frame.h"
 #include "director/movie.h"
+#include "director/score.h"
 #include "director/sprite.h"
 #include "director/lingo/lingo.h"
 
 namespace Director {
 
-Sprite::Sprite() {
+Sprite::Sprite(Frame *frame) {
+	_frame = frame;
+	_score = _frame->getScore();
+	_movie = _score->getMovie();
+
 	_scriptId = 0;
 	_scriptCastIndex = 0;
 	_colorcode = 0;
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 340a6c4a23..eb2fc3cab9 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -25,6 +25,7 @@
 
 namespace Director {
 
+class Frame;
 class BitmapCastMember;
 class ShapeCastMember;
 class TextCastMember;
@@ -58,9 +59,12 @@ enum MainChannelsPosition {
 
 class Sprite {
 public:
-	Sprite();
+	Sprite(Frame *frame);
 	~Sprite();
 
+	Frame *getFrame() const { return _frame; }
+	Score *getScore() const { return _score; }
+
 	void updateCast();
 
 	bool isFocusable();
@@ -72,6 +76,10 @@ public:
 	void setCast(uint16 castid);
 	bool isQDShape();
 
+	Frame *_frame;
+	Score *_score;
+	Movie *_movie;
+
 	uint16 _scriptId;
 	uint16 _scriptCastIndex;
 	byte _colorcode;  // x40 editable, 0x80 moveable


Commit: eae6ab03ec1b0bb404b010c0b7eb4ae69a1a43c0
    https://github.com/scummvm/scummvm/commit/eae6ab03ec1b0bb404b010c0b7eb4ae69a1a43c0
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-24T11:03:35-04:00

Commit Message:
DIRECTOR: Use parent movie in sprite methods

Changed paths:
    engines/director/sprite.cpp


diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 7a248550ed..4dbbb839ff 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -107,8 +107,8 @@ bool Sprite::isFocusable() {
 bool Sprite::shouldHilite() {
 	if (isFocusable() && ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte)))
 		if (g_director->getVersion() < 4 && !_moveable)
-			if (g_director->getCurrentMovie()->getScriptContext(kScoreScript, _scriptId) ||
-					g_director->getCurrentMovie()->getScriptContext(kCastScript, _castId))
+			if (_movie->getScriptContext(kScoreScript, _scriptId) ||
+					_movie->getScriptContext(kCastScript, _castId))
 				return true;
 
 	return false;
@@ -149,7 +149,7 @@ void Sprite::setPattern(uint16 pattern) {
 }
 
 void Sprite::setCast(uint16 castId) {
-	CastMember *member = g_director->getCurrentMovie()->getCastMember(castId);
+	CastMember *member = _movie->getCastMember(castId);
 	_castId = castId;
 
 	if (castId == 0)


Commit: 6493e0d76387191697c2a8ef1c1167fc0752b545
    https://github.com/scummvm/scummvm/commit/6493e0d76387191697c2a8ef1c1167fc0752b545
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-24T11:03:35-04:00

Commit Message:
DIRECTOR: Don't switch movie in processEvent

Changed paths:
    engines/director/events.cpp


diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index f5ae2efeda..e9177bb3a8 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -94,8 +94,6 @@ bool Stage::processEvent(Common::Event &event) {
 }
 
 bool Movie::processEvent(Common::Event &event) {
-	_vm->setCurrentMovie(this);
-
 	Score *sc = getScore();
 	if (sc->getCurrentFrame() >= sc->_frames.size()) {
 		warning("processEvents: request to access frame %d of %d", sc->getCurrentFrame(), sc->_frames.size() - 1);




More information about the Scummvm-git-logs mailing list