Fixes/match

This commit is contained in:
Christian Semmler 2024-03-03 19:55:40 -05:00
parent 2fc7410e1d
commit dc73e2dc9d
12 changed files with 58 additions and 50 deletions

View File

@ -7,7 +7,10 @@
// SIZE 0x50
class LegoActorPresenter : public LegoEntityPresenter {
public:
~LegoActorPresenter() override{};
// LegoActorPresenter() {}
// FUNCTION: LEGO1 0x100679c0
~LegoActorPresenter() override {}
// FUNCTION: LEGO1 0x1000cb10
inline const char* ClassName() const override // vtable+0x0c

View File

@ -35,7 +35,7 @@ class LegoEntityPresenter : public MxCompositePresenter {
void SetEntityLocation(Vector3& p_location, Vector3& p_direction, Vector3& p_up);
inline LegoEntity* GetEntity() { return m_entity; }
inline LegoEntity* GetInternalEntity() { return m_entity; }
inline void SetInternalEntity(LegoEntity* p_entity) { m_entity = p_entity; }
// SYNTHETIC: LEGO1 0x100535a0

View File

@ -12,7 +12,9 @@ class MxDSChunk;
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
class LegoModelPresenter : public MxVideoPresenter {
public:
// inline in scalar dtor
LegoModelPresenter() { Reset(); }
// FUNCTION: LEGO1 0x10067a10
~LegoModelPresenter() override { Destroy(TRUE); }
static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
@ -34,9 +36,9 @@ class LegoModelPresenter : public MxVideoPresenter {
void ParseExtra() override; // vtable+0x30
void Destroy() override; // vtable+0x38
void FUN_1007ff70(MxDSChunk p_chunk, LegoEntity* p_entity, undefined4 p_modelUnknown0x34, LegoWorld* p_world);
void FUN_1007ff70(MxDSChunk& p_chunk, LegoEntity* p_entity, undefined p_modelUnknown0x34, LegoWorld* p_world);
inline void Clear()
inline void Reset()
{
m_roi = NULL;
m_addedToView = FALSE;

View File

@ -36,7 +36,7 @@ class LegoPartPresenter : public MxMediaPresenter {
inline void Reset() { m_partData = NULL; }
MxResult ParsePart(MxDSChunk& p_chunk);
MxResult Read(MxDSChunk& p_chunk);
void FUN_1007df20();
private:

View File

@ -30,7 +30,7 @@ class LegoTexturePresenter : public MxMediaPresenter {
// SYNTHETIC: LEGO1 0x1000cf40
// LegoTexturePresenter::`scalar deleting destructor'
MxResult ParseTexture(MxDSChunk& p_chunk);
MxResult Read(MxDSChunk& p_chunk);
void FUN_1004f290();
private:

View File

@ -226,7 +226,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
chunk.SetData(buff);
LegoTexturePresenter texturePresenter;
if (texturePresenter.ParseTexture(chunk) == SUCCESS) {
if (texturePresenter.Read(chunk) == SUCCESS) {
texturePresenter.FUN_1004f290();
}
@ -245,7 +245,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
chunk.SetData(buff);
LegoPartPresenter partPresenter;
if (partPresenter.ParsePart(chunk) == SUCCESS) {
if (partPresenter.Read(chunk) == SUCCESS) {
partPresenter.FUN_1007df20();
}
@ -321,6 +321,7 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
{
MxResult result;
MxU8* buffer = new MxU8[p_part.m_partDataLength];
fseek(p_wdbFile, p_part.m_partDataOffset, 0);
if (fread(buffer, p_part.m_partDataLength, 1, p_wdbFile) != 1) {
return FAILURE;
@ -331,7 +332,8 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
chunk.SetData(buffer);
LegoPartPresenter part;
result = part.ParsePart(chunk);
result = part.Read(chunk);
if (result == SUCCESS) {
part.FUN_1007df20();
}
@ -343,47 +345,51 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
// FUNCTION: LEGO1 0x100674b0
MxResult LegoWorldPresenter::FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile, LegoWorld* p_world)
{
MxU8* buffer = new MxU8[p_model.m_unk0x04];
MxU8* buff = new MxU8[p_model.m_unk0x04];
fseek(p_wdbFile, p_model.m_unk0x08, 0);
if (fread(buffer, p_model.m_unk0x04, 1, p_wdbFile) != 1) {
if (fread(buff, p_model.m_unk0x04, 1, p_wdbFile) != 1) {
return FAILURE;
}
MxDSChunk chunk;
chunk.SetLength(p_model.m_unk0x04);
chunk.SetData(buffer);
chunk.SetData(buff);
MxDSAction action;
MxAtomId atom;
action.SetLocation(Vector3(p_model.m_location));
action.SetDirection(Vector3(p_model.m_direction));
Vector3 up = Vector3(Vector3(p_model.m_direction));
action.SetUp(up);
action.SetUp(Vector3(p_model.m_direction));
action.SetObjectId(m_unk0x50);
MxU32 objectId = m_unk0x50;
m_unk0x50++;
action.SetAtomId(MxAtomId());
action.SetObjectId(objectId);
LegoEntity* createdEntity;
action.SetAtomId(atom);
if (strcmp(p_model.m_presenterName, "LegoActorPresenter") == 0) {
LegoActorPresenter actor;
LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoActor");
actor.SetInternalEntity(entity);
createdEntity = entity;
actor.SetEntityLocation(Vector3(), Vector3(), Vector3());
LegoEntity* createdEntity = NULL;
if (!strcmp(p_model.m_presenterName, "LegoActorPresenter")) {
LegoActorPresenter presenter;
presenter.SetAction(&action);
LegoEntity* entity = (LegoEntity*) presenter.CreateEntity("LegoActor");
presenter.SetInternalEntity(entity);
presenter
.SetEntityLocation(Vector3(p_model.m_location), Vector3(p_model.m_direction), Vector3(p_model.m_direction));
entity->Create(action);
}
else if (strcmp(p_model.m_presenterName, "LegoEntityPresenter") == 0) {
LegoActorPresenter actor;
LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoEntity");
actor.SetInternalEntity(entity);
createdEntity = entity;
actor.SetEntityLocation(Vector3(), Vector3(), Vector3());
entity->Create(action);
else if (!strcmp(p_model.m_presenterName, "LegoEntityPresenter")) {
LegoEntityPresenter presenter;
presenter.SetAction(&action);
createdEntity = (LegoEntity*) presenter.CreateEntity("LegoEntity");
presenter.SetInternalEntity(createdEntity);
presenter
.SetEntityLocation(Vector3(p_model.m_location), Vector3(p_model.m_direction), Vector3(p_model.m_direction));
createdEntity->Create(action);
}
LegoModelPresenter modelPresenter;
modelPresenter.Clear();
if (createdEntity != NULL) {
action.SetLocation(Mx3DPointFloat(0.0, 0.0, 0.0));
@ -393,7 +399,7 @@ MxResult LegoWorldPresenter::FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile
modelPresenter.SetAction(&action);
modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world);
delete buffer;
delete[] buff;
return SUCCESS;
}

View File

@ -204,9 +204,9 @@ MxResult LegoModelPresenter::CreateROI(MxStreamChunk* p_chunk)
// STUB: LEGO1 0x1007ff70
void LegoModelPresenter::FUN_1007ff70(
MxDSChunk p_chunk,
MxDSChunk& p_chunk,
LegoEntity* p_entity,
undefined4 p_modelUnknown0x34,
undefined p_modelUnknown0x34,
LegoWorld* p_world
)
{
@ -224,13 +224,13 @@ void LegoModelPresenter::ReadyTickle()
if (m_roi != NULL) {
if (m_compositePresenter && m_compositePresenter->IsA("LegoEntityPresenter")) {
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->SetROI(m_roi, m_addedToView, TRUE);
((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->SetROI(m_roi, m_addedToView, TRUE);
((LegoEntityPresenter*) m_compositePresenter)
->GetEntity()
->GetInternalEntity()
->SetFlags(
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2
((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->GetFlags() & ~LegoEntity::c_bit2
);
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->FUN_100114e0(0);
((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->FUN_100114e0(0);
}
ParseExtra();
@ -250,11 +250,12 @@ void LegoModelPresenter::ReadyTickle()
VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_roi);
if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoEntityPresenter")) {
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->SetROI(m_roi, TRUE, TRUE);
((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->SetROI(m_roi, TRUE, TRUE);
((LegoEntityPresenter*) m_compositePresenter)
->GetEntity()
->GetInternalEntity()
->SetFlags(
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2
((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->GetFlags() &
~LegoEntity::c_bit2
);
}

View File

@ -36,7 +36,7 @@ void LegoPartPresenter::Destroy(MxBool p_fromDestructor)
}
// STUB: LEGO1 0x1007ca30
MxResult LegoPartPresenter::ParsePart(MxDSChunk& p_chunk)
MxResult LegoPartPresenter::Read(MxDSChunk& p_chunk)
{
// TODO
return SUCCESS;

View File

@ -20,7 +20,7 @@ MxResult LegoTexturePresenter::AddToManager()
}
// STUB: LEGO1 0x1004ebd0
MxResult LegoTexturePresenter::ParseTexture(MxDSChunk& p_chunk)
MxResult LegoTexturePresenter::Read(MxDSChunk& p_chunk)
{
// TODO
return SUCCESS;

View File

@ -15,7 +15,7 @@ class MxEntity : public MxCore {
MxEntity() { this->m_mxEntityId = -1; }
// FUNCTION: LEGO1 0x1000c110
~MxEntity() override{};
~MxEntity() override {}
// FUNCTION: LEGO1 0x1000c180
inline const char* ClassName() const override // vtable+0x0c

View File

@ -29,7 +29,7 @@ class MxPresenter : public MxCore {
MxPresenter() { Init(); }
// FUNCTION: LEGO1 0x1000bf00
~MxPresenter() override{}; // vtable+0x00
~MxPresenter() override {} // vtable+0x00
MxResult Tickle() override; // vtable+0x08

View File

@ -13,8 +13,6 @@ class Vector2 {
// FUNCTION: LEGO1 0x1000c0f0
inline Vector2(float* p_data) { SetData(p_data); }
inline Vector2() {}
// Note: virtual function overloads appear in the virtual table
// in reverse order of appearance.
@ -157,8 +155,6 @@ class Vector3 : public Vector2 {
// FUNCTION: LEGO1 0x1001d150
inline Vector3(float* p_data) : Vector2(p_data) {}
inline Vector3() {}
// Hack: Some code initializes a Vector3 from a (most likely) const float* source.
// Example: LegoCameraController::GetWorldUp
// Vector3 however is a class that can mutate its underlying source, making