From 376ebd167262e79986e0b22dea4fda1b5c1046ee Mon Sep 17 00:00:00 2001 From: terencehill Date: Tue, 24 Dec 2024 03:05:31 +0100 Subject: [PATCH] Guide: sort Items and Powerups by type by loading them from default_order_items --- qcsrc/common/items/all.qh | 2 +- qcsrc/menu/xonotic/guide/guide.qh | 29 ++++++++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/qcsrc/common/items/all.qh b/qcsrc/common/items/all.qh index e956d2972..8294f638b 100644 --- a/qcsrc/common/items/all.qh +++ b/qcsrc/common/items/all.qh @@ -12,7 +12,7 @@ REGISTRY_DEPENDS(Items, Models) REGISTER_REGISTRY(Items) #define REGISTER_ITEM(id, inst) REGISTER(Items, ITEM, id, m_id, inst) -#ifdef CSQC +#ifndef SVQC // Copy Items registry here before it gets sorted alphabetically by REGISTRY_SORT // so we can keep items sorted by categories (as they appear in the code) IntrusiveList default_order_items; diff --git a/qcsrc/menu/xonotic/guide/guide.qh b/qcsrc/menu/xonotic/guide/guide.qh index de9d085fc..93ae97c77 100644 --- a/qcsrc/menu/xonotic/guide/guide.qh +++ b/qcsrc/menu/xonotic/guide/guide.qh @@ -33,13 +33,23 @@ ENDCLASS(DebugSource) .bool m_hidden; -#define _REGISTRY_SOURCE(id, arr_name, register_arr, cond) \ +#define _REGISTRY_SOURCE_FOREACH FOREACH +#define _REGISTRY_SOURCE_MAX(register_arr) // empty since register_arr##_MAX is already defined + +#define _IL_SOURCE_FOREACH IL_EACH +#define _IL_SOURCE_MAX(il_arr) \ + int il_arr##_MAX = 0; \ + IL_EACH(il_arr, !it.m_hidden, { il_arr##_MAX++; }); + +#define _LIST_SOURCE(id, arr_name, list_arr, cond, _LIST_SOURCE_MAX, _LIST_SOURCE_FOREACH) \ ArrayList arr_name##_MENU; \ int arr_name##_MENU_COUNT; \ STATIC_INIT_LATE(arr_name##_MENU) \ { \ - AL_NEW(arr_name##_MENU, register_arr##_MAX, NULL, e); \ - FOREACH(register_arr, !it.m_hidden && (cond), { \ + _LIST_SOURCE_MAX(list_arr) \ + \ + AL_NEW(arr_name##_MENU, list_arr##_MAX, NULL, e); \ + _LIST_SOURCE_FOREACH(list_arr, !it.m_hidden && (cond), { \ AL_sete(arr_name##_MENU, arr_name##_MENU_COUNT, it); \ arr_name##_MENU_COUNT++; \ }); \ @@ -55,8 +65,13 @@ CLASS(id, DataSource) \ ENDCLASS(id) #define REGISTRY_SOURCE(...) EVAL(OVERLOAD(REGISTRY_SOURCE, __VA_ARGS__)) -#define REGISTRY_SOURCE_3(id, arr_name, register_arr) _REGISTRY_SOURCE(id, arr_name, register_arr, true) -#define REGISTRY_SOURCE_4(id, arr_name, register_arr, cond) _REGISTRY_SOURCE(id, arr_name, register_arr, cond) +#define REGISTRY_SOURCE_3(id, arr_name, register_arr) _LIST_SOURCE(id, arr_name, register_arr, true, _REGISTRY_SOURCE_MAX, _REGISTRY_SOURCE_FOREACH) +#define REGISTRY_SOURCE_4(id, arr_name, register_arr, cond) _LIST_SOURCE(id, arr_name, register_arr, cond, _REGISTRY_SOURCE_MAX, _REGISTRY_SOURCE_FOREACH) + +#define IL_SOURCE(...) EVAL(OVERLOAD(IL_SOURCE, __VA_ARGS__)) +#define IL_SOURCE_3(id, arr_name, il_arr) _LIST_SOURCE(id, arr_name, il_arr, true, _IL_SOURCE_MAX, _IL_SOURCE_FOREACH) +#define IL_SOURCE_4(id, arr_name, il_arr, cond) _LIST_SOURCE(id, arr_name, il_arr, cond, _IL_SOURCE_MAX, _IL_SOURCE_FOREACH) + REGISTRY_SOURCE(FreetextSource, Guide, GuidePages) @@ -69,11 +84,11 @@ REGISTRY_SOURCE(BuffSource, Buffs, StatusEffect, it.instanceOfBuff) // The descriptions for these are in common/mutators/mutator/buffs/all.inc #include -REGISTRY_SOURCE(PowerupSource, Powerups, Items, it.instanceOfPowerup) +IL_SOURCE(PowerupSource, Powerups, default_order_items, it.instanceOfPowerup) // The descriptions for these are in common/mutators/mutator/powerups/powerup/*.qc and common/items/item/jetpack.qc #include -REGISTRY_SOURCE(ItemSource, Items, Items, !it.instanceOfPowerup) +IL_SOURCE(ItemSource, Items, default_order_items, !it.instanceOfPowerup) // The descriptions for these are in common/items/item/*.qc and common/mutators/mutator/instagib/items.qc #include -- 2.39.2