Files
isle/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp
jonschz 03adac0c58 Match LegoOmni::Create(), other BETA10 matches (#1651)
* Match `LegoOmni::Create()`, other BETA10 matches

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2025-07-25 17:13:34 +02:00

76 lines
1.5 KiB
C++

#include "legoflctexturepresenter.h"
#include "misc.h"
#include "misc/legocontainer.h"
#include "mxdsaction.h"
#include <assert.h>
DECOMP_SIZE_ASSERT(LegoFlcTexturePresenter, 0x70)
// FUNCTION: LEGO1 0x1005de80
LegoFlcTexturePresenter::LegoFlcTexturePresenter()
{
Init();
}
// FUNCTION: LEGO1 0x1005df70
void LegoFlcTexturePresenter::Init()
{
m_rectCount = 0;
m_texture = NULL;
}
// FUNCTION: LEGO1 0x1005df80
// FUNCTION: BETA10 0x100833a7
void LegoFlcTexturePresenter::StartingTickle()
{
MxU16 extraLength;
char* pp;
char extraCopy[128];
m_action->GetExtra(extraLength, pp);
assert(pp);
if (pp != NULL) {
strcpy(extraCopy, pp);
strcat(extraCopy, ".gif");
LegoTextureContainer* textureContainer = TextureContainer();
assert(textureContainer);
m_texture = textureContainer->Get(extraCopy);
}
MxFlcPresenter::StartingTickle();
}
// FUNCTION: LEGO1 0x1005e0c0
// FUNCTION: BETA10 0x100834ce
void LegoFlcTexturePresenter::LoadFrame(MxStreamChunk* p_chunk)
{
MxU8* data = p_chunk->GetData();
m_rectCount = *(MxS32*) data;
data += sizeof(MxS32);
MxRect32* rects = (MxRect32*) data;
data += m_rectCount * sizeof(MxRect32);
MxBool decodedColorMap;
DecodeFLCFrame(
&m_frameBitmap->GetBitmapInfo()->m_bmiHeader,
m_frameBitmap->GetImage(),
m_flcHeader,
(FLIC_FRAME*) data,
&decodedColorMap
);
}
// FUNCTION: LEGO1 0x1005e100
// FUNCTION: BETA10 0x10083562
void LegoFlcTexturePresenter::PutFrame()
{
if (m_texture != NULL && m_rectCount != 0) {
m_texture->LoadBits(m_frameBitmap->GetImage());
m_rectCount = 0;
}
}