mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-28 18:51:16 +00:00
Fixes/match
This commit is contained in:
parent
2fc7410e1d
commit
dc73e2dc9d
@ -7,7 +7,10 @@
|
|||||||
// SIZE 0x50
|
// SIZE 0x50
|
||||||
class LegoActorPresenter : public LegoEntityPresenter {
|
class LegoActorPresenter : public LegoEntityPresenter {
|
||||||
public:
|
public:
|
||||||
~LegoActorPresenter() override{};
|
// LegoActorPresenter() {}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100679c0
|
||||||
|
~LegoActorPresenter() override {}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1000cb10
|
// FUNCTION: LEGO1 0x1000cb10
|
||||||
inline const char* ClassName() const override // vtable+0x0c
|
inline const char* ClassName() const override // vtable+0x0c
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class LegoEntityPresenter : public MxCompositePresenter {
|
|||||||
|
|
||||||
void SetEntityLocation(Vector3& p_location, Vector3& p_direction, Vector3& p_up);
|
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; }
|
inline void SetInternalEntity(LegoEntity* p_entity) { m_entity = p_entity; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100535a0
|
// SYNTHETIC: LEGO1 0x100535a0
|
||||||
|
|||||||
@ -12,7 +12,9 @@ class MxDSChunk;
|
|||||||
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
|
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
|
||||||
class LegoModelPresenter : public MxVideoPresenter {
|
class LegoModelPresenter : public MxVideoPresenter {
|
||||||
public:
|
public:
|
||||||
// inline in scalar dtor
|
LegoModelPresenter() { Reset(); }
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10067a10
|
||||||
~LegoModelPresenter() override { Destroy(TRUE); }
|
~LegoModelPresenter() override { Destroy(TRUE); }
|
||||||
|
|
||||||
static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
|
static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
|
||||||
@ -34,9 +36,9 @@ class LegoModelPresenter : public MxVideoPresenter {
|
|||||||
void ParseExtra() override; // vtable+0x30
|
void ParseExtra() override; // vtable+0x30
|
||||||
void Destroy() override; // vtable+0x38
|
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_roi = NULL;
|
||||||
m_addedToView = FALSE;
|
m_addedToView = FALSE;
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class LegoPartPresenter : public MxMediaPresenter {
|
|||||||
|
|
||||||
inline void Reset() { m_partData = NULL; }
|
inline void Reset() { m_partData = NULL; }
|
||||||
|
|
||||||
MxResult ParsePart(MxDSChunk& p_chunk);
|
MxResult Read(MxDSChunk& p_chunk);
|
||||||
void FUN_1007df20();
|
void FUN_1007df20();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class LegoTexturePresenter : public MxMediaPresenter {
|
|||||||
// SYNTHETIC: LEGO1 0x1000cf40
|
// SYNTHETIC: LEGO1 0x1000cf40
|
||||||
// LegoTexturePresenter::`scalar deleting destructor'
|
// LegoTexturePresenter::`scalar deleting destructor'
|
||||||
|
|
||||||
MxResult ParseTexture(MxDSChunk& p_chunk);
|
MxResult Read(MxDSChunk& p_chunk);
|
||||||
void FUN_1004f290();
|
void FUN_1004f290();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -226,7 +226,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
|
|||||||
chunk.SetData(buff);
|
chunk.SetData(buff);
|
||||||
|
|
||||||
LegoTexturePresenter texturePresenter;
|
LegoTexturePresenter texturePresenter;
|
||||||
if (texturePresenter.ParseTexture(chunk) == SUCCESS) {
|
if (texturePresenter.Read(chunk) == SUCCESS) {
|
||||||
texturePresenter.FUN_1004f290();
|
texturePresenter.FUN_1004f290();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
|
|||||||
chunk.SetData(buff);
|
chunk.SetData(buff);
|
||||||
|
|
||||||
LegoPartPresenter partPresenter;
|
LegoPartPresenter partPresenter;
|
||||||
if (partPresenter.ParsePart(chunk) == SUCCESS) {
|
if (partPresenter.Read(chunk) == SUCCESS) {
|
||||||
partPresenter.FUN_1007df20();
|
partPresenter.FUN_1007df20();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,6 +321,7 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
|
|||||||
{
|
{
|
||||||
MxResult result;
|
MxResult result;
|
||||||
MxU8* buffer = new MxU8[p_part.m_partDataLength];
|
MxU8* buffer = new MxU8[p_part.m_partDataLength];
|
||||||
|
|
||||||
fseek(p_wdbFile, p_part.m_partDataOffset, 0);
|
fseek(p_wdbFile, p_part.m_partDataOffset, 0);
|
||||||
if (fread(buffer, p_part.m_partDataLength, 1, p_wdbFile) != 1) {
|
if (fread(buffer, p_part.m_partDataLength, 1, p_wdbFile) != 1) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
@ -331,7 +332,8 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
|
|||||||
chunk.SetData(buffer);
|
chunk.SetData(buffer);
|
||||||
|
|
||||||
LegoPartPresenter part;
|
LegoPartPresenter part;
|
||||||
result = part.ParsePart(chunk);
|
result = part.Read(chunk);
|
||||||
|
|
||||||
if (result == SUCCESS) {
|
if (result == SUCCESS) {
|
||||||
part.FUN_1007df20();
|
part.FUN_1007df20();
|
||||||
}
|
}
|
||||||
@ -343,47 +345,51 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
|
|||||||
// FUNCTION: LEGO1 0x100674b0
|
// FUNCTION: LEGO1 0x100674b0
|
||||||
MxResult LegoWorldPresenter::FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile, LegoWorld* p_world)
|
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);
|
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;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
MxDSChunk chunk;
|
MxDSChunk chunk;
|
||||||
chunk.SetLength(p_model.m_unk0x04);
|
chunk.SetLength(p_model.m_unk0x04);
|
||||||
chunk.SetData(buffer);
|
chunk.SetData(buff);
|
||||||
|
|
||||||
MxDSAction action;
|
MxDSAction action;
|
||||||
|
MxAtomId atom;
|
||||||
action.SetLocation(Vector3(p_model.m_location));
|
action.SetLocation(Vector3(p_model.m_location));
|
||||||
action.SetDirection(Vector3(p_model.m_direction));
|
action.SetDirection(Vector3(p_model.m_direction));
|
||||||
Vector3 up = Vector3(Vector3(p_model.m_direction));
|
action.SetUp(Vector3(p_model.m_direction));
|
||||||
action.SetUp(up);
|
|
||||||
|
|
||||||
action.SetObjectId(m_unk0x50);
|
MxU32 objectId = m_unk0x50;
|
||||||
m_unk0x50++;
|
m_unk0x50++;
|
||||||
action.SetAtomId(MxAtomId());
|
action.SetObjectId(objectId);
|
||||||
|
|
||||||
LegoEntity* createdEntity;
|
action.SetAtomId(atom);
|
||||||
|
|
||||||
if (strcmp(p_model.m_presenterName, "LegoActorPresenter") == 0) {
|
LegoEntity* createdEntity = NULL;
|
||||||
LegoActorPresenter actor;
|
|
||||||
LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoActor");
|
if (!strcmp(p_model.m_presenterName, "LegoActorPresenter")) {
|
||||||
actor.SetInternalEntity(entity);
|
LegoActorPresenter presenter;
|
||||||
createdEntity = entity;
|
presenter.SetAction(&action);
|
||||||
actor.SetEntityLocation(Vector3(), Vector3(), Vector3());
|
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);
|
entity->Create(action);
|
||||||
}
|
}
|
||||||
else if (strcmp(p_model.m_presenterName, "LegoEntityPresenter") == 0) {
|
else if (!strcmp(p_model.m_presenterName, "LegoEntityPresenter")) {
|
||||||
LegoActorPresenter actor;
|
LegoEntityPresenter presenter;
|
||||||
LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoEntity");
|
presenter.SetAction(&action);
|
||||||
actor.SetInternalEntity(entity);
|
createdEntity = (LegoEntity*) presenter.CreateEntity("LegoEntity");
|
||||||
createdEntity = entity;
|
presenter.SetInternalEntity(createdEntity);
|
||||||
actor.SetEntityLocation(Vector3(), Vector3(), Vector3());
|
presenter
|
||||||
entity->Create(action);
|
.SetEntityLocation(Vector3(p_model.m_location), Vector3(p_model.m_direction), Vector3(p_model.m_direction));
|
||||||
|
createdEntity->Create(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
LegoModelPresenter modelPresenter;
|
LegoModelPresenter modelPresenter;
|
||||||
modelPresenter.Clear();
|
|
||||||
|
|
||||||
if (createdEntity != NULL) {
|
if (createdEntity != NULL) {
|
||||||
action.SetLocation(Mx3DPointFloat(0.0, 0.0, 0.0));
|
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.SetAction(&action);
|
||||||
modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world);
|
modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world);
|
||||||
delete buffer;
|
delete[] buff;
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -204,9 +204,9 @@ MxResult LegoModelPresenter::CreateROI(MxStreamChunk* p_chunk)
|
|||||||
|
|
||||||
// STUB: LEGO1 0x1007ff70
|
// STUB: LEGO1 0x1007ff70
|
||||||
void LegoModelPresenter::FUN_1007ff70(
|
void LegoModelPresenter::FUN_1007ff70(
|
||||||
MxDSChunk p_chunk,
|
MxDSChunk& p_chunk,
|
||||||
LegoEntity* p_entity,
|
LegoEntity* p_entity,
|
||||||
undefined4 p_modelUnknown0x34,
|
undefined p_modelUnknown0x34,
|
||||||
LegoWorld* p_world
|
LegoWorld* p_world
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -224,13 +224,13 @@ void LegoModelPresenter::ReadyTickle()
|
|||||||
|
|
||||||
if (m_roi != NULL) {
|
if (m_roi != NULL) {
|
||||||
if (m_compositePresenter && m_compositePresenter->IsA("LegoEntityPresenter")) {
|
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)
|
((LegoEntityPresenter*) m_compositePresenter)
|
||||||
->GetEntity()
|
->GetInternalEntity()
|
||||||
->SetFlags(
|
->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();
|
ParseExtra();
|
||||||
@ -250,11 +250,12 @@ void LegoModelPresenter::ReadyTickle()
|
|||||||
VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_roi);
|
VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_roi);
|
||||||
|
|
||||||
if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoEntityPresenter")) {
|
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)
|
((LegoEntityPresenter*) m_compositePresenter)
|
||||||
->GetEntity()
|
->GetInternalEntity()
|
||||||
->SetFlags(
|
->SetFlags(
|
||||||
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2
|
((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->GetFlags() &
|
||||||
|
~LegoEntity::c_bit2
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ void LegoPartPresenter::Destroy(MxBool p_fromDestructor)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1007ca30
|
// STUB: LEGO1 0x1007ca30
|
||||||
MxResult LegoPartPresenter::ParsePart(MxDSChunk& p_chunk)
|
MxResult LegoPartPresenter::Read(MxDSChunk& p_chunk)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
@ -20,7 +20,7 @@ MxResult LegoTexturePresenter::AddToManager()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1004ebd0
|
// STUB: LEGO1 0x1004ebd0
|
||||||
MxResult LegoTexturePresenter::ParseTexture(MxDSChunk& p_chunk)
|
MxResult LegoTexturePresenter::Read(MxDSChunk& p_chunk)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
@ -15,7 +15,7 @@ class MxEntity : public MxCore {
|
|||||||
MxEntity() { this->m_mxEntityId = -1; }
|
MxEntity() { this->m_mxEntityId = -1; }
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1000c110
|
// FUNCTION: LEGO1 0x1000c110
|
||||||
~MxEntity() override{};
|
~MxEntity() override {}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1000c180
|
// FUNCTION: LEGO1 0x1000c180
|
||||||
inline const char* ClassName() const override // vtable+0x0c
|
inline const char* ClassName() const override // vtable+0x0c
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class MxPresenter : public MxCore {
|
|||||||
MxPresenter() { Init(); }
|
MxPresenter() { Init(); }
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1000bf00
|
// FUNCTION: LEGO1 0x1000bf00
|
||||||
~MxPresenter() override{}; // vtable+0x00
|
~MxPresenter() override {} // vtable+0x00
|
||||||
|
|
||||||
MxResult Tickle() override; // vtable+0x08
|
MxResult Tickle() override; // vtable+0x08
|
||||||
|
|
||||||
|
|||||||
@ -13,8 +13,6 @@ class Vector2 {
|
|||||||
// FUNCTION: LEGO1 0x1000c0f0
|
// FUNCTION: LEGO1 0x1000c0f0
|
||||||
inline Vector2(float* p_data) { SetData(p_data); }
|
inline Vector2(float* p_data) { SetData(p_data); }
|
||||||
|
|
||||||
inline Vector2() {}
|
|
||||||
|
|
||||||
// Note: virtual function overloads appear in the virtual table
|
// Note: virtual function overloads appear in the virtual table
|
||||||
// in reverse order of appearance.
|
// in reverse order of appearance.
|
||||||
|
|
||||||
@ -157,8 +155,6 @@ class Vector3 : public Vector2 {
|
|||||||
// FUNCTION: LEGO1 0x1001d150
|
// FUNCTION: LEGO1 0x1001d150
|
||||||
inline Vector3(float* p_data) : Vector2(p_data) {}
|
inline Vector3(float* p_data) : Vector2(p_data) {}
|
||||||
|
|
||||||
inline Vector3() {}
|
|
||||||
|
|
||||||
// Hack: Some code initializes a Vector3 from a (most likely) const float* source.
|
// Hack: Some code initializes a Vector3 from a (most likely) const float* source.
|
||||||
// Example: LegoCameraController::GetWorldUp
|
// Example: LegoCameraController::GetWorldUp
|
||||||
// Vector3 however is a class that can mutate its underlying source, making
|
// Vector3 however is a class that can mutate its underlying source, making
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user