1+ using namespace geode ::prelude;
2+
3+ #include < Geode/modify/BoomScrollLayer.hpp>
4+
5+ class $modify(ProBoomScrollLayer, BoomScrollLayer) {
6+
7+ struct Fields {
8+ std::unordered_map<CCSprite*, CCMenuItemSpriteExtra*> m_buttons;
9+ };
10+
11+ void onDot (CCObject* sender) {
12+ int page = static_cast <CCNode*>(sender)->getTag ();
13+
14+ LevelEditorLayer::get () || GameManager::get ()->getGameVariable (" 0168" )
15+ ? instantMoveToPage (page)
16+ : moveToPage (page);
17+ }
18+
19+ void updateButtons () {
20+ if (Mod::get ()->getSettingValue <bool >(" disable" )) return ;
21+
22+ CCArrayExt<CCSprite*> dots = CCArrayExt<CCSprite*>(m_dots);
23+
24+ if (dots.size () <= 0 ) return ;
25+
26+ if (dots[0 ]->getPosition ().x < 0 && Mod::get ()->getSettingValue <bool >(" fix-position" )) {
27+ float width = CCDirector::get ()->getWinSize ().width ;
28+ float realWidth = width - 50 .f ;
29+ float spacing = realWidth / (dots.size () - 1 );
30+ float screenCenter = width / 2 .f ;
31+ float startX = screenCenter - realWidth / 2 .f ;
32+
33+ for (int i = 0 ; i < dots.size (); ++i)
34+ dots[i]->setPositionX (startX + i * spacing);
35+ }
36+
37+ auto f = m_fields.self ();
38+
39+ for (CCSprite* dot : dots) {
40+ if (!f->m_buttons .contains (dot)) continue ;
41+
42+ dot->setVisible (false );
43+
44+ CCMenuItemSpriteExtra* btn = f->m_buttons .at (dot);
45+ CCSprite* spr = static_cast <CCSprite*>(btn->getNormalImage ());
46+
47+ btn->setPosition (dot->getPosition ());
48+ spr->setScale (dot->getScale ());
49+ spr->setColor (dot->getColor ());
50+ }
51+ }
52+
53+ void updateDots (float dt) {
54+ BoomScrollLayer::updateDots (dt);
55+
56+ updateButtons ();
57+ }
58+
59+ bool init (CCArray* p0, int p1, bool p2, CCArray* p3, DynamicScrollDelegate* p4) {
60+ if (!BoomScrollLayer::init (p0, p1, p2, p3, p4)) return false ;
61+
62+ if (Mod::get ()->getSettingValue <bool >(" disable" )) return true ;
63+
64+ auto f = m_fields.self ();
65+
66+ CCMenu* menu = CCMenu::create ();
67+ menu->setPosition ({0 , 0 });
68+ menu->setID (" buttons-menu" _spr);
69+
70+ addChild (menu);
71+
72+ int i = 0 ;
73+
74+ for (CCSprite* dot : CCArrayExt<CCSprite*>(m_dots)) {
75+ CCMenuItemSpriteExtra* btn = CCMenuItemSpriteExtra::create (CCSprite::create (" smallDot.png" ), this , menu_selector (ProBoomScrollLayer::onDot));
76+ btn->setTag (i++);
77+
78+ menu->addChild (btn);
79+
80+ f->m_buttons [dot] = btn;
81+ }
82+
83+ return true ;
84+ }
85+
86+ };
0 commit comments