prefcolor sorting

This commit is contained in:
minenice55 2025-09-08 13:21:10 -04:00
parent 7f12437c76
commit 5b18297c68
3 changed files with 23 additions and 0 deletions

View file

@ -388,6 +388,7 @@ static CV_PossibleValue_t skinselectsort_cons_t[] = {
{SKINMENUSORT_WEIGHT, "Weight"},
{SKINMENUSORT_ACCEL, "Accel"},
{SKINMENUSORT_HANDLING, "Handling"},
{SKINMENUSORT_PREFCOLOR, "Preferred Colour"},
{0, NULL}
};
consvar_t cv_skinselectsort = CVAR_INIT ("skinselectsort", "Order Added", CV_SAVE|CV_CALL|CV_NOINIT, skinselectsort_cons_t, Skinsort_option_Onchange);

View file

@ -326,6 +326,24 @@ static int CompareSkinHandlings(const void *a, const void *b)
return CompareSkinWeights(b, a);
}
static int CompareSkinColours(const void *a, const void *b)
{
const skin_t *in1 = &skins[*(const INT32 *)a];
const skin_t *in2 = &skins[*(const INT32 *)b];
INT32 temp = 0;
// check prefcolor
if (in1->prefcolor < in2->prefcolor)
return -1;
else if (in2->prefcolor < in1->prefcolor)
return 1;
// then check name
if ((temp = strcmp(in1->realname, in2->realname)))
return temp;
// sort by internal name
return strcmp(in1->name, in2->name);
}
void SortSkins(void)
{
CONS_Printf("Sorting skin list (sort type %d)...\n", cv_skinselectsort.value);
@ -348,6 +366,9 @@ void SortSkins(void)
case SKINMENUSORT_HANDLING:
_sortingFunc = CompareSkinHandlings;
break;
case SKINMENUSORT_PREFCOLOR:
_sortingFunc = CompareSkinColours;
break;
default:
_sortingFunc = CompareSkinIds;
break;

View file

@ -86,6 +86,7 @@ enum skinmenusortoption
SKINMENUSORT_WEIGHT,
SKINMENUSORT_ACCEL,
SKINMENUSORT_HANDLING,
SKINMENUSORT_PREFCOLOR,
NUMSKINMENUSORT,
};