Load bone names from IQM file if available

This commit is contained in:
PencilAmazing 2023-01-22 12:26:37 -05:00
parent d224414eb1
commit 2adf5902f4

View File

@ -4438,6 +4438,12 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
unsigned int num_extensions, ofs_extensions; unsigned int num_extensions, ofs_extensions;
} IQMHeader; } IQMHeader;
typedef struct IQMJoint {
unsigned int name;
int parent;
float translate[3], rotate[4], scale[3];
} IQMJoint;
typedef struct IQMPose { typedef struct IQMPose {
int parent; int parent;
unsigned int mask; unsigned int mask;
@ -4491,6 +4497,10 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
//fread(framedata, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short), 1, iqmFile); //fread(framedata, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short), 1, iqmFile);
memcpy(framedata, fileDataPtr + iqmHeader->ofs_frames, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short)); memcpy(framedata, fileDataPtr + iqmHeader->ofs_frames, iqmHeader->num_frames*iqmHeader->num_framechannels*sizeof(unsigned short));
// joints
IQMJoint* joints = RL_MALLOC(iqmHeader->num_joints * sizeof(IQMJoint));
memcpy(joints, fileDataPtr + iqmHeader->ofs_joints, iqmHeader->num_joints * sizeof(IQMJoint));
for (unsigned int a = 0; a < iqmHeader->num_anims; a++) for (unsigned int a = 0; a < iqmHeader->num_anims; a++)
{ {
animations[a].frameCount = anim[a].num_frames; animations[a].frameCount = anim[a].num_frames;
@ -4501,7 +4511,9 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
for (unsigned int j = 0; j < iqmHeader->num_poses; j++) for (unsigned int j = 0; j < iqmHeader->num_poses; j++)
{ {
strcpy(animations[a].bones[j].name, "ANIMJOINTNAME"); // If animations and skeleton are in the same file, copy bone names to anim
if(iqmHeader->num_joints > 0)
memcpy(animations[a].bones[j].name, fileDataPtr + iqmHeader->ofs_text + joints[j].name, BONE_NAME_LENGTH * sizeof(char));
animations[a].bones[j].parent = poses[j].parent; animations[a].bones[j].parent = poses[j].parent;
} }
@ -4615,6 +4627,7 @@ static ModelAnimation *LoadModelAnimationsIQM(const char *fileName, unsigned int
RL_FREE(fileData); RL_FREE(fileData);
RL_FREE(joints);
RL_FREE(framedata); RL_FREE(framedata);
RL_FREE(poses); RL_FREE(poses);
RL_FREE(anim); RL_FREE(anim);