[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