mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 15:37:55 -05:00
Implement IslePathActor::VTable0xe0 & VTable0xec (#788)
* Implement IslePathActor::VTable0xe0 & VTable0xec * Revert random change
This commit is contained in:
parent
8cbb094b75
commit
4374891ac8
5 changed files with 77 additions and 11 deletions
|
@ -54,7 +54,7 @@ class IslePathActor : public LegoPathActor {
|
|||
virtual void VTable0xe0(); // vtable+0xe0
|
||||
virtual void VTable0xe4(); // vtable+0xe4
|
||||
virtual void VTable0xe8(LegoGameState::Area, MxBool, MxU8); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix, LegoPathBoundary*, MxBool); // vtable+0xec
|
||||
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset);
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10002ff0
|
||||
// IslePathActor::`scalar deleting destructor'
|
||||
|
@ -62,9 +62,11 @@ class IslePathActor : public LegoPathActor {
|
|||
inline void SetWorld(LegoWorld* p_world) { m_world = p_world; }
|
||||
inline LegoWorld* GetWorld() { return m_world; }
|
||||
|
||||
void FUN_1001b660();
|
||||
|
||||
protected:
|
||||
LegoWorld* m_world; // 0x154
|
||||
MxFloat m_unk0x158; // 0x158
|
||||
IslePathActor* m_unk0x158; // 0x158
|
||||
MxFloat m_unk0x15c; // 0x15c
|
||||
};
|
||||
|
||||
|
|
|
@ -72,6 +72,12 @@ class LegoNavController : public MxCore {
|
|||
);
|
||||
static MxResult UpdateCameraLocation(MxU32 p_location);
|
||||
static MxResult UpdateCameraLocation(const char* p_location);
|
||||
inline MxFloat GetMaxLinearVel() { return m_maxLinearVel; }
|
||||
inline void ResetLinearVel(MxFloat p_maxLinearVel)
|
||||
{
|
||||
m_maxLinearVel = p_maxLinearVel;
|
||||
m_trackDefault = 0;
|
||||
}
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10054c10
|
||||
// LegoNavController::`scalar deleting destructor'
|
||||
|
|
|
@ -20,6 +20,7 @@ Extra::ActionType MatchActionString(const char*);
|
|||
void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
|
||||
void SetCameraControllerFromIsle();
|
||||
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
|
||||
void FUN_1003eda0();
|
||||
MxBool RemoveFromCurrentWorld(MxAtomId& p_atomId, MxS32 p_id);
|
||||
void FUN_1003ef00(MxBool);
|
||||
void SetAppCursor(WPARAM p_wparam);
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
#include "islepathactor.h"
|
||||
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legonavcontroller.h"
|
||||
#include "legoutils.h"
|
||||
#include "misc.h"
|
||||
#include "mxnotificationparam.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(IslePathActor, 0x160)
|
||||
|
@ -53,10 +57,30 @@ MxLong IslePathActor::Notify(MxParam& p_param)
|
|||
return ret;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1001a350
|
||||
// FUNCTION: LEGO1 0x1001a350
|
||||
void IslePathActor::VTable0xe0()
|
||||
{
|
||||
// TODO
|
||||
m_roi->SetVisibility(FALSE);
|
||||
if (CurrentActor() != this) {
|
||||
m_unk0x15c = NavController()->GetMaxLinearVel();
|
||||
m_unk0x158 = CurrentActor();
|
||||
if (m_unk0x158) {
|
||||
m_unk0x158->ResetWorldTransform(FALSE);
|
||||
m_unk0x158->SetUserNavFlag(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
AnimationManager()->FUN_10061010(0);
|
||||
if (!m_cameraFlag) {
|
||||
ResetWorldTransform(TRUE);
|
||||
SetUserNavFlag(TRUE);
|
||||
|
||||
NavController()->ResetLinearVel(m_unk0x13c);
|
||||
|
||||
SetCurrentActor(this);
|
||||
FUN_1001b660();
|
||||
FUN_10010c30();
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1001a3f0
|
||||
|
@ -71,8 +95,35 @@ void IslePathActor::VTable0xe8(LegoGameState::Area, MxBool, MxU8)
|
|||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1001b5b0
|
||||
void IslePathActor::VTable0xec(MxMatrix, LegoPathBoundary*, MxBool)
|
||||
// FUNCTION: LEGO1 0x1001b5b0
|
||||
void IslePathActor::VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset)
|
||||
{
|
||||
if (m_world) {
|
||||
m_world->FUN_1001fc80(this);
|
||||
m_world->Remove(this);
|
||||
VideoManager()->Get3DManager()->GetLego3DView()->Remove(*m_roi);
|
||||
}
|
||||
|
||||
m_world = CurrentWorld();
|
||||
if (p_reset) {
|
||||
VTable0xe0();
|
||||
}
|
||||
|
||||
m_world->FUN_1001fa70(this);
|
||||
p_boundary->AddActor(this);
|
||||
if (m_actorId != GameState()->GetActorId()) {
|
||||
m_world->Add(this);
|
||||
}
|
||||
|
||||
m_roi->FUN_100a58f0(p_transform);
|
||||
if (m_cameraFlag) {
|
||||
FUN_1003eda0();
|
||||
FUN_10010c30();
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1001b660
|
||||
void IslePathActor::FUN_1001b660()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
|
|
@ -243,6 +243,12 @@ void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bO
|
|||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1003eda0
|
||||
void FUN_1003eda0()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003ee00
|
||||
MxBool RemoveFromCurrentWorld(MxAtomId& p_atomId, MxS32 p_id)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue