From 5b18297c68bc6199849f0cd882b1907b4427d55b Mon Sep 17 00:00:00 2001 From: minenice55 Date: Mon, 8 Sep 2025 13:21:10 -0400 Subject: [PATCH] prefcolor sorting --- src/m_menu.c | 1 + src/r_skins.c | 21 +++++++++++++++++++++ src/r_skins.h | 1 + 3 files changed, 23 insertions(+) diff --git a/src/m_menu.c b/src/m_menu.c index a542938c6..45a903763 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -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); diff --git a/src/r_skins.c b/src/r_skins.c index f9ca34c40..c39d37309 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -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; diff --git a/src/r_skins.h b/src/r_skins.h index a7311ed28..82669bc76 100644 --- a/src/r_skins.h +++ b/src/r_skins.h @@ -86,6 +86,7 @@ enum skinmenusortoption SKINMENUSORT_WEIGHT, SKINMENUSORT_ACCEL, SKINMENUSORT_HANDLING, + SKINMENUSORT_PREFCOLOR, NUMSKINMENUSORT, };