mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 17:36:12 -05:00
Implement/match LegoExtraActor:: WaitForAnimation, Restart (#768)
* Implement/match LegoExtraActor:: WaitForAnimation, Restart * whitespace --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
ce134e79ef
commit
a8eebe454e
15 changed files with 88 additions and 20 deletions
|
@ -51,7 +51,11 @@ class LegoAnimPresenter : public MxVideoPresenter {
|
||||||
virtual void VTable0x98(); // vtable+0x98
|
virtual void VTable0x98(); // vtable+0x98
|
||||||
|
|
||||||
// STUB: LEGO1 0x1000c990
|
// STUB: LEGO1 0x1000c990
|
||||||
virtual void VTable0x9c() {} // vtable+0x9c
|
virtual undefined4* VTable0x9c(undefined4& p_unk0x6c)
|
||||||
|
{
|
||||||
|
p_unk0x6c = m_unk0x6c;
|
||||||
|
return m_unk0x68;
|
||||||
|
} // vtable+0x9c
|
||||||
|
|
||||||
virtual void VTable0xa0(); // vtable+0xa0
|
virtual void VTable0xa0(); // vtable+0xa0
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ class LegoCarRaceActor : public virtual LegoRaceActor {
|
||||||
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
|
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
|
|
||||||
virtual void FUN_10080590();
|
virtual void FUN_10080590();
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,7 @@ class LegoEntity : public MxEntity {
|
||||||
|
|
||||||
inline MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; }
|
inline MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; }
|
||||||
inline MxU8 GetFlags() { return m_flags; }
|
inline MxU8 GetFlags() { return m_flags; }
|
||||||
|
inline MxFloat GetWorldSpeed() { return m_worldSpeed; }
|
||||||
inline LegoROI* GetROI() { return m_roi; }
|
inline LegoROI* GetROI() { return m_roi; }
|
||||||
inline MxU8 GetUnknown0x59() { return m_unk0x59; }
|
inline MxU8 GetUnknown0x59() { return m_unk0x59; }
|
||||||
|
|
||||||
|
|
|
@ -41,11 +41,12 @@ class LegoExtraActor : public virtual LegoAnimActor {
|
||||||
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
|
||||||
MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90
|
MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90
|
||||||
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4
|
void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4
|
||||||
void VTable0xc4() override; // vtable+0xc4
|
void VTable0xc4() override; // vtable+0xc4
|
||||||
|
|
||||||
virtual MxResult FUN_1002aae0();
|
virtual MxResult FUN_1002aae0();
|
||||||
|
void Restart();
|
||||||
inline void FUN_1002ad8a();
|
inline void FUN_1002ad8a();
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x1002b760
|
// SYNTHETIC: LEGO1 0x1002b760
|
||||||
|
@ -56,7 +57,7 @@ class LegoExtraActor : public virtual LegoAnimActor {
|
||||||
undefined m_unk0x0c; // 0x0c
|
undefined m_unk0x0c; // 0x0c
|
||||||
MxU8 m_axis; // 0x0d
|
MxU8 m_axis; // 0x0d
|
||||||
undefined m_unk0x0e; // 0x0e
|
undefined m_unk0x0e; // 0x0e
|
||||||
MxFloat m_unk0x10; // 0x10
|
MxFloat m_prevWorldSpeed; // 0x10
|
||||||
MxU8 m_unk0x14; // 0x14
|
MxU8 m_unk0x14; // 0x14
|
||||||
MxU8 m_unk0x15; // 0x15
|
MxU8 m_unk0x15; // 0x15
|
||||||
MxMatrix m_unk0x18; // 0x18
|
MxMatrix m_unk0x18; // 0x18
|
||||||
|
|
|
@ -37,7 +37,7 @@ class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap {
|
||||||
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
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
|
|
||||||
virtual void FUN_100136f0(float p_worldSpeed);
|
virtual void FUN_100136f0(float p_worldSpeed);
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ class LegoJetskiRaceActor : public virtual LegoCarRaceActor {
|
||||||
void VTable0x6c() override; // vtable+0x6c
|
void VTable0x6c() override; // vtable+0x6c
|
||||||
void VTable0x70(float p_float) override; // vtable+0x70
|
void VTable0x70(float p_float) override; // vtable+0x70
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
void VTable0x1c() override; // vtable+0x1c
|
void VTable0x1c() override; // vtable+0x1c
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10081d40
|
// SYNTHETIC: LEGO1 0x10081d40
|
||||||
|
|
|
@ -51,8 +51,8 @@ class LegoPathActor : public LegoActor {
|
||||||
// FUNCTION: LEGO1 0x10002d50
|
// FUNCTION: LEGO1 0x10002d50
|
||||||
virtual MxResult VTable0x94(LegoPathActor*, MxBool) { return 0; } // vtable+0x94
|
virtual MxResult VTable0x94(LegoPathActor*, MxBool) { return 0; } // vtable+0x94
|
||||||
|
|
||||||
virtual void VTable0x98(); // vtable+0x98
|
virtual void VTable0x98(); // vtable+0x98
|
||||||
virtual void VTable0x9c(); // vtable+0x9c
|
virtual MxResult WaitForAnimation(); // vtable+0x9c
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10002d60
|
// FUNCTION: LEGO1 0x10002d60
|
||||||
virtual MxS32 VTable0xa0() { return 0; } // vtable+0xa0
|
virtual MxS32 VTable0xa0() { return 0; } // vtable+0xa0
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define LEGOPATHBOUNDARY_H
|
#define LEGOPATHBOUNDARY_H
|
||||||
|
|
||||||
#include "geom/legowegedge.h"
|
#include "geom/legowegedge.h"
|
||||||
|
#include "legoanimpresenter.h"
|
||||||
#include "mxstl/stlcompat.h"
|
#include "mxstl/stlcompat.h"
|
||||||
#include "mxtypes.h"
|
#include "mxtypes.h"
|
||||||
|
|
||||||
|
@ -9,6 +10,12 @@ struct LegoPathBoundaryComparator {
|
||||||
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
MxBool operator()(const undefined*, const undefined*) const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LegoAnimPresenterSetCompare {
|
||||||
|
MxBool operator()(const LegoAnimPresenter*, const LegoAnimPresenter*) const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef set<LegoAnimPresenter*, LegoAnimPresenterSetCompare> LegoAnimPresenterSet;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d8618
|
// VTABLE: LEGO1 0x100d8618
|
||||||
// SIZE 0x74
|
// SIZE 0x74
|
||||||
class LegoPathBoundary : public LegoWEGEdge {
|
class LegoPathBoundary : public LegoWEGEdge {
|
||||||
|
@ -17,10 +24,16 @@ class LegoPathBoundary : public LegoWEGEdge {
|
||||||
|
|
||||||
// STUB: LEGO1 0x10047a80
|
// STUB: LEGO1 0x10047a80
|
||||||
// LegoPathBoundary::`scalar deleting destructor'
|
// LegoPathBoundary::`scalar deleting destructor'
|
||||||
|
inline LegoAnimPresenterSet* GetUnknown0x64() { return &m_unk0x64; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x54; // 0x54
|
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x54; // 0x54
|
||||||
map<undefined*, undefined*, LegoPathBoundaryComparator> m_unk0x64; // 0x64
|
LegoAnimPresenterSet m_unk0x64; // 0x64
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
// GLOBAL: LEGO1 0x100f3200
|
||||||
|
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Nil
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
#endif // LEGOPATHBOUNDARY_H
|
#endif // LEGOPATHBOUNDARY_H
|
||||||
|
|
|
@ -37,7 +37,7 @@ class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
|
||||||
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
|
||||||
void VTable0x98() override; // vtable+0x98
|
void VTable0x98() override; // vtable+0x98
|
||||||
void VTable0x9c() override; // vtable+0x9c
|
MxResult WaitForAnimation() override; // vtable+0x9c
|
||||||
|
|
||||||
virtual void FUN_10012ea0(float p_worldSpeed);
|
virtual void FUN_10012ea0(float p_worldSpeed);
|
||||||
virtual void FUN_10012ff0(float);
|
virtual void FUN_10012ff0(float);
|
||||||
|
|
|
@ -70,7 +70,8 @@ void LegoCarRaceActor::VTable0x98()
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10081d30
|
// STUB: LEGO1 0x10081d30
|
||||||
void LegoCarRaceActor::VTable0x9c()
|
MxResult LegoCarRaceActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,8 @@ void LegoJetski::VTable0x98()
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10014200
|
// STUB: LEGO1 0x10014200
|
||||||
void LegoJetski::VTable0x9c()
|
MxResult LegoJetski::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,8 @@ void LegoJetskiRaceActor::VTable0x98()
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100822e0
|
// STUB: LEGO1 0x100822e0
|
||||||
void LegoJetskiRaceActor::VTable0x9c()
|
MxResult LegoJetskiRaceActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ MxResult LegoExtraActor::FUN_1002aae0()
|
||||||
m_boundary = oldEdge;
|
m_boundary = oldEdge;
|
||||||
}
|
}
|
||||||
|
|
||||||
LegoPathActor::VTable0x9c();
|
LegoPathActor::WaitForAnimation();
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
|
||||||
FUN_1002ad8a();
|
FUN_1002ad8a();
|
||||||
SoundManager()->GetCacheSoundManager()->FUN_1003dae0("crash5", m_roi->GetName(), FALSE);
|
SoundManager()->GetCacheSoundManager()->FUN_1003dae0("crash5", m_roi->GetName(), FALSE);
|
||||||
m_scheduledTime = Timer()->GetTime() + m_disAnim->GetDuration();
|
m_scheduledTime = Timer()->GetTime() + m_disAnim->GetDuration();
|
||||||
m_unk0x10 = m_worldSpeed;
|
m_prevWorldSpeed = m_worldSpeed;
|
||||||
VTable0xc4();
|
VTable0xc4();
|
||||||
SetWorldSpeed(0);
|
SetWorldSpeed(0);
|
||||||
m_unk0x14 = 1;
|
m_unk0x14 = 1;
|
||||||
|
@ -273,10 +273,54 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002b290
|
// FUNCTION: LEGO1 0x1002b290
|
||||||
void LegoExtraActor::VTable0x9c()
|
MxResult LegoExtraActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
LegoPathBoundary* oldBoundary = m_boundary;
|
||||||
|
MxResult result = LegoPathActor::WaitForAnimation();
|
||||||
|
|
||||||
|
if (m_boundary != oldBoundary) {
|
||||||
|
MxU32 b = FALSE;
|
||||||
|
LegoAnimPresenterSet* set = m_boundary->GetUnknown0x64();
|
||||||
|
|
||||||
|
for (LegoAnimPresenterSet::iterator it = set->begin(); it != set->end(); it++) {
|
||||||
|
undefined4 tmp;
|
||||||
|
if ((*it)->VTable0x9c(tmp)) {
|
||||||
|
b = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b) {
|
||||||
|
m_unk0x0e = 1;
|
||||||
|
m_prevWorldSpeed = GetWorldSpeed();
|
||||||
|
SetWorldSpeed(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1002b370
|
||||||
|
void LegoExtraActor::Restart()
|
||||||
|
{
|
||||||
|
if (m_unk0x0e != 0) {
|
||||||
|
MxU32 b = FALSE;
|
||||||
|
LegoAnimPresenterSet* set = m_boundary->GetUnknown0x64();
|
||||||
|
|
||||||
|
for (LegoAnimPresenterSet::iterator it = set->begin(); it != set->end(); it++) {
|
||||||
|
undefined4 tmp;
|
||||||
|
if ((*it)->VTable0x9c(tmp)) {
|
||||||
|
b = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!b) {
|
||||||
|
SetWorldSpeed(m_prevWorldSpeed);
|
||||||
|
m_unk0x0e = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002b440
|
// STUB: LEGO1 0x1002b440
|
||||||
|
|
|
@ -75,9 +75,10 @@ void LegoPathActor::ParseAction(char*)
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002f1b0
|
// STUB: LEGO1 0x1002f1b0
|
||||||
void LegoPathActor::VTable0x9c()
|
MxResult LegoPathActor::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002f650
|
// STUB: LEGO1 0x1002f650
|
||||||
|
|
|
@ -89,7 +89,8 @@ void LegoRaceCar::VTable0x98()
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10014580
|
// STUB: LEGO1 0x10014580
|
||||||
void LegoRaceCar::VTable0x9c()
|
MxResult LegoRaceCar::WaitForAnimation()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue