diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index 1d7f78e3..8d88e6bf 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -386,36 +386,34 @@ void Helicopter::VTable0x74(Matrix4& p_transform) // FUNCTION: LEGO1 0x10003ee0 void Helicopter::Animate(float p_time) { - MxU32 state = m_state->GetUnkown8(); - switch (state) { - default: - LegoPathActor::Animate(p_time); - return; - case 4: - case 5: - float f = m_unk0x1f0 - p_time + 3000; + if (m_state->m_unk0x08 == 4 || m_state->m_unk0x08 == 5) { + float f = m_unk0x1f0 - p_time + 3000.0f; if (f >= 0) { - float f2 = f / 3000 + 1; + float f2 = f / -3000.0f + 1; if (f2 < 0) { f2 = 0; } - if (1.0f < f2) { + if (f2 > 1.0f) { f2 = 1.0f; } - Vector3 v(m_unk0x160[3]); + MxMatrix mat; - Vector3 v2(m_unk0x1a8[3]); - float* loc = m_unk0x1a8[3]; + Vector3 v1(m_unk0x160[3]); + Vector3 v2(mat[3]); + Vector3 v3(m_unk0x1a8[3]); + mat.SetIdentity(); m_unk0x1f4.BETA_1004aaa0(mat, f2); - v2.SetVector(loc); - v2 -= v; + + v2 = v3; + v2 -= v1; v2 *= f2; - v2 += v; + v2 += v1; + m_world->GetCamera()->FUN_100123e0(mat, 0); } else { - if (state == 4) { + if (m_state->m_unk0x08 == 4) { ((Act3*) m_world)->FUN_10073400(); } else { @@ -425,6 +423,9 @@ void Helicopter::Animate(float p_time) LegoPathActor::m_actorState = c_disabled; } } + else { + LegoPathActor::Animate(p_time); + } } // FUNCTION: LEGO1 0x100042a0 diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index 15fd1ab0..d7c19b76 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -156,7 +156,7 @@ private: }; // FUNCTION: BETA10 0x1004aaa0 -int UnknownMx4DPointFloat::BETA_1004aaa0(Matrix4& p_matrix, float p_f) +inline int UnknownMx4DPointFloat::BETA_1004aaa0(Matrix4& p_matrix, float p_f) { float data[4]; Vector4 v(data); @@ -196,17 +196,17 @@ inline long UnknownMx4DPointFloat::FUN_10004520() // FUNCTION: BETA10 0x1004ab10 inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f) { - if (m_unk0x30 == 1) { + if (m_unk0x30 == c_bit1) { p_v = m_unk0x00; p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0; return p_v.NormalizeQuaternion(); } - else if (m_unk0x30 == 2) { + else if (m_unk0x30 == c_bit2) { p_v = m_unk0x18; p_v[3] = p_f * acos((double) p_v[3]) * 2.0; return p_v.NormalizeQuaternion(); } - else if (m_unk0x30 == 3) { + else if (m_unk0x30 == (c_bit1 | c_bit2)) { int i; double d1 = p_v.Dot(&m_unk0x00, &m_unk0x18); double a;