Use a macro constant for movement/action skan blend frames

This commit is contained in:
smallmodel 2024-10-27 21:39:16 +01:00
parent afe1ba47cf
commit e8dfa0206b
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
3 changed files with 22 additions and 13 deletions

View file

@ -401,7 +401,7 @@ void skeletor_c::SetPose(
m_frameRadius = 2.0f;
animWeight = 0.0f;
movementBlendFrame = 0;
actionBlendFrame = 32;
actionBlendFrame = MAX_SKEL_BLEND_MOVEMENT_FRAMES;
aliases = m_Tiki->a->m_aliases;
for (blendNum = 0; blendNum < MAX_FRAMEINFOS; blendNum++) {
@ -491,8 +491,11 @@ void skeletor_c::SetPose(
}
m_frameList.numMovementFrames = movementBlendFrame;
m_frameList.numActionFrames = actionBlendFrame - 32;
m_frameList.numActionFrames = actionBlendFrame - MAX_SKEL_BLEND_MOVEMENT_FRAMES;
m_frameList.actionWeight = actionWeight;
assert(m_frameList.numMovementFrames < MAX_SKEL_BLEND_MOVEMENT_FRAMES);
assert(m_frameList.numActionFrames < MAX_SKEL_BLEND_ACTION_FRAMES);
}
static SkelMat4 GetGlobalDefaultPosition(skelBone_Base *bone)
@ -692,9 +695,10 @@ void SkeletorGetAnimFrame(
if (!animData->bHasDelta) {
frameList.numMovementFrames = 0;
frameList.numActionFrames = 1;
frameList.m_blendInfo[32].weight = 1.0;
frameList.m_blendInfo[32].pAnimationData = animData;
frameList.m_blendInfo[32].frame = frame;
frameList.m_blendInfo[MAX_SKEL_BLEND_MOVEMENT_FRAMES].weight = 1.0;
frameList.m_blendInfo[MAX_SKEL_BLEND_MOVEMENT_FRAMES].pAnimationData = animData;
frameList.m_blendInfo[MAX_SKEL_BLEND_MOVEMENT_FRAMES].frame = frame;
} else {
frameList.numMovementFrames = 1;
frameList.numActionFrames = 0;
@ -907,9 +911,10 @@ void TIKI_GetSkelAnimFrameInternal(
if (!animData || !animData->bHasDelta) {
frameList.numMovementFrames = 0;
frameList.numActionFrames = 1;
frameList.m_blendInfo[32].weight = 1.0;
frameList.m_blendInfo[32].pAnimationData = animData;
frameList.m_blendInfo[32].frame = frame;
frameList.m_blendInfo[MAX_SKEL_BLEND_MOVEMENT_FRAMES].weight = 1.0;
frameList.m_blendInfo[MAX_SKEL_BLEND_MOVEMENT_FRAMES].pAnimationData = animData;
frameList.m_blendInfo[MAX_SKEL_BLEND_MOVEMENT_FRAMES].frame = frame;
} else {
frameList.numMovementFrames = 1;
frameList.numActionFrames = 0;
@ -1117,8 +1122,8 @@ int skeletor_c::GetMorphWeightFrame(int *data)
}
}
for (blendNum = 32; blendNum < m_frameList.numActionFrames + 32; blendNum++) {
const skanBlendInfo& blendInfo = m_frameList.m_blendInfo[blendNum];
for (blendNum = 0; blendNum < m_frameList.numActionFrames; blendNum++) {
const skanBlendInfo& blendInfo = m_frameList.m_blendInfo[blendNum + MAX_SKEL_BLEND_MOVEMENT_FRAMES];
weight = blendInfo.weight;
if (weight > 0.001) {

View file

@ -35,6 +35,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "skeletor_name_lists.h"
#include "skeletor_internal.h"
#define MAX_SKEL_BLEND_MOVEMENT_FRAMES 32
#define MAX_SKEL_BLEND_ACTION_FRAMES 32
#define MAX_SKEL_BLEND_FRAMES (MAX_SKEL_BLEND_MOVEMENT_FRAMES + MAX_SKEL_BLEND_ACTION_FRAMES)
typedef struct skelAnimFrame_s {
float radius;
SkelVec3 bounds[2];
@ -70,7 +74,7 @@ public:
short int numMovementFrames;
short int numActionFrames;
float actionWeight;
skanBlendInfo m_blendInfo[64];
skanBlendInfo m_blendInfo[MAX_SKEL_BLEND_FRAMES];
public:
SkelQuat GetSlerpValue(int globalChannelNum) const;

View file

@ -232,7 +232,7 @@ SkelQuat skelAnimStoreFrameList_c::GetSlerpValue(int globalChannelNum) const
if (actionWeight > 0.001) {
for (i = 0; i < numActionFrames; i++) {
pFrame = &m_blendInfo[i + 32];
pFrame = &m_blendInfo[i + MAX_SKEL_BLEND_MOVEMENT_FRAMES];
localChannelNum = pFrame->pAnimationData->channelList.GetLocalFromGlobal(globalChannelNum);
if (localChannelNum >= 0) {
@ -381,7 +381,7 @@ void skelAnimStoreFrameList_c::GetLerpValue3(int globalChannelNum, SkelVec3 *out
VectorClear(result);
for (i = 0; i < numActionFrames; i++) {
pFrame = &m_blendInfo[i + 32];
pFrame = &m_blendInfo[i + MAX_SKEL_BLEND_MOVEMENT_FRAMES];
localChannelNum = pFrame->pAnimationData->channelList.GetLocalFromGlobal(globalChannelNum);
if (localChannelNum >= 0) {