Skip to content

Commit

Permalink
Merge pull request ddnet#8958 from dobrykafe/pr-filter-skin-parts
Browse files Browse the repository at this point in the history
Make 0.7 skin filter apply to skin parts
  • Loading branch information
Robyt3 authored Sep 16, 2024
2 parents ce245f4 + bf442a9 commit 0a3a095
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
1 change: 1 addition & 0 deletions src/game/client/components/menus.h
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ class CMenus : public CComponent
int m_TeePartSelected = protocol7::SKINPART_BODY;
const CSkins7::CSkin *m_pSelectedSkin = nullptr;
CLineInputBuffered<protocol7::MAX_SKIN_ARRAY_SIZE, protocol7::MAX_SKIN_LENGTH> m_SkinNameInput;
bool m_SkinPartListNeedsUpdate = false;
void PopupConfirmDeleteSkin7();

// for map download popup
Expand Down
15 changes: 10 additions & 5 deletions src/game/client/components/menus_settings7.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -413,26 +414,30 @@ void CMenus::RenderSkinSelection7(CUIRect MainView)

void CMenus::RenderSkinPartSelection7(CUIRect MainView)
{
static bool s_InitSkinPartList = true;
static std::vector<const CSkins7::CSkinPart *> 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)
{
s_paList[Part].emplace_back(pPart);
}
}
}
s_InitSkinPartList = false;
}
m_SkinPartListNeedsUpdate = false;

static int s_OldSelected = -1;
s_ListBox.DoBegin(&MainView);
Expand Down

0 comments on commit 0a3a095

Please sign in to comment.