mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 00:14:22 +00:00
Implement LegoModelPresenter::ReadyTickle (#546)
* Implement LegoModelPresenter::ReadyTickle * Update legoworld.h * Fixes --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
@@ -56,11 +56,14 @@ public:
|
|||||||
virtual void VTable0x4c(); // vtable+0x4c
|
virtual void VTable0x4c(); // vtable+0x4c
|
||||||
|
|
||||||
void FUN_10010c30();
|
void FUN_10010c30();
|
||||||
|
void FUN_100114e0(MxU8 p_unk0x59);
|
||||||
void SetLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up, MxBool);
|
void SetLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up, MxBool);
|
||||||
|
|
||||||
inline LegoROI* GetROI() { return m_roi; }
|
inline LegoROI* GetROI() { return m_roi; }
|
||||||
inline MxU8 GetFlags() { return m_flags; }
|
inline MxU8 GetFlags() { return m_flags; }
|
||||||
|
|
||||||
|
inline void SetFlags(MxU8 p_flags) { m_flags = p_flags; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Init();
|
void Init();
|
||||||
void SetWorld();
|
void SetWorld();
|
||||||
|
@@ -35,6 +35,8 @@ public:
|
|||||||
|
|
||||||
void SetEntityLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up);
|
void SetEntityLocation(Mx3DPointFloat& p_location, Mx3DPointFloat& p_direction, Mx3DPointFloat& p_up);
|
||||||
|
|
||||||
|
inline LegoEntity* GetEntity() { return m_entity; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100535a0
|
// SYNTHETIC: LEGO1 0x100535a0
|
||||||
// LegoEntityPresenter::`scalar deleting destructor'
|
// LegoEntityPresenter::`scalar deleting destructor'
|
||||||
|
|
||||||
|
@@ -37,6 +37,8 @@ protected:
|
|||||||
private:
|
private:
|
||||||
AutoROI* m_unk0x64; // 0x64
|
AutoROI* m_unk0x64; // 0x64
|
||||||
MxBool m_addedToView; // 0x68
|
MxBool m_addedToView; // 0x68
|
||||||
|
|
||||||
|
undefined4 LoadModel(MxStreamChunk* p_chunk);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LEGOMODELPRESENTER_H
|
#endif // LEGOMODELPRESENTER_H
|
||||||
|
@@ -163,6 +163,12 @@ void LegoEntity::VTable0x4c()
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x100114e0
|
||||||
|
void LegoEntity::FUN_100114e0(MxU8 p_unk0x59)
|
||||||
|
{
|
||||||
|
m_unk0x59 = p_unk0x59;
|
||||||
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100114f0
|
// STUB: LEGO1 0x100114f0
|
||||||
MxLong LegoEntity::Notify(MxParam& p_param)
|
MxLong LegoEntity::Notify(MxParam& p_param)
|
||||||
{
|
{
|
||||||
|
@@ -1,5 +1,11 @@
|
|||||||
#include "legomodelpresenter.h"
|
#include "legomodelpresenter.h"
|
||||||
|
|
||||||
|
#include "legoentity.h"
|
||||||
|
#include "legoentitypresenter.h"
|
||||||
|
#include "legoomni.h"
|
||||||
|
#include "legovideomanager.h"
|
||||||
|
#include "mxcompositepresenter.h"
|
||||||
|
|
||||||
// GLOBAL: LEGO1 0x100f7ae0
|
// GLOBAL: LEGO1 0x100f7ae0
|
||||||
int g_modelPresenterConfig = 1;
|
int g_modelPresenterConfig = 1;
|
||||||
|
|
||||||
@@ -22,16 +28,76 @@ void LegoModelPresenter::Destroy(MxBool p_fromDestructor)
|
|||||||
m_unk0x64 = 0;
|
m_unk0x64 = 0;
|
||||||
m_addedToView = FALSE;
|
m_addedToView = FALSE;
|
||||||
m_criticalSection.Leave();
|
m_criticalSection.Leave();
|
||||||
|
|
||||||
if (!p_fromDestructor) {
|
if (!p_fromDestructor) {
|
||||||
MxVideoPresenter::Destroy(FALSE);
|
MxVideoPresenter::Destroy(FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10080050
|
// STUB: LEGO1 0x1007f6b0
|
||||||
void LegoModelPresenter::ReadyTickle()
|
undefined4 LegoModelPresenter::LoadModel(MxStreamChunk* p_chunk)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
SetTickleState(e_starting);
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10080050
|
||||||
|
void LegoModelPresenter::ReadyTickle()
|
||||||
|
{
|
||||||
|
if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoEntityPresenter") &&
|
||||||
|
m_compositePresenter->GetCurrentTickleState() <= e_ready) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ParseExtra();
|
||||||
|
|
||||||
|
if (m_unk0x64 != NULL) {
|
||||||
|
if (m_compositePresenter && m_compositePresenter->IsA("LegoEntityPresenter")) {
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)
|
||||||
|
->GetEntity()
|
||||||
|
->SetROI((LegoROI*) m_unk0x64, m_addedToView, TRUE);
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)
|
||||||
|
->GetEntity()
|
||||||
|
->SetFlags(
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2
|
||||||
|
);
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->FUN_100114e0(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ParseExtra();
|
||||||
|
ProgressTickleState(e_starting);
|
||||||
|
EndAction();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MxStreamChunk* chunk = m_subscriber->CurrentChunk();
|
||||||
|
|
||||||
|
if (chunk != NULL && chunk->GetTime() <= m_action->GetElapsedTime()) {
|
||||||
|
chunk = m_subscriber->NextChunk();
|
||||||
|
undefined4 und = LoadModel(chunk);
|
||||||
|
m_subscriber->DestroyChunk(chunk);
|
||||||
|
|
||||||
|
if (und == 0) {
|
||||||
|
VideoManager()->Get3DManager()->GetLego3DView()->Add(*m_unk0x64);
|
||||||
|
VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_unk0x64);
|
||||||
|
|
||||||
|
if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoEntityPresenter")) {
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)
|
||||||
|
->GetEntity()
|
||||||
|
->SetROI((LegoROI*) m_unk0x64, TRUE, TRUE);
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)
|
||||||
|
->GetEntity()
|
||||||
|
->SetFlags(
|
||||||
|
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
ParseExtra();
|
||||||
|
ProgressTickleState(e_starting);
|
||||||
|
}
|
||||||
|
|
||||||
|
EndAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100801b0
|
// STUB: LEGO1 0x100801b0
|
||||||
|
Reference in New Issue
Block a user