isle/LEGO1/mxstreamchunk.cpp
2023-12-17 09:28:14 -05:00

51 lines
1.1 KiB
C++

#include "mxstreamchunk.h"
#include "mxdsbuffer.h"
// FUNCTION: LEGO1 0x100c2fe0
MxStreamChunk::~MxStreamChunk()
{
if (m_buffer) {
m_buffer->ReleaseRef(this);
}
}
// FUNCTION: LEGO1 0x100c3050
MxResult MxStreamChunk::ReadChunk(MxDSBuffer* p_buffer, MxU8* p_chunkData)
{
MxResult result = FAILURE;
if (p_chunkData != NULL && *(MxU32*) p_chunkData == FOURCC('M', 'x', 'C', 'h')) {
if (ReadChunkHeader(p_chunkData + 8)) {
if (p_buffer) {
SetBuffer(p_buffer);
p_buffer->AddRef(this);
}
result = SUCCESS;
}
}
return result;
}
// FUNCTION: LEGO1 0x100c30a0
MxU32 MxStreamChunk::ReadChunkHeader(MxU8* p_chunkData)
{
MxU32 headersize = 0;
if (p_chunkData) {
SetFlags(*(MxU16*) p_chunkData);
SetObjectId(*(MxU32*) (p_chunkData + 2));
SetTime(*(MxLong*) (p_chunkData + 6));
SetLength(*(MxU32*) (p_chunkData + 10));
SetData(p_chunkData + 14);
headersize = (MxU32) (p_chunkData + 14) - (MxU32) p_chunkData;
}
return headersize;
}
// FUNCTION: LEGO1 0x100c3170
void MxStreamChunk::SetBuffer(MxDSBuffer* p_buffer)
{
m_buffer = p_buffer;
}