[Scummvm-cvs-logs] SF.net SVN: scummvm:[35170] scummvm/trunk
cyx at users.sourceforge.net
cyx at users.sourceforge.net
Sat Nov 29 00:52:00 CET 2008
Revision: 35170
http://scummvm.svn.sourceforge.net/scummvm/?rev=35170&view=rev
Author: cyx
Date: 2008-11-28 23:51:59 +0000 (Fri, 28 Nov 2008)
Log Message:
-----------
added load/closeFile to Graphics::FlicPlayer (matching DXAPlayer class)
Modified Paths:
--------------
scummvm/trunk/engines/tucker/sequences.cpp
scummvm/trunk/engines/tucker/tucker.h
scummvm/trunk/graphics/flic_player.cpp
scummvm/trunk/graphics/flic_player.h
Modified: scummvm/trunk/engines/tucker/sequences.cpp
===================================================================
--- scummvm/trunk/engines/tucker/sequences.cpp 2008-11-28 11:56:08 UTC (rev 35169)
+++ scummvm/trunk/engines/tucker/sequences.cpp 2008-11-28 23:51:59 UTC (rev 35170)
@@ -482,7 +482,6 @@
_newSeq = false;
memset(_animationPalette, 0, sizeof(_animationPalette));
memset(_paletteBuffer, 0, sizeof(_paletteBuffer));
- memset(_flicPlayer, 0, sizeof(_flicPlayer));
_soundsListSeqData = 0;
_soundsList1 = 0;
_soundsList1Count = 0;
@@ -836,10 +835,6 @@
void AnimationSequencePlayer::unloadAnimation() {
_mixer->stopAll();
- for (int i = 0; i < ARRAYSIZE(_flicPlayer); ++i) {
- delete _flicPlayer[i];
- _flicPlayer[i] = 0;
- }
free(_picBufPtr);
_picBufPtr = 0;
free(_pic2BufPtr);
@@ -860,20 +855,24 @@
}
void AnimationSequencePlayer::openAnimation(int index, const char *fileName) {
- _flicPlayer[index] = new ::Graphics::FlicPlayer(fileName);
- _flicPlayer[index]->decodeFrame();
+ if (!_flicPlayer[index].loadFile(fileName)) {
+ warning("Unable to open flc animation file '%s'", fileName);
+ _seqNum = 1;
+ return;
+ }
+ _flicPlayer[index].decodeFrame();
if (index == 0) {
- memcpy(_animationPalette, _flicPlayer[index]->getPalette(), 1024);
- memcpy(_offscreenBuffer, _flicPlayer[index]->getOffscreen(), kScreenWidth * kScreenHeight);
+ memcpy(_animationPalette, _flicPlayer[index].getPalette(), 1024);
+ memcpy(_offscreenBuffer, _flicPlayer[index].getOffscreen(), kScreenWidth * kScreenHeight);
}
}
void AnimationSequencePlayer::decodeNextAnimationFrame(int index) {
- _flicPlayer[index]->decodeFrame();
- memcpy(_offscreenBuffer, _flicPlayer[index]->getOffscreen(), kScreenWidth * kScreenHeight);
+ _flicPlayer[index].decodeFrame();
+ memcpy(_offscreenBuffer, _flicPlayer[index].getOffscreen(), kScreenWidth * kScreenHeight);
if (index == 0) {
- if (_flicPlayer[index]->isPaletteDirty()) {
- memcpy(_animationPalette, _flicPlayer[index]->getPalette(), 1024);
+ if (_flicPlayer[index].isPaletteDirty()) {
+ memcpy(_animationPalette, _flicPlayer[index].getPalette(), 1024);
}
}
if (_seqNum != 19) {
@@ -889,7 +888,7 @@
_newSeq = false;
}
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 19;
}
updateSounds();
@@ -904,20 +903,20 @@
_frameTime = 1;
_newSeq = false;
}
- if (_flicPlayer[0]->getCurFrame() >= 116) {
- _flicPlayer[1]->decodeFrame();
- if (_flicPlayer[1]->getCurFrame() == _flicPlayer[1]->getFrameCount()) {
- _flicPlayer[1]->reset();
+ if (_flicPlayer[0].getCurFrame() >= 116) {
+ _flicPlayer[1].decodeFrame();
+ if (_flicPlayer[1].isLastFrame()) {
+ _flicPlayer[1].reset();
}
}
- _flicPlayer[0]->decodeFrame();
- const uint8 *t = _flicPlayer[1]->getOffscreen();
+ _flicPlayer[0].decodeFrame();
+ const uint8 *t = _flicPlayer[1].getOffscreen();
for (int i = 0; i < 64000; ++i) {
- const uint8 color = _flicPlayer[0]->getOffscreen()[i];
+ const uint8 color = _flicPlayer[0].getOffscreen()[i];
_offscreenBuffer[i] = color ? color : t[i];
}
updateSounds();
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 3;
}
}
@@ -974,10 +973,10 @@
}
if (!_updateScreenPicture) {
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == 706) {
+ if (_flicPlayer[0].getCurFrame() == 706) {
initPicPart4();
}
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 9;
}
} else {
@@ -1018,7 +1017,7 @@
memcpy(_offscreenBuffer + y * 320, _picBufPtr + 800 + y * 640 + _updateScreenWidth, 320);
}
for (int i = 0; i < 64000; ++i) {
- const uint8 color = _flicPlayer[0]->getOffscreen()[i];
+ const uint8 color = _flicPlayer[0].getOffscreen()[i];
if (color) {
_offscreenBuffer[i] = color;
}
@@ -1036,20 +1035,20 @@
_newSeq = false;
}
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == 984) {
+ if (_flicPlayer[0].getCurFrame() == 984) {
drawPic2Part10();
}
- if (_flicPlayer[0]->getCurFrame() >= 264 && _flicPlayer[0]->getCurFrame() <= 295) {
+ if (_flicPlayer[0].getCurFrame() >= 264 && _flicPlayer[0].getCurFrame() <= 295) {
drawPic1Part10();
_updateScreenWidth += 6;
- } else if (_flicPlayer[0]->getCurFrame() >= 988 && _flicPlayer[0]->getCurFrame() <= 996) {
+ } else if (_flicPlayer[0].getCurFrame() >= 988 && _flicPlayer[0].getCurFrame() <= 996) {
drawPic1Part10();
_updateScreenWidth -= 25;
if (_updateScreenWidth < 0) {
_updateScreenWidth = 0;
}
}
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 21;
}
updateSounds();
@@ -1063,7 +1062,7 @@
_newSeq = false;
}
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 1;
}
updateSounds();
@@ -1077,7 +1076,7 @@
_newSeq = false;
}
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 15;
}
updateSounds();
@@ -1091,7 +1090,7 @@
_newSeq = false;
}
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 27;
}
updateSounds();
@@ -1105,7 +1104,7 @@
_newSeq = false;
}
decodeNextAnimationFrame(0);
- if (_flicPlayer[0]->getCurFrame() == _flicPlayer[0]->getFrameCount()) {
+ if (_flicPlayer[0].isLastFrame()) {
_seqNum = 1;
}
updateSounds();
Modified: scummvm/trunk/engines/tucker/tucker.h
===================================================================
--- scummvm/trunk/engines/tucker/tucker.h 2008-11-28 11:56:08 UTC (rev 35169)
+++ scummvm/trunk/engines/tucker/tucker.h 2008-11-28 23:51:59 UTC (rev 35170)
@@ -865,7 +865,7 @@
bool _newSeq;
int _seqNum, _currentSeqNum;
- ::Graphics::FlicPlayer *_flicPlayer[2];
+ ::Graphics::FlicPlayer _flicPlayer[2];
uint8 _animationPalette[256 * 4], _paletteBuffer[256 * 4];
const int *_soundsListSeqData;
const char **_soundsList1;
Modified: scummvm/trunk/graphics/flic_player.cpp
===================================================================
--- scummvm/trunk/graphics/flic_player.cpp 2008-11-28 11:56:08 UTC (rev 35169)
+++ scummvm/trunk/graphics/flic_player.cpp 2008-11-28 23:51:59 UTC (rev 35170)
@@ -27,13 +27,22 @@
namespace Graphics {
-FlicPlayer::FlicPlayer(const char *fileName)
+FlicPlayer::FlicPlayer()
: _paletteDirty(false), _offscreen(0), _currFrame(0) {
-
memset(&_flicInfo, 0, sizeof(_flicInfo));
- _fileStream.open(fileName);
- assert(_fileStream.isOpen());
+}
+FlicPlayer::~FlicPlayer() {
+ closeFile();
+}
+
+bool FlicPlayer::loadFile(const char *fileName) {
+ closeFile();
+
+ if (!_fileStream.open(fileName)) {
+ return false;
+ }
+
_flicInfo.size = _fileStream.readUint32LE();
_flicInfo.type = _fileStream.readUint16LE();
_flicInfo.numFrames = _fileStream.readUint16LE();
@@ -56,10 +65,14 @@
// Seek to the first frame
_fileStream.seek(_flicInfo.offsetFrame1);
+ return true;
}
-FlicPlayer::~FlicPlayer() {
+void FlicPlayer::closeFile() {
+ memset(&_flicInfo, 0, sizeof(_flicInfo));
+ _fileStream.close();
delete[] _offscreen;
+ _offscreen = 0;
}
void FlicPlayer::redraw() {
Modified: scummvm/trunk/graphics/flic_player.h
===================================================================
--- scummvm/trunk/graphics/flic_player.h 2008-11-28 11:56:08 UTC (rev 35169)
+++ scummvm/trunk/graphics/flic_player.h 2008-11-28 23:51:59 UTC (rev 35170)
@@ -60,15 +60,18 @@
class FlicPlayer {
public:
- FlicPlayer(const char *fileName);
+ FlicPlayer();
~FlicPlayer();
+ bool loadFile(const char *fileName);
+ void closeFile();
void decodeFrame();
int getWidth() const { return _flicInfo.width; }
int getHeight() const { return _flicInfo.height; }
bool hasFrames() const { return _flicInfo.numFrames > 0; }
int getCurFrame() const { return _currFrame; }
int getFrameCount() const { return _flicInfo.numFrames; }
+ bool isLastFrame() const { return _currFrame == _flicInfo.numFrames; }
uint32 getSpeed() const { return _flicInfo.speed; }
bool isPaletteDirty() const { return _paletteDirty; }
const uint8 *getPalette() { _paletteDirty = false; return _palette; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list