@@ -5,9 +5,13 @@ using namespace geode::prelude;
55class $modify(ProBoomScrollLayer, BoomScrollLayer) {
66
77 struct Fields {
8+ std::vector<CCMenuItemSpriteExtra*> m_buttonsArray;
89 std::unordered_map<CCSprite*, CCMenuItemSpriteExtra*> m_buttons;
910
1011 int m_currentPage = 0 ;
12+
13+ bool m_check = false ;
14+ bool m_disable = false ;
1115 };
1216
1317 void onDot (CCObject* sender) {
@@ -25,10 +29,21 @@ class $modify(ProBoomScrollLayer, BoomScrollLayer) {
2529 }
2630
2731 void updateButtons () {
28- if (Mod::get ()->getSettingValue <bool >(" disable" )) return ;
32+ auto f = m_fields.self ();
33+
34+ if (Mod::get ()->getSettingValue <bool >(" disable" ) || f->m_disable ) return ;
35+ if (getParent () && !f->m_check ) {
36+ f->m_check = true ;
37+
38+ if (typeinfo_cast<ListButtonBar*>(getParent ()))
39+ f->m_disable = true ;
40+ }
2941
3042 CCArrayExt<CCSprite*> dots = CCArrayExt<CCSprite*>(m_dots);
3143
44+ if (static_cast <int >(dots.size ()) != static_cast <int >(f->m_buttonsArray .size ()))
45+ addButtons ();
46+
3247 if (dots.size () <= 0 ) return ;
3348
3449 if (dots[0 ]->getPosition ().x < 0 && Mod::get ()->getSettingValue <bool >(" fix-position" )) {
@@ -42,8 +57,6 @@ class $modify(ProBoomScrollLayer, BoomScrollLayer) {
4257 dots[i]->setPositionX (startX + i * spacing);
4358 }
4459
45- auto f = m_fields.self ();
46-
4760 int page = 0 ;
4861
4962 for (CCSprite* dot : dots) {
@@ -54,6 +67,11 @@ class $modify(ProBoomScrollLayer, BoomScrollLayer) {
5467 CCMenuItemSpriteExtra* btn = f->m_buttons .at (dot);
5568 CCSprite* spr = static_cast <CCSprite*>(btn->getNormalImage ());
5669
70+ if (f->m_disable ) {
71+ btn->setVisible (false );
72+ continue ;
73+ }
74+
5775 btn->setPosition (dot->getPosition ());
5876 spr->setScale (dot->getScale ());
5977 spr->setColor (dot->getColor ());
@@ -65,6 +83,29 @@ class $modify(ProBoomScrollLayer, BoomScrollLayer) {
6583 }
6684 }
6785
86+ void addButtons () {
87+ auto f = m_fields.self ();
88+ CCNode* menu = getChildByID (" buttons-menu" _spr);
89+
90+ for (CCMenuItemSpriteExtra* btn : f->m_buttonsArray )
91+ btn->removeFromParentAndCleanup (true );
92+
93+ f->m_buttonsArray .clear ();
94+ f->m_buttons .clear ();
95+
96+ int i = 0 ;
97+
98+ for (CCSprite* dot : CCArrayExt<CCSprite*>(m_dots)) {
99+ CCMenuItemSpriteExtra* btn = CCMenuItemSpriteExtra::create (CCSprite::create (" smallDot.png" ), this , menu_selector (ProBoomScrollLayer::onDot));
100+ btn->setTag (i++);
101+
102+ menu->addChild (btn);
103+
104+ f->m_buttons [dot] = btn;
105+ f->m_buttonsArray .push_back (btn);
106+ }
107+ }
108+
68109 void updateDots (float dt) {
69110 BoomScrollLayer::updateDots (dt);
70111
@@ -84,16 +125,7 @@ class $modify(ProBoomScrollLayer, BoomScrollLayer) {
84125
85126 addChild (menu);
86127
87- int i = 0 ;
88-
89- for (CCSprite* dot : CCArrayExt<CCSprite*>(m_dots)) {
90- CCMenuItemSpriteExtra* btn = CCMenuItemSpriteExtra::create (CCSprite::create (" smallDot.png" ), this , menu_selector (ProBoomScrollLayer::onDot));
91- btn->setTag (i++);
92-
93- menu->addChild (btn);
94-
95- f->m_buttons [dot] = btn;
96- }
128+ addButtons ();
97129
98130 return true ;
99131 }
0 commit comments