Implement Doors::VTable0xcc

This commit is contained in:
jonschz 2024-11-23 14:31:08 +01:00
parent 710cfc8154
commit 93ce1f7b7b
2 changed files with 36 additions and 5 deletions

View File

@ -27,7 +27,7 @@ class Doors : public LegoPathActor {
void ParseAction(char* p_extra) override; // vtable+0x20 void ParseAction(char* p_extra) override; // vtable+0x20
void VTable0x70(float p_float) override; // vtable+0x70 void VTable0x70(float p_float) override; // vtable+0x70
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94 MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
virtual double VTable0xcc(float p_float); // vtable+0xcc virtual MxFloat VTable0xcc(float p_float); // vtable+0xcc
// SYNTHETIC: LEGO1 0x1000e580 // SYNTHETIC: LEGO1 0x1000e580
// Doors::`scalar deleting destructor' // Doors::`scalar deleting destructor'

View File

@ -4,11 +4,24 @@
#include "mxmisc.h" #include "mxmisc.h"
#include "mxtimer.h" #include "mxtimer.h"
#include "roi/legoroi.h" #include "roi/legoroi.h"
#include "tgl/tglvector.h"
#include <assert.h> #include <assert.h>
DECOMP_SIZE_ASSERT(Doors, 0x1f8) DECOMP_SIZE_ASSERT(Doors, 0x1f8)
// GLOBAL: LEGO1 0x100d8e7c
// GLOBAL: BETA10 0x101b954c
const MxFloat g_unk0x100d8e7c = 1000.0f;
// GLOBAL: LEGO1 0x100d8e80
// GLOBAL: BETA10 0x101b9550
const MxFloat g_unk0x100d8e80 = 4000.0f;
// GLOBAL: LEGO1 0x100d8e84
// GLOBAL: BETA10 0x101b9554
const MxFloat g_unk0x100d8e84 = 6000.0f;
// FUNCTION: LEGO1 0x10066100 // FUNCTION: LEGO1 0x10066100
// FUNCTION: BETA10 0x10026850 // FUNCTION: BETA10 0x10026850
MxResult Doors::VTable0x94(LegoPathActor* p_actor, MxBool p_bool) MxResult Doors::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
@ -25,11 +38,29 @@ MxResult Doors::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
return m_unk0x1f4 < 0.001 ? SUCCESS : FAILURE; return m_unk0x1f4 < 0.001 ? SUCCESS : FAILURE;
} }
// STUB: LEGO1 0x10066190 // FUNCTION: LEGO1 0x10066190
// FUNCTION: BETA10 0x1002696b // FUNCTION: BETA10 0x1002696b
double Doors::VTable0xcc(float p_float) MxFloat Doors::VTable0xcc(float p_float)
{ {
return 0.0; MxFloat fVar1;
fVar1 = p_float - m_unk0x158;
if (fVar1 <= 0.0f) {
return 0.0f;
}
if (fVar1 <= g_unk0x100d8e7c) {
return fVar1 * 1.570796 / g_unk0x100d8e7c;
}
else if (fVar1 <= g_unk0x100d8e7c + g_unk0x100d8e80) {
return 1.570796012878418; // Pi / 2
}
else if (fVar1 <= g_unk0x100d8e84) {
return (1.0 - ((fVar1 - g_unk0x100d8e80) - g_unk0x100d8e7c) / g_unk0x100d8e7c) * 1.570796;
}
return 0.0f;
} }
// FUNCTION: LEGO1 0x10066250 // FUNCTION: LEGO1 0x10066250
@ -71,7 +102,7 @@ void Doors::VTable0x70(float p_float)
m_unk0x1f4 = local8; m_unk0x1f4 = local8;
} }
if (m_unk0x158 + 6000.0f < p_float) { if (m_unk0x158 + g_unk0x100d8e84 < p_float) {
m_ltDoor->FUN_100a58f0(m_ltDoorLocal); m_ltDoor->FUN_100a58f0(m_ltDoorLocal);
m_rtDoor->FUN_100a58f0(m_rtDoorLocal); m_rtDoor->FUN_100a58f0(m_rtDoorLocal);
m_ltDoor->VTable0x14(); m_ltDoor->VTable0x14();