[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