Using an enum channelType_e rather than raw values for bone channel types

This commit is contained in:
smallmodel 2024-06-13 23:04:33 +02:00
parent 02ef85e390
commit 72e315bce1
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
4 changed files with 31 additions and 24 deletions

View file

@ -241,36 +241,36 @@ bool IsBogusChannelName(const char *name)
return false;
}
int GetBoneChannelType(const char* name)
channelType_t GetBoneChannelType(const char* name)
{
size_t len;
if (!name) {
return 2;
return CHANNEL_NONE;
}
if (IsBogusChannelName(name)) {
return 2;
return CHANNEL_NONE;
}
len = strlen(name);
if (len < 4) {
return 3;
return CHANNEL_VALUE;
}
if (!strcmp(name + len - 4, " rot")) {
return 0;
return CHANNEL_ROTATION;
}
if (!strcmp(name + len - 4, " pos")) {
return 1;
return CHANNEL_POSITION;
}
if (len >= 6 && !strcmp(name + len - 6, " rotFK")) {
return 2;
return CHANNEL_NONE;
}
return 3;
return CHANNEL_VALUE;
}
int ChannelNameTable::RegisterChannel(const char *name)

View file

@ -79,7 +79,7 @@ typedef struct skelAnimDataGameHeader_s skelAnimDataGameHeader_t;
typedef struct skelAnimDataGameHeader_s {
int flags;
int nBytesUsed;
size_t nBytesUsed;
bool bHasDelta;
bool bHasMorph;
bool bHasUpper;

View file

@ -71,7 +71,7 @@ skelAnimDataGameHeader_t *EncodeFrames(
skanGameFrame *pFrame;
size_t frameSize;
int indexLastFrameAdded;
int channelType;
channelType_t channelType;
pChannel = enAnim->ary_channels;
endFrameCap = enAnim->numFrames - 2;
@ -82,7 +82,7 @@ skelAnimDataGameHeader_t *EncodeFrames(
channelType = GetBoneChannelType(enAnim->channelList.ChannelName(channelNames, i));
switch (channelType) {
case 0:
case CHANNEL_ROTATION:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(vec4_t));
frameCnt = 0;
for (j = 0; j < enAnim->numFrames; j++) {
@ -125,7 +125,7 @@ skelAnimDataGameHeader_t *EncodeFrames(
pCurrFrame++;
}
break;
case 1:
case CHANNEL_POSITION:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(vec3_t));
frameCnt = 0;
for (j = 0; j < enAnim->numFrames; j++) {
@ -167,11 +167,11 @@ skelAnimDataGameHeader_t *EncodeFrames(
pCurrFrame++;
}
break;
case 2:
case CHANNEL_NONE:
pChannel->ary_frames = NULL;
pChannel->nFramesInChannel = 0;
break;
case 3:
case CHANNEL_VALUE:
default:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(float));
frameCnt = 0;
@ -433,7 +433,7 @@ void ReadEncodedFrames(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
size_t frameSize;
int frameCnt;
int i, j;
int channelType;
channelType_t channelType;
vec4_t channelData;
for (i = 0; i < enAnim->nTotalChannels; i++) {
@ -443,7 +443,7 @@ void ReadEncodedFrames(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
frameCnt = MSG_ReadShort(msg);
switch (channelType) {
case 0:
case CHANNEL_ROTATION:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(vec4_t));
pFrame = (skanGameFrame *)Skel_Alloc(frameSize * frameCnt);
@ -462,7 +462,7 @@ void ReadEncodedFrames(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
pFrame->pChannelData[3] = LittleFloat(channelData[3]);
}
break;
case 1:
case CHANNEL_POSITION:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(vec3_t));
pFrame = (skanGameFrame *)Skel_Alloc(frameSize * frameCnt);
@ -480,7 +480,7 @@ void ReadEncodedFrames(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
pFrame->pChannelData[2] = LittleFloat(channelData[2]);
}
break;
case 2:
case CHANNEL_NONE:
pChannel->ary_frames = NULL;
pChannel->nFramesInChannel = 0;
@ -490,7 +490,7 @@ void ReadEncodedFrames(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
MSG_ReadData(msg, channelData, sizeof(vec4_t));
}
break;
case 3:
case CHANNEL_VALUE:
default:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(float));
@ -521,7 +521,7 @@ void ReadEncodedFramesEx(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
int frameCnt;
int i, j;
const char *name;
int type;
channelType_t type;
for (i = 0; i < enAnim->nTotalChannels; i++) {
pChannel = &enAnim->ary_channels[i];
@ -534,7 +534,7 @@ void ReadEncodedFramesEx(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
//
// 4 channels (Quat)
//
case 0:
case CHANNEL_ROTATION:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(vec4_t));
pFrame = (skanGameFrame *)Skel_Alloc(frameSize * frameCnt);
pChannel->ary_frames = pFrame;
@ -553,7 +553,7 @@ void ReadEncodedFramesEx(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
//
// 3 channels (Position)
//
case 1:
case CHANNEL_POSITION:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(vec3_t));
pFrame = (skanGameFrame *)Skel_Alloc(frameSize * frameCnt);
pChannel->ary_frames = pFrame;
@ -571,7 +571,7 @@ void ReadEncodedFramesEx(msg_t *msg, skelAnimDataGameHeader_t *enAnim)
//
// 1 channel (frame)
//
case 3:
case CHANNEL_VALUE:
frameSize = (sizeof(skanGameFrame) - sizeof(skanGameFrame::pChannelData) + sizeof(float) * 1);
pFrame = (skanGameFrame *)Skel_Alloc(frameSize * frameCnt);
pChannel->ary_frames = pFrame;

View file

@ -57,7 +57,14 @@ private:
void SetChannelName(ChannelName_t *channel, const char *newName);
};
int GetBoneChannelType(const char* name);
typedef enum channelType_e {
CHANNEL_ROTATION,
CHANNEL_POSITION,
CHANNEL_NONE,
CHANNEL_VALUE
} channelType_t;
channelType_t GetBoneChannelType(const char* name);
#else