DIRECTOR: Parse transition flags

This commit is contained in:
Dmitry Iskrich 2016-06-13 19:38:50 +03:00 committed by Eugene Sandulenko
parent 23b289f2f8
commit e51e28cf7e
2 changed files with 21 additions and 12 deletions

View File

@ -528,7 +528,8 @@ void Score::processEvents() {
}
Frame::Frame() {
_transFlags = 0;
_transDuration = 0;
_transArea = 0;
_transChunkSize = 0;
_tempo = 0;
@ -550,7 +551,8 @@ Frame::Frame() {
Frame::Frame(const Frame &frame) {
_actionId = frame._actionId;
_transFlags = frame._transFlags;
_transArea = frame._transArea;
_transDuration = frame._transDuration;
_transType = frame._transType;
_transChunkSize = frame._transChunkSize;
_tempo = frame._tempo;
@ -607,9 +609,15 @@ void Frame::readMainChannels(Common::SeekableReadStream &stream, uint16 offset,
_soundType1 = stream.readByte();
offset++;
break;
case kTransFlagsPosition:
_transFlags = stream.readByte();
case kTransFlagsPosition: {
uint8 transFlags = stream.readByte();
if (transFlags & 0x80)
_transArea = 1;
else
_transArea = 0;
_transDuration = transFlags & 0x7f;
offset++;
}
break;
case kTransChunkSizePosition:
_transChunkSize = stream.readByte();
@ -721,7 +729,7 @@ void Frame::prepareFrame(Archive &_movie, Graphics::ManagedSurface &surface, Gra
renderSprites(_movie, surface, movieRect, false);
renderSprites(_movie, trailSurface, movieRect, true);
if (_transType != 0)
playTranisition();
playTransition();
if (_sound1 != 0 || _sound2 != 0) {
playSoundChannel();
}
@ -733,8 +741,8 @@ void Frame::playSoundChannel() {
debug(0, "Sound1 %d", _sound1);
}
void Frame::playTranisition() {
warning("STUB: playTranisition(%d, %d, %d)", _transType, _transFlags, _transChunkSize);
void Frame::playTransition() {
warning("STUB: playTransition(%d, %d, %d)", _transType, _transDuration, _transChunkSize);
}
void Frame::renderSprites(Archive &_movie, Graphics::ManagedSurface &surface, Common::Rect movieRect, bool renderTrail) {

View File

@ -234,20 +234,20 @@ public:
~Frame();
Frame(const Frame &frame);
void readChannel(Common::SeekableReadStream &stream, uint16 offset, uint16 size);
void prepareFrame(Archive &_movie, Graphics::ManagedSurface &surface, Common::Rect movieRect);
void prepareFrame(Archive &_movie, Graphics::ManagedSurface &surface, Graphics::ManagedSurface &trailSurface, Common::Rect movieRect);
uint16 getSpriteIDFromPos(Common::Point pos);
private:
void playTranisition();
void playTransition();
void playSoundChannel();
void renderSprites(Archive &_movie, Graphics::ManagedSurface &surface, Common::Rect movieRect);
void renderTrailSprites(Archive &_movie, Graphics::ManagedSurface &surface, Common::Rect movieRect);
void renderSprites(Archive &_movie, Graphics::ManagedSurface &surface, Common::Rect movieRect, bool renderTrail);
void readSprite(Common::SeekableReadStream &stream, uint16 offset, uint16 size);
void readMainChannels(Common::SeekableReadStream &stream, uint16 offset, uint16 size);
void drawBackgndTransSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect);
void drawMatteSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect);
public:
uint8 _actionId;
uint8 _transFlags;
uint8 _transDuration;
uint8 _transArea; //1 - Whole Stage, 0 - Changing Area
uint8 _transChunkSize;
transitionType _transType;
uint8 _tempo;
@ -311,6 +311,7 @@ private:
uint16 _stageColor;
Archive *_movieArchive;
Graphics::ManagedSurface *_surface;
Graphics::ManagedSurface *_trailSurface;
Lingo *_lingo;
DirectorSound *_soundManager;
};