[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