diff --git a/loader/src/ids/AddIDs.hpp b/loader/src/ids/AddIDs.hpp index 52af8c89..19328f6d 100644 --- a/loader/src/ids/AddIDs.hpp +++ b/loader/src/ids/AddIDs.hpp @@ -7,10 +7,19 @@ USE_GEODE_NAMESPACE(); void addIDsToMenuLayer(MenuLayer* layer); -static CCNode* setIDSafe(CCNode* node, int index, const char* id) { - if (auto child = getChild(node, index)) { - child->setID(id); - return child; +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; } diff --git a/loader/src/ids/MenuLayer.cpp b/loader/src/ids/MenuLayer.cpp index 523aa661..c981abd2 100644 --- a/loader/src/ids/MenuLayer.cpp +++ b/loader/src/ids/MenuLayer.cpp @@ -10,24 +10,26 @@ void addIDsToMenuLayer(MenuLayer* layer) { // set IDs to everything layer->setID("MenuLayer"); setIDSafe(layer, 0, "main-menu-bg"); - getChildOfType<CCSprite>(layer, 0)->setID("main-title"); + setIDSafe<CCSprite>(layer, 0, "main-title"); + // controller if (PlatformToolbox::isControllerConnected()) { - getChildOfType<CCSprite>(layer, 1)->setID("play-gamepad-icon"); - getChildOfType<CCSprite>(layer, 2)->setID("editor-gamepad-icon"); - getChildOfType<CCSprite>(layer, 3)->setID("icon-kit-gamepad-icon"); + setIDSafe<CCSprite>(layer, 1, "play-gamepad-icon"); + setIDSafe<CCSprite>(layer, 2, "editor-gamepad-icon"); + setIDSafe<CCSprite>(layer, 3, "icon-kit-gamepad-icon"); - getChildOfType<CCSprite>(layer, 4)->setID("settings-gamepad-icon"); - getChildOfType<CCSprite>(layer, 5)->setID("mouse-gamepad-icon"); - getChildOfType<CCSprite>(layer, 6)->setID("click-gamepad-icon"); + setIDSafe<CCSprite>(layer, 4, "settings-gamepad-icon"); + setIDSafe<CCSprite>(layer, 5, "mouse-gamepad-icon"); + setIDSafe<CCSprite>(layer, 6, "click-gamepad-icon"); - getChildOfType<CCLabelBMFont>(layer, 0)->setID("mouse-gamepad-label"); - getChildOfType<CCLabelBMFont>(layer, 1)->setID("click-gamepad-label"); + setIDSafe<CCLabelBMFont>(layer, 0, "mouse-gamepad-label"); + setIDSafe<CCLabelBMFont>(layer, 1, "click-gamepad-label"); - getChildOfType<CCLabelBMFont>(layer, 2)->setID("player-username"); + setIDSafe<CCLabelBMFont>(layer, 2, "player-username"); } else { - getChildOfType<CCLabelBMFont>(layer, 0)->setID("player-username"); + setIDSafe<CCLabelBMFont>(layer, 0, "player-username"); } + // main menu if (auto menu = getChildOfType<CCMenu>(layer, 0)) { menu->setID("main-menu"); auto playBtn = setIDSafe(menu, 0, "play-button"); @@ -45,6 +47,7 @@ void addIDsToMenuLayer(MenuLayer* layer) { menu->setLayout(RowLayout::create(18.f, 0.f)); } + // bottom menu if (auto menu = getChildOfType<CCMenu>(layer, 1)) { menu->setID("bottom-menu"); auto ach = setIDSafe(menu, 0, "achievements-button"); @@ -62,6 +65,7 @@ void addIDsToMenuLayer(MenuLayer* layer) { menu->setLayout(RowLayout::create(5.f, ach->getPositionY())); } + // social media menu if (auto menu = getChildOfType<CCMenu>(layer, 2)) { menu->setID("social-media-menu"); setIDSafe(menu, 0, "robtop-logo-button"); @@ -69,6 +73,7 @@ void addIDsToMenuLayer(MenuLayer* layer) { setIDSafe(menu, 2, "twitter-button"); setIDSafe(menu, 3, "youtube-button"); } + // more games menu if (auto menu = getChildOfType<CCMenu>(layer, 3)) { menu->setID("more-games-menu"); setIDSafe(menu, 0, "more-games-button");