From 00773baaf26ce567fdf4ec2c7734867617148eb8 Mon Sep 17 00:00:00 2001 From: Cvolton Date: Fri, 19 Jan 2024 09:39:29 +0100 Subject: [PATCH] Fix layout crashes --- src/hooks/ProfilePage.cpp | 1 + src/layers/StarsInfoPopup.cpp | 2 +- src/utils.cpp | 134 +++++++++++++++++++--------------- src/utils.hpp | 3 + 4 files changed, 80 insertions(+), 60 deletions(-) diff --git a/src/hooks/ProfilePage.cpp b/src/hooks/ProfilePage.cpp index e5b6843..302d238 100644 --- a/src/hooks/ProfilePage.cpp +++ b/src/hooks/ProfilePage.cpp @@ -271,6 +271,7 @@ class $modify(BIProfilePage, ProfilePage) { } else { if(auto playerStats = m_mainLayer->getChildByID("stats-menu")) { if(auto starsIcon = playerStats->getChildByID("stars-icon")) { + m_buttons->removeObject(starsIcon); m_buttons->addObject(BetterInfo::replaceWithButton(starsIcon, this, menu_selector(BIProfilePage::onProfilePageStar))); } } diff --git a/src/layers/StarsInfoPopup.cpp b/src/layers/StarsInfoPopup.cpp index 9d4cf59..bc9b657 100644 --- a/src/layers/StarsInfoPopup.cpp +++ b/src/layers/StarsInfoPopup.cpp @@ -161,7 +161,7 @@ bool StarsInfoPopup::init(){ cornerMenu->addChild(cornerFont1); auto cornerFont2 = CCLabelBMFont::create(fmt::format("Gauntlet: {}", BetterInfo::completedLevelsInStarRange(0, 10, false, GLM->m_gauntletLevels).size() + BetterInfo::completedLevelsInStarRange(0, 10, true, GLM->m_gauntletLevels).size()).c_str(), "goldFont.fnt"); - cornerFont2->setLayoutOptions(cornerFont1->getLayoutOptions()); + cornerFont2->setLayoutOptions(BetterInfo::copyLayoutOptions(cornerFont1)); cornerFont2->setAnchorPoint(cornerFont1->getAnchorPoint()); cornerFont2->setID("gauntlet-text"_spr); cornerMenu->addChild(cornerFont2); diff --git a/src/utils.cpp b/src/utils.cpp index 76191d5..6b6f64a 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -615,77 +615,93 @@ CCMenuItemSpriteExtra* BetterInfo::replaceWithButton(CCNode* node, CCNode* self, auto idx = parent->getChildren()->indexOfObject(node); node->removeFromParent(); + for(auto i = idx; i < parent->getChildrenCount(); i++) { + auto child = static_cast(parent->getChildren()->objectAtIndex(i)); + child->setZOrder(child->getZOrder() + 1); + } + auto button = CCMenuItemSpriteExtra::create( node, self, handler ); - button->setLayoutOptions(node->getLayoutOptions()); + button->setLayoutOptions(copyLayoutOptions(node)); button->setZOrder(node->getZOrder()); button->setID(node->getID()); - parent->getChildren()->insertObject(button, idx); + parent->addChild(button); parent->updateLayout(); - button->setParent(parent); + return button; +} + +UnlockType BetterInfo::iconTypeToUnlockType(IconType type) { + //the actual func doesnt work for an unknown reason + int result = 0; - if(parent->isRunning()) { - button->onEnter(); - button->onEnterTransitionDidFinish(); + switch ((int) type) + { + case 0: + result = 1; + break; + case 1: + result = 4; + break; + case 2: + result = 5; + break; + case 3: + result = 6; + break; + case 4: + result = 7; + break; + case 5: + result = 8; + break; + case 6: + result = 9; + break; + case 7: + result = 13; + break; + case 8: + result = 14; + break; + case 9: + result = 11; + break; + case 0xA: + result = 10; + break; + case 0xB: + result = 12; + break; + case 0xC: + result = 15; + break; + default: + result = 0; + break; } + return (UnlockType) result; +} - return button; +AxisLayoutOptions* BetterInfo::copyLayoutOptions(CCNode* a) { + return copyLayoutOptions(typeinfo_cast(a->getLayoutOptions())); } -UnlockType BetterInfo::iconTypeToUnlockType(IconType type) - { - //the actual func doesnt work for an unknown reason - int result = 0; - - switch ((int) type) - { - case 0: - result = 1; - break; - case 1: - result = 4; - break; - case 2: - result = 5; - break; - case 3: - result = 6; - break; - case 4: - result = 7; - break; - case 5: - result = 8; - break; - case 6: - result = 9; - break; - case 7: - result = 13; - break; - case 8: - result = 14; - break; - case 9: - result = 11; - break; - case 0xA: - result = 10; - break; - case 0xB: - result = 12; - break; - case 0xC: - result = 15; - break; - default: - result = 0; - break; - } - return (UnlockType) result; - } \ No newline at end of file +AxisLayoutOptions* BetterInfo::copyLayoutOptions(AxisLayoutOptions* a) { + if(!a) return nullptr; + + return AxisLayoutOptions::create() + ->setMaxScale(a->getMaxScale()) + ->setMinScale(a->getMinScale()) + ->setRelativeScale(a->getRelativeScale()) + ->setLength(a->getLength()) + ->setPrevGap(a->getPrevGap()) + ->setNextGap(a->getNextGap()) + ->setBreakLine(a->getBreakLine()) + ->setSameLine(a->getSameLine()) + ->setScalePriority(a->getScalePriority()); +} \ No newline at end of file diff --git a/src/utils.hpp b/src/utils.hpp index bc76708..da87a45 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -62,4 +62,7 @@ namespace BetterInfo { CCMenuItemSpriteExtra* replaceWithButton(CCNode* node, CCNode* self, cocos2d::SEL_MenuHandler handler); UnlockType iconTypeToUnlockType(IconType type); + + AxisLayoutOptions* copyLayoutOptions(CCNode* a); + AxisLayoutOptions* copyLayoutOptions(AxisLayoutOptions* a); } \ No newline at end of file