diff options
Diffstat (limited to 'engines/prince/animation.cpp')
-rw-r--r-- | engines/prince/animation.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/engines/prince/animation.cpp b/engines/prince/animation.cpp index f595e7af68..8edf9d04ee 100644 --- a/engines/prince/animation.cpp +++ b/engines/prince/animation.cpp @@ -29,10 +29,10 @@ namespace Prince { bool Animation::loadFromStream(Common::SeekableReadStream &stream) { - uint32 dataSize = stream.size(); - _data = (byte*) malloc(dataSize); + _dataSize = stream.size(); + _data = (byte*) malloc(_dataSize); - if(stream.read(_data, dataSize) != dataSize) { + if (stream.read(_data, _dataSize) != _dataSize) { free(_data); return false; } @@ -49,7 +49,7 @@ const Graphics::Surface * Animation::getSurface(uint16 frameIndex) { return _frameList[frameIndex]; } */ -Animation::Animation() { +Animation::Animation(): _data(NULL) { } @@ -61,6 +61,22 @@ Animation::~Animation() { free(_data); } +void Animation::clear() { + if (_data != NULL) { + free(_data); + } +} + +// TEMP +/* +int8 Animation::getZoom(uint16 offset) const { + return *(uint8*)(_data+offset); +} +*/ +int16 Animation::getZoom(uint16 offset) const { + return READ_LE_UINT16(_data + offset); +} + int16 Animation::getLoopCount() const { return READ_LE_UINT16(_data + 2); } @@ -93,6 +109,16 @@ int16 Animation::getPhaseFrameIndex(uint phaseIndex) const { return READ_LE_UINT16(getPhaseEntry(phaseIndex) + 4); } +int16 Animation::getFrameWidth(uint frameIndex) const { + byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4); + return READ_LE_UINT16(frameData + 0); +} + +int16 Animation::getFrameHeight(uint frameIndex) const { + byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4); + return READ_LE_UINT16(frameData + 2); +} + Graphics::Surface *Animation::getFrame(uint frameIndex) { byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4); int16 width = READ_LE_UINT16(frameData + 0); |