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

sev- noreply at scummvm.org
Sat Mar 8 22:16:53 UTC 2025


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:
f597b28207 DIRECTOR: More work on movies as cast members


Commit: f597b282070b9b622eaa3f8260f9bbd9feaae7a1
    https://github.com/scummvm/scummvm/commit/f597b282070b9b622eaa3f8260f9bbd9feaae7a1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-08T23:16:24+01:00

Commit Message:
DIRECTOR: More work on movies as cast members

Changed paths:
    engines/director/castmember/filmloop.h
    engines/director/castmember/movie.cpp
    engines/director/castmember/movie.h


diff --git a/engines/director/castmember/filmloop.h b/engines/director/castmember/filmloop.h
index 3f6c6c98ebc..1e291ae9d5e 100644
--- a/engines/director/castmember/filmloop.h
+++ b/engines/director/castmember/filmloop.h
@@ -41,7 +41,7 @@ public:
 	bool isModified() override;
 	//Graphics::MacWidget *createWidget(Common::Rect &bbox, Channel *channel, SpriteType spriteType) override;
 
-	Common::Array<Channel> *getSubChannels(Common::Rect &bbox, Channel *channel);
+	virtual Common::Array<Channel> *getSubChannels(Common::Rect &bbox, Channel *channel);
 
 	void loadFilmLoopDataD2(Common::SeekableReadStreamEndian &stream);
 	void loadFilmLoopDataD4(Common::SeekableReadStreamEndian &stream);
diff --git a/engines/director/castmember/movie.cpp b/engines/director/castmember/movie.cpp
index cef9c0ba47e..4bbd43d93d4 100644
--- a/engines/director/castmember/movie.cpp
+++ b/engines/director/castmember/movie.cpp
@@ -50,6 +50,25 @@ MovieCastMember::MovieCastMember(Cast *cast, uint16 castId, MovieCastMember &sou
 	_enableScripts = source._enableScripts;
 }
 
+Common::Array<Channel> *MovieCastMember::getSubChannels(Common::Rect &bbox, Channel *channel) {
+	if (_needsReload) {
+		_loaded = false;
+		load();
+	}
+
+	return FilmLoopCastMember::getSubChannels(bbox, channel);
+}
+
+void MovieCastMember::load() {
+	if (_loaded)
+		return;
+
+	FilmLoopCastMember::load();
+
+	_loaded = true;
+	_needsReload = false;
+}
+
 bool MovieCastMember::hasField(int field) {
 	switch (field) {
 	case kTheCenter:
diff --git a/engines/director/castmember/movie.h b/engines/director/castmember/movie.h
index e2669a337c8..703d422d1f6 100644
--- a/engines/director/castmember/movie.h
+++ b/engines/director/castmember/movie.h
@@ -31,6 +31,9 @@ public:
 	MovieCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version);
 	MovieCastMember(Cast *cast, uint16 castId, MovieCastMember &source);
 
+	Common::Array<Channel> *getSubChannels(Common::Rect &bbox, Channel *channel) override;
+	void load() override;
+
 	bool hasField(int field) override;
 	Datum getField(int field) override;
 	bool setField(int field, const Datum &value) override;




More information about the Scummvm-git-logs mailing list