mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 08:24:16 +00:00
Improve Helicopter::Animate()
(#1251)
* Small improvements * More improvements * Small drive-by refactor * Do not inline `UnknownMx4DPointFloat::FUN_10004520()` * Fix `Act3Brickster::Animate` * Fixes --------- Co-authored-by: jonschz <jonschz@users.noreply.github.com> Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
@@ -386,36 +386,34 @@ void Helicopter::VTable0x74(Matrix4& p_transform)
|
|||||||
// FUNCTION: LEGO1 0x10003ee0
|
// FUNCTION: LEGO1 0x10003ee0
|
||||||
void Helicopter::Animate(float p_time)
|
void Helicopter::Animate(float p_time)
|
||||||
{
|
{
|
||||||
MxU32 state = m_state->GetUnkown8();
|
if (m_state->m_unk0x08 == 4 || m_state->m_unk0x08 == 5) {
|
||||||
switch (state) {
|
float f = m_unk0x1f0 - p_time + 3000.0f;
|
||||||
default:
|
|
||||||
LegoPathActor::Animate(p_time);
|
|
||||||
return;
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
float f = m_unk0x1f0 - p_time + 3000;
|
|
||||||
if (f >= 0) {
|
if (f >= 0) {
|
||||||
float f2 = f / 3000 + 1;
|
float f2 = f / -3000.0f + 1;
|
||||||
if (f2 < 0) {
|
if (f2 < 0) {
|
||||||
f2 = 0;
|
f2 = 0;
|
||||||
}
|
}
|
||||||
if (1.0f < f2) {
|
if (f2 > 1.0f) {
|
||||||
f2 = 1.0f;
|
f2 = 1.0f;
|
||||||
}
|
}
|
||||||
Vector3 v(m_unk0x160[3]);
|
|
||||||
MxMatrix mat;
|
MxMatrix mat;
|
||||||
Vector3 v2(m_unk0x1a8[3]);
|
Vector3 v1(m_unk0x160[3]);
|
||||||
float* loc = m_unk0x1a8[3];
|
Vector3 v2(mat[3]);
|
||||||
|
Vector3 v3(m_unk0x1a8[3]);
|
||||||
|
|
||||||
mat.SetIdentity();
|
mat.SetIdentity();
|
||||||
m_unk0x1f4.BETA_1004aaa0(mat, f2);
|
m_unk0x1f4.BETA_1004aaa0(mat, f2);
|
||||||
v2.SetVector(loc);
|
|
||||||
v2 -= v;
|
v2 = v3;
|
||||||
|
v2 -= v1;
|
||||||
v2 *= f2;
|
v2 *= f2;
|
||||||
v2 += v;
|
v2 += v1;
|
||||||
|
|
||||||
m_world->GetCamera()->FUN_100123e0(mat, 0);
|
m_world->GetCamera()->FUN_100123e0(mat, 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (state == 4) {
|
if (m_state->m_unk0x08 == 4) {
|
||||||
((Act3*) m_world)->FUN_10073400();
|
((Act3*) m_world)->FUN_10073400();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -425,6 +423,9 @@ void Helicopter::Animate(float p_time)
|
|||||||
LegoPathActor::m_actorState = c_disabled;
|
LegoPathActor::m_actorState = c_disabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
LegoPathActor::Animate(p_time);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100042a0
|
// FUNCTION: LEGO1 0x100042a0
|
||||||
|
@@ -156,7 +156,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// FUNCTION: BETA10 0x1004aaa0
|
// 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];
|
float data[4];
|
||||||
Vector4 v(data);
|
Vector4 v(data);
|
||||||
@@ -196,17 +196,17 @@ inline long UnknownMx4DPointFloat::FUN_10004520()
|
|||||||
// FUNCTION: BETA10 0x1004ab10
|
// FUNCTION: BETA10 0x1004ab10
|
||||||
inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f)
|
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 = m_unk0x00;
|
||||||
p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0;
|
p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0;
|
||||||
return p_v.NormalizeQuaternion();
|
return p_v.NormalizeQuaternion();
|
||||||
}
|
}
|
||||||
else if (m_unk0x30 == 2) {
|
else if (m_unk0x30 == c_bit2) {
|
||||||
p_v = m_unk0x18;
|
p_v = m_unk0x18;
|
||||||
p_v[3] = p_f * acos((double) p_v[3]) * 2.0;
|
p_v[3] = p_f * acos((double) p_v[3]) * 2.0;
|
||||||
return p_v.NormalizeQuaternion();
|
return p_v.NormalizeQuaternion();
|
||||||
}
|
}
|
||||||
else if (m_unk0x30 == 3) {
|
else if (m_unk0x30 == (c_bit1 | c_bit2)) {
|
||||||
int i;
|
int i;
|
||||||
double d1 = p_v.Dot(&m_unk0x00, &m_unk0x18);
|
double d1 = p_v.Dot(&m_unk0x00, &m_unk0x18);
|
||||||
double a;
|
double a;
|
||||||
|
Reference in New Issue
Block a user