mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-24 08:41:16 +00:00
Match
This commit is contained in:
parent
113cdaa34e
commit
6188c7e94c
@ -468,7 +468,7 @@ inline void LegoAnimNodeData::GetTranslation(
|
||||
n = FindKeys(
|
||||
p_time,
|
||||
p_numTranslationKeys & USHRT_MAX,
|
||||
(LegoU8*) p_translationKeys,
|
||||
p_translationKeys,
|
||||
sizeof(*p_translationKeys),
|
||||
i,
|
||||
p_old_index
|
||||
@ -528,14 +528,7 @@ inline void LegoAnimNodeData::GetTranslation(
|
||||
)
|
||||
{
|
||||
LegoU32 i, n;
|
||||
n = FindKeys(
|
||||
p_time,
|
||||
p_numRotationKeys & USHRT_MAX,
|
||||
(LegoU8*) p_rotationKeys,
|
||||
sizeof(*p_rotationKeys),
|
||||
i,
|
||||
p_old_index
|
||||
);
|
||||
n = FindKeys(p_time, p_numRotationKeys & USHRT_MAX, p_rotationKeys, sizeof(*p_rotationKeys), i, p_old_index);
|
||||
|
||||
switch (n) {
|
||||
case 0:
|
||||
@ -599,7 +592,7 @@ inline void LegoAnimNodeData::GetScale(
|
||||
{
|
||||
LegoU32 i, n;
|
||||
LegoFloat x, y, z;
|
||||
n = FindKeys(p_time, p_numScaleKeys & USHRT_MAX, (LegoU8*) p_scaleKeys, sizeof(*p_scaleKeys), i, p_old_index);
|
||||
n = FindKeys(p_time, p_numScaleKeys & USHRT_MAX, p_scaleKeys, sizeof(*p_scaleKeys), i, p_old_index);
|
||||
|
||||
switch (n) {
|
||||
case 0:
|
||||
@ -626,7 +619,7 @@ LegoBool LegoAnimNodeData::FUN_100a0990(LegoFloat p_time)
|
||||
LegoU32 index = GetMorphIndex();
|
||||
LegoBool result;
|
||||
|
||||
n = FindKeys(p_time, m_numMorphKeys, (LegoU8*) m_morphKeys, sizeof(*m_morphKeys), i, index);
|
||||
n = FindKeys(p_time, m_numMorphKeys, m_morphKeys, sizeof(*m_morphKeys), i, index);
|
||||
SetMorphIndex(index);
|
||||
|
||||
switch (n) {
|
||||
@ -646,52 +639,50 @@ LegoBool LegoAnimNodeData::FUN_100a0990(LegoFloat p_time)
|
||||
LegoU32 LegoAnimNodeData::FindKeys(
|
||||
LegoFloat p_time,
|
||||
LegoU32 p_numKeys,
|
||||
LegoU8* p_keys,
|
||||
LegoAnimKey* p_keys,
|
||||
LegoU32 p_size,
|
||||
LegoU32& p_new_index,
|
||||
LegoU32& p_old_index
|
||||
)
|
||||
{
|
||||
LegoU32 numKeys;
|
||||
if (p_numKeys == 0) {
|
||||
return 0;
|
||||
numKeys = 0;
|
||||
}
|
||||
|
||||
if (((LegoAnimKey*) p_keys)->GetTime() > p_time) {
|
||||
return 0;
|
||||
else if (p_time < GetKey(0, p_keys, p_size).GetTime()) {
|
||||
numKeys = 0;
|
||||
}
|
||||
|
||||
LegoS32 index = p_numKeys - 1;
|
||||
if (((LegoAnimKey*) (p_keys + (p_size * index)))->GetTime() < p_time) {
|
||||
p_new_index = index;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (p_time > ((LegoAnimKey*) (p_keys + (p_size * p_old_index)))->GetTime()) {
|
||||
LegoU8* ptr = (LegoU8*) (p_keys + (p_old_index + 1) * p_size);
|
||||
for (p_new_index = p_old_index; p_new_index < index; p_new_index++) {
|
||||
if (p_time < ((LegoAnimKey*) ptr)->GetTime()) {
|
||||
break;
|
||||
}
|
||||
ptr = ptr + p_size;
|
||||
}
|
||||
else if (p_time > GetKey(p_numKeys - 1, p_keys, p_size).GetTime()) {
|
||||
p_new_index = p_numKeys - 1;
|
||||
numKeys = 1;
|
||||
}
|
||||
else {
|
||||
LegoU8* ptr = p_keys;
|
||||
for (p_new_index = 0; p_new_index < index; p_new_index++) {
|
||||
ptr = ptr + p_size;
|
||||
if (p_time < ((LegoAnimKey*) ptr)->GetTime()) {
|
||||
break;
|
||||
}
|
||||
if (!(GetKey(p_old_index, p_keys, p_size).GetTime() > p_time)) {
|
||||
for (p_new_index = p_old_index;
|
||||
p_new_index < p_numKeys - 1 && p_time >= GetKey(p_new_index + 1, p_keys, p_size).GetTime();
|
||||
p_new_index++)
|
||||
;
|
||||
}
|
||||
else {
|
||||
for (p_new_index = 0;
|
||||
p_new_index < p_numKeys - 1 && p_time >= GetKey(p_new_index + 1, p_keys, p_size).GetTime();
|
||||
p_new_index++)
|
||||
;
|
||||
}
|
||||
|
||||
p_old_index = p_new_index;
|
||||
if (p_time == GetKey(p_new_index, p_keys, p_size).GetTime()) {
|
||||
numKeys = 1;
|
||||
}
|
||||
else if (p_new_index < p_numKeys - 1) {
|
||||
numKeys = 2;
|
||||
}
|
||||
else {
|
||||
numKeys = 0;
|
||||
}
|
||||
}
|
||||
|
||||
p_old_index = p_new_index;
|
||||
if (((LegoAnimKey*) (p_keys + (p_new_index * p_size)))->GetTime() == p_time) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return (p_new_index < index) ? 2 : 0;
|
||||
}
|
||||
return numKeys;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100a0b00
|
||||
@ -706,6 +697,11 @@ inline LegoFloat LegoAnimNodeData::Interpolate(
|
||||
return p_value1 + (p_value2 - p_value1) * (p_time - p_key1.GetTime()) / (p_key2.GetTime() - p_key1.GetTime());
|
||||
}
|
||||
|
||||
inline LegoAnimKey& LegoAnimNodeData::GetKey(LegoU32 p_i, LegoAnimKey* p_keys, LegoU32 p_size)
|
||||
{
|
||||
return *((LegoAnimKey*) (((LegoU8*) p_keys) + (p_i * p_size)));
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100a0b30
|
||||
LegoAnim::LegoAnim()
|
||||
{
|
||||
|
||||
@ -165,11 +165,12 @@ class LegoAnimNodeData : public LegoTreeNodeData {
|
||||
LegoAnimKey& p_key2,
|
||||
LegoFloat p_value2
|
||||
);
|
||||
inline static LegoAnimKey& GetKey(LegoU32 p_i, LegoAnimKey* p_keys, LegoU32 p_size);
|
||||
|
||||
static LegoU32 FindKeys(
|
||||
LegoFloat p_time,
|
||||
LegoU32 p_numKeys,
|
||||
LegoU8* p_keys,
|
||||
LegoAnimKey* p_keys,
|
||||
LegoU32 p_size,
|
||||
LegoU32& p_new_index,
|
||||
LegoU32& p_old_index
|
||||
|
||||
Loading…
Reference in New Issue
Block a user