mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 17:36:12 -05:00
Implement LegoExtraActor::VTable0x70 (#769)
* Implement LegoExtraActor::VTable0x70 * whitespace --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
a8eebe454e
commit
32f1621ec7
2 changed files with 58 additions and 7 deletions
|
@ -58,7 +58,7 @@ class LegoExtraActor : public virtual LegoAnimActor {
|
||||||
MxU8 m_axis; // 0x0d
|
MxU8 m_axis; // 0x0d
|
||||||
undefined m_unk0x0e; // 0x0e
|
undefined m_unk0x0e; // 0x0e
|
||||||
MxFloat m_prevWorldSpeed; // 0x10
|
MxFloat m_prevWorldSpeed; // 0x10
|
||||||
MxU8 m_unk0x14; // 0x14
|
MxU8 m_whichAnim; // 0x14
|
||||||
MxU8 m_unk0x15; // 0x15
|
MxU8 m_unk0x15; // 0x15
|
||||||
MxMatrix m_unk0x18; // 0x18
|
MxMatrix m_unk0x18; // 0x18
|
||||||
LegoAnimActorStruct* m_assAnim; // 0x60
|
LegoAnimActorStruct* m_assAnim; // 0x60
|
||||||
|
|
|
@ -29,7 +29,7 @@ LegoExtraActor::LegoExtraActor()
|
||||||
m_scheduledTime = 0;
|
m_scheduledTime = 0;
|
||||||
m_unk0x0c = 0;
|
m_unk0x0c = 0;
|
||||||
m_unk0x0e = 0;
|
m_unk0x0e = 0;
|
||||||
m_unk0x14 = 0;
|
m_whichAnim = 0;
|
||||||
m_assAnim = NULL;
|
m_assAnim = NULL;
|
||||||
m_disAnim = NULL;
|
m_disAnim = NULL;
|
||||||
m_unk0x15 = 0;
|
m_unk0x15 = 0;
|
||||||
|
@ -232,7 +232,7 @@ MxResult LegoExtraActor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
|
||||||
m_prevWorldSpeed = m_worldSpeed;
|
m_prevWorldSpeed = m_worldSpeed;
|
||||||
VTable0xc4();
|
VTable0xc4();
|
||||||
SetWorldSpeed(0);
|
SetWorldSpeed(0);
|
||||||
m_unk0x14 = 1;
|
m_whichAnim = 1;
|
||||||
m_state = 0x101;
|
m_state = 0x101;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,16 +323,67 @@ void LegoExtraActor::Restart()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1002b440
|
// FUNCTION: LEGO1 0x1002b440
|
||||||
void LegoExtraActor::VTable0x70(float)
|
void LegoExtraActor::VTable0x70(float p_time)
|
||||||
{
|
{
|
||||||
// TODO
|
LegoAnimActorStruct* laas = NULL;
|
||||||
|
|
||||||
|
switch (m_whichAnim) {
|
||||||
|
case 0:
|
||||||
|
LegoAnimActor::VTable0x70(p_time);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (m_scheduledTime < p_time) {
|
||||||
|
m_whichAnim = 2;
|
||||||
|
m_state = 0x101;
|
||||||
|
m_scheduledTime = m_assAnim->GetDuration() + p_time;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
laas = m_disAnim;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
if (m_scheduledTime < p_time) {
|
||||||
|
m_whichAnim = 0;
|
||||||
|
m_state = 0;
|
||||||
|
SetWorldSpeed(m_prevWorldSpeed);
|
||||||
|
m_roi->FUN_100a58f0(m_unk0x18);
|
||||||
|
m_lastTime = p_time;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
laas = m_assAnim;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (laas) {
|
||||||
|
float duration2, duration;
|
||||||
|
duration = laas->GetDuration();
|
||||||
|
duration2 = p_time - (m_scheduledTime - duration);
|
||||||
|
|
||||||
|
if (duration2 < 0) {
|
||||||
|
duration2 = 0;
|
||||||
|
}
|
||||||
|
else if (duration2 > duration) {
|
||||||
|
duration2 = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
MxMatrix matrix(m_roi->GetLocal2World());
|
||||||
|
LegoTreeNode* root = laas->m_AnimTreePtr->GetRoot();
|
||||||
|
MxS32 count = root->GetNumChildren();
|
||||||
|
|
||||||
|
for (MxS32 i = 0; i < count; i++) {
|
||||||
|
LegoROI::FUN_100a8e80(root->GetChild(i), matrix, duration2, laas->m_roiMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1002b5d0
|
// FUNCTION: LEGO1 0x1002b5d0
|
||||||
void LegoExtraActor::VTable0x74(Matrix4& p_transform)
|
void LegoExtraActor::VTable0x74(Matrix4& p_transform)
|
||||||
{
|
{
|
||||||
if (m_unk0x14 == 0) {
|
if (m_whichAnim == 0) {
|
||||||
LegoAnimActor::VTable0x74(p_transform);
|
LegoAnimActor::VTable0x74(p_transform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue