From bf442a9f95997519be5cf2935ce1005052386afd Mon Sep 17 00:00:00 2001 From: dobrykafe Date: Sun, 15 Sep 2024 23:11:11 +0200 Subject: [PATCH] make 0.7 skin filter apply to skin parts --- src/game/client/components/menus.h | 1 + src/game/client/components/menus_settings7.cpp | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h index e066cf4bc..e08a5fa11 100644 --- a/src/game/client/components/menus.h +++ b/src/game/client/components/menus.h @@ -252,6 +252,7 @@ protected: int m_TeePartSelected = protocol7::SKINPART_BODY; const CSkins7::CSkin *m_pSelectedSkin = nullptr; CLineInputBuffered m_SkinNameInput; + bool m_SkinPartListNeedsUpdate = false; void PopupConfirmDeleteSkin7(); // for map download popup diff --git a/src/game/client/components/menus_settings7.cpp b/src/game/client/components/menus_settings7.cpp index 36b4827cf..ba27c5690 100644 --- a/src/game/client/components/menus_settings7.cpp +++ b/src/game/client/components/menus_settings7.cpp @@ -218,6 +218,7 @@ void CMenus::RenderSettingsTee7(CUIRect MainView) if(Ui()->DoEditBox_Search(&s_SkinFilterInput, &QuickSearch, 14.0f, !Ui()->IsPopupOpen() && m_pClient->m_GameConsole.IsClosed())) { m_SkinListNeedsUpdate = true; + m_SkinPartListNeedsUpdate = true; } static CButtonContainer s_DirectoryButton; @@ -413,17 +414,21 @@ void CMenus::RenderSkinSelection7(CUIRect MainView) void CMenus::RenderSkinPartSelection7(CUIRect MainView) { - static bool s_InitSkinPartList = true; static std::vector s_paList[protocol7::NUM_SKINPARTS]; static CListBox s_ListBox; - if(s_InitSkinPartList) + static int s_aSkinPartCount[protocol7::NUM_SKINPARTS] = {0}; + for(int Part = 0; Part < protocol7::NUM_SKINPARTS; Part++) { - for(int Part = 0; Part < protocol7::NUM_SKINPARTS; Part++) + if(m_SkinPartListNeedsUpdate || m_pClient->m_Skins7.NumSkinPart(Part) != s_aSkinPartCount[Part]) { s_paList[Part].clear(); - for(int i = 0; i < m_pClient->m_Skins7.NumSkinPart(Part); ++i) + s_aSkinPartCount[Part] = m_pClient->m_Skins7.NumSkinPart(Part); + for(int i = 0; i < s_aSkinPartCount[Part]; ++i) { const CSkins7::CSkinPart *pPart = m_pClient->m_Skins7.GetSkinPart(Part, i); + if(g_Config.m_ClSkinFilterString[0] != '\0' && !str_utf8_find_nocase(pPart->m_aName, g_Config.m_ClSkinFilterString)) + continue; + // no special skins if((pPart->m_Flags & CSkins7::SKINFLAG_SPECIAL) == 0) { @@ -431,8 +436,8 @@ void CMenus::RenderSkinPartSelection7(CUIRect MainView) } } } - s_InitSkinPartList = false; } + m_SkinPartListNeedsUpdate = false; static int s_OldSelected = -1; s_ListBox.DoBegin(&MainView);