diff --git a/loader/src/hooks/LevelSearchLayer.cpp b/loader/src/hooks/LevelSearchLayer.cpp new file mode 100644 index 00000000..21428c3f --- /dev/null +++ b/loader/src/hooks/LevelSearchLayer.cpp @@ -0,0 +1,98 @@ +#include <Geode/utils/cocos.hpp> +#include <Index.hpp> +#include "../ui/internal/list/ModListLayer.hpp" +#include <InternalMod.hpp> +#include "../ui/internal/info/ModInfoLayer.hpp" +#include <InternalLoader.hpp> + +USE_GEODE_NAMESPACE(); + +#pragma warning(disable: 4217) +template<class T = CCNode> + requires std::is_base_of_v<CCNode, T> +T* setIDSafe(CCNode* node, int index, const char* id) { + if constexpr (std::is_same_v<CCNode, T>) { + if (auto child = getChild(node, index)) { + child->setID(id); + return child; + } + } else { + if (auto child = getChildOfType<T>(node, index)) { + child->setID(id); + return child; + } + } + return nullptr; +} +#include <Geode/modify/LevelSearchLayer.hpp> +class $modify(LevelSearchLayer) { + bool init() { + if (!LevelSearchLayer::init()) + return false; + + // set the funny ids + this->setID("creator-layer"); + setIDSafe(this, 0, "creator-layer-bg"); + getChildOfType<CCTextInputNode>(this, 0)->setID("search-bar"); + getChildOfType<CCScale9Sprite>(this, 0)->setID("level-search-bg"); + getChildOfType<CCScale9Sprite>(this, 1)->setID("level-search-bar-bg"); + getChildOfType<CCScale9Sprite>(this, 2)->setID("quick-search-bg"); + getChildOfType<CCScale9Sprite>(this, 3)->setID("difficulty-filters-bg"); + getChildOfType<CCScale9Sprite>(this, 4)->setID("length-filters-bg"); + getChildOfType<CCLabelBMFont>(this, 0)->setID("quick-search-title"); + getChildOfType<CCLabelBMFont>(this, 1)->setID("filters-title"); + getChildOfType<CCSprite>(this, 1)->setID("left-corner"); + getChildOfType<CCSprite>(this, 2)->setID("right-corner"); + + if (auto filtermenu = getChildOfType<CCMenu>(this, 0)) { + filtermenu->setID("other-filter-menu"); + setIDSafe(filtermenu, 0, "clear-filters-button"); + setIDSafe(filtermenu, 1, "advanced-filters-button"); + } + if (auto searchmenu = getChildOfType<CCMenu>(this, 1)) { + searchmenu->setID("search-button-menu"); + setIDSafe(searchmenu, 0, "search-level-button"); + setIDSafe(searchmenu, 1, "search-user-button"); + + } + if (auto quickmenu = getChildOfType<CCMenu>(this, 2)) { + quickmenu->setID("quick-search-menu"); + setIDSafe(quickmenu, 0, "most-downloaded-button"); + setIDSafe(quickmenu, 1, "most-liked-button"); + setIDSafe(quickmenu, 2, "trending-button"); + setIDSafe(quickmenu, 3, "recent-button"); + setIDSafe(quickmenu, 4, "magic-button"); + setIDSafe(quickmenu, 5, "awarded-button"); + setIDSafe(quickmenu, 6, "followed-button"); + setIDSafe(quickmenu, 7, "friends-button"); + } + if (auto filtersmenu = getChildOfType<CCMenu>(this, 3)) { + filtersmenu->setID("difficulty-filter-menu"); + setIDSafe(filtersmenu, 0, "na-filter-button"); + setIDSafe(filtersmenu, 1, "easy-filter-button"); + setIDSafe(filtersmenu, 2, "normal-filter-button"); + setIDSafe(filtersmenu, 3, "hard-filter-button"); + setIDSafe(filtersmenu, 4, "harder-filter-button"); + setIDSafe(filtersmenu, 5, "insane-filter-button"); + setIDSafe(filtersmenu, 6, "demon-filter-button"); + setIDSafe(filtersmenu, 7, "auto-filter-button"); + setIDSafe(filtersmenu, 8, "demon-type-filter-button"); + } + if (auto filtersmenu = getChildOfType<CCMenu>(this, 4)) { + filtersmenu->setID("length-filter-menu"); + setIDSafe(filtersmenu, 0, "clock-icon"); + setIDSafe(filtersmenu, 1, "tiny-filter-button"); + setIDSafe(filtersmenu, 2, "short-filter-button"); + setIDSafe(filtersmenu, 3, "medium-filter-button"); + setIDSafe(filtersmenu, 4, "long-filter-button"); + setIDSafe(filtersmenu, 5, "xl-filter-button"); + setIDSafe(filtersmenu, 6, "star-filter-button"); + } + if (auto backmenu = getChildOfType<CCMenu>(this, 5)) { + backmenu->setID("exit-menu"); + setIDSafe(backmenu, 0, "exit-button"); + } + return true; + } +}; +