|
2 | 2 | #include <Geode/modify/ProfilePage.hpp> |
3 | 3 | #include <Geode/modify/CommentCell.hpp> |
4 | 4 | #include <Geode/modify/CCMenu.hpp> |
| 5 | +#include <Geode/loader/Log.hpp> |
5 | 6 |
|
6 | 7 | // Badges API |
7 | 8 | // Mod API made by Jouca |
8 | 9 |
|
9 | | -#include <Geode/loader/Log.hpp> |
10 | 10 | #include <string> |
11 | 11 | #include "badges/BadgeMenu.h" |
12 | | - |
13 | 12 | #include "RescalingNode.hpp" |
14 | 13 |
|
15 | 14 | // Helper: Extracts priority from badge ID (format: ...-badge:{number}), returns 9999 if not found |
@@ -56,46 +55,14 @@ class $modify(CustomCommentCell, CommentCell) { |
56 | 55 | (void)self.setHookPriority("CommentCell::loadFromComment", INT_MIN); |
57 | 56 | } |
58 | 57 |
|
59 | | - |
60 | | -// Helper: Extracts priority from badge ID (format: ...-badge:{number}), returns 9999 if not found |
61 | | -static int getBadgePriority(CCNode* badge) { |
62 | | - std::string id = badge->getID(); |
63 | | - std::transform(id.begin(), id.end(), id.begin(), [](unsigned char c){ return std::tolower(c); }); |
64 | | - size_t pos = id.find("-badge:"); |
65 | | - if (pos != std::string::npos) { |
66 | | - size_t start = pos + 7; |
67 | | - size_t end = id.find_first_not_of("0123456789", start); |
68 | | - std::string num = id.substr(start, end == std::string::npos ? end : end - start); |
69 | | - try { |
70 | | - int val = std::stoi(num); |
71 | | - return val > 0 ? val : 9999; |
72 | | - } catch (...) {} |
73 | | - } |
74 | | - return 9999; |
75 | | -} |
76 | | - |
77 | | -// Helper: Sorts a CCArray* of badges by priority (lowest first) |
78 | | -static CCArray* sortBadgesByPriority(CCArray* badges) { |
79 | | - std::vector<CCNode*> badgeVec; |
80 | | - for (int i = 0; i < badges->count(); ++i) { |
81 | | - badgeVec.push_back(static_cast<CCNode*>(badges->objectAtIndex(i))); |
82 | | - } |
83 | | - std::sort(badgeVec.begin(), badgeVec.end(), [](CCNode* a, CCNode* b) { |
84 | | - return getBadgePriority(a) < getBadgePriority(b); |
85 | | - }); |
86 | | - CCArray* sorted = CCArray::create(); |
87 | | - for (auto* b : badgeVec) sorted->addObject(b); |
88 | | - return sorted; |
89 | | -} |
90 | | - |
91 | 58 | void updateBadges(CCArray* childsToRemove, CCMenu* username_menu, CCArray* badges) { |
92 | 59 | // Remove all badges from the layer |
93 | 60 | CCObject* childObj; |
94 | 61 | CommentCell* cell = this; |
95 | 62 | CCARRAY_FOREACH(childsToRemove, childObj) static_cast<CCNode*>(childObj)->removeFromParent(); |
96 | 63 |
|
97 | 64 | // Sort badges by priority before displaying |
98 | | - CCArray* sortedBadges = sortBadgesByPriority(badges); |
| 65 | + CCArray* sortedBadges = sortBadgesByPriority(badges); |
99 | 66 | m_fields->badgeCount = sortedBadges->count(); |
100 | 67 |
|
101 | 68 | // If there is only one badge, let it on the layer |
@@ -228,7 +195,7 @@ static CCArray* sortBadgesByPriority(CCArray* badges) { |
228 | 195 | void onBadgePlus(CCObject* pSender) { |
229 | 196 | auto childs = static_cast<CCArray*>(static_cast<CCNode*>(pSender)->getUserObject()); |
230 | 197 | // Sort by priority before showing in menu |
231 | | - CCArray* sortedBadges = sortBadgesByPriority(childs); |
| 198 | + CCArray* sortedBadges = sortBadgesByPriority(childs); |
232 | 199 | // rescale the badges |
233 | 200 | CCArray* childsRescaled = CCArray::create(); |
234 | 201 | for (int i = 0; i < sortedBadges->count(); i++) { |
@@ -296,7 +263,7 @@ class $modify(CustomProfilePage, ProfilePage) { |
296 | 263 | CCARRAY_FOREACH(childsToRemove, childObj) static_cast<CCNode*>(childObj)->removeFromParent(); |
297 | 264 |
|
298 | 265 | // Sort badges by priority before displaying |
299 | | - CCArray* sortedBadges = sortBadgesByPriority(badges); |
| 266 | + CCArray* sortedBadges = sortBadgesByPriority(badges); |
300 | 267 | m_fields->badgeCount = sortedBadges->count(); |
301 | 268 |
|
302 | 269 | // If there is only one badge, let it on the layer |
@@ -425,7 +392,7 @@ class $modify(CustomProfilePage, ProfilePage) { |
425 | 392 | void onBadgePlus(CCObject* pSender) { |
426 | 393 | auto childs = static_cast<CCArray*>(static_cast<CCNode*>(pSender)->getUserObject()); |
427 | 394 | // Sort by priority before showing in menu |
428 | | - CCArray* sortedBadges = sortBadgesByPriority(childs); |
| 395 | + CCArray* sortedBadges = sortBadgesByPriority(childs); |
429 | 396 | m_fields->badgeMenu = BadgeMenu::scene(sortedBadges); |
430 | 397 | } |
431 | 398 |
|
|
0 commit comments