11#include < Geode/Geode.hpp>
22#include < Geode/ui/ScrollLayer.hpp>
3- #include " ../json.hpp"
3+ #include < Geode/ui/GeodeUI.hpp>
4+ #include < Geode/ui/BasedButtonSprite.hpp>
45#include < filesystem>
56#include < fstream>
67#include < sstream>
1011
1112#include " GYSettingSelectLayer.hpp"
1213#include " GYScreenshotPopup.hpp"
14+ #include " GYModTile.hpp"
15+ #include " ../json.hpp"
1316
1417using namespace geode ::prelude;
1518
@@ -51,6 +54,10 @@ void GYSettingSelectLayer::settingsBtn(CCObject* sender) {
5154 CCDirector::sharedDirector ()->pushScene (scenePrev);
5255}
5356
57+ void GYSettingSelectLayer::openNormalSettings (CCObject* sender) {
58+ openSettingsPopup (Mod::get ());
59+ }
60+
5461bool GYSettingSelectLayer::init () {
5562 if (!CCLayer::init ())
5663 return false ;
@@ -70,6 +77,19 @@ bool GYSettingSelectLayer::init() {
7077 background->setPosition ({ winSize.width / 2 , winSize.height / 2 });
7178 this ->addChild (background);
7279
80+ auto cornerLeft = CCSprite::createWithSpriteFrameName (" GJ_sideArt_001.png" );
81+ cornerLeft->setPosition (CCPoint (winSize.width * 0 , winSize.height * 0 ));
82+ cornerLeft->setAnchorPoint (CCPoint (0 , 0 ));
83+ cornerLeft->setID (" corner-left" );
84+ this ->addChild (cornerLeft);
85+
86+ auto cornerRight = CCSprite::createWithSpriteFrameName (" GJ_sideArt_001.png" );
87+ cornerRight->setPosition (CCPoint (winSize.width * 1 , winSize.height * 0 ));
88+ cornerRight->setAnchorPoint (CCPoint (1 , 0 ));
89+ cornerRight->setFlipX (true );
90+ cornerRight->setID (" corner-right" );
91+ this ->addChild (cornerRight);
92+
7393 auto backBtn = CCMenuItemSpriteExtra::create (
7494 CCSprite::createWithSpriteFrameName (" GJ_arrow_01_001.png" ),
7595 this ,
@@ -86,11 +106,17 @@ bool GYSettingSelectLayer::init() {
86106
87107 auto contentBox = CCScale9Sprite::create (" GJ_square01.png" );
88108 contentBox->setContentSize ({ winSize.width * 0 .7f , winSize.height * 0 .7f });
89- contentBox->setPosition ({ winSize.width / 2 , ( winSize.height / 2 ) - ( winSize.height * 0 .05f ) });
109+ contentBox->setPosition ({ winSize.width / 2 , winSize.height / 2 - winSize.height * 0 .05f });
90110 contentBox->setAnchorPoint ({ 0 .5f , 0 .5f });
91111 contentBox->setID (" content-box" );
92112 this ->addChild (contentBox);
93113
114+ ScrollLayer* scroll = ScrollLayer::create ({ winSize.width * 0 .7f , winSize.height * 0 .7f }, true , true );
115+ scroll->setID (" scroll" );
116+ contentBox->addChild (scroll);
117+
118+ scroll->m_contentLayer ->setLayout (ColumnLayout::create ()->setAxisReverse (true ));
119+
94120 auto leftMenu = CCMenu::create ();
95121 leftMenu->setAnchorPoint ({ 0 , 0 });
96122 leftMenu->setContentSize ({ 0 .f , winSize.height * 0 .6f });
@@ -111,21 +137,41 @@ bool GYSettingSelectLayer::init() {
111137 menu_selector (GYSettingSelectLayer::generateWrapper)
112138 );
113139 colorBtn->setID (" color-button" );
114-
115140 leftMenu->addChild (colorBtn);
116141
117- leftMenu->updateLayout ();
142+ auto settingsBtn = CCMenuItemSpriteExtra::create (
143+ CircleButtonSprite::create (
144+ CCSprite::createWithSpriteFrameName (" geode.loader/settings.png" ),
145+ CircleBaseColor::DarkPurple,
146+ CircleBaseSize::Medium
147+ ),
148+ this ,
149+ menu_selector (GYSettingSelectLayer::openNormalSettings)
150+ );
151+ settingsBtn->setID (" settings-button" );
152+ leftMenu->addChild (settingsBtn);
118153
119- // auto testBtn = CCMenuItemSpriteExtra::create(
120- // CCSprite::createWithSpriteFrameName(
121- // "GJ_paintBtn_001.png"
122- // ),
123- // this,
124- // menu_selector(GYSettingSelectLayer::popup)
125- // );
154+ leftMenu->updateLayout ();
126155
127- // testBtn->setPosition(winSize.width * 0.5, winSize.height * 0.5);
128- // menu->addChild(testBtn);
156+ scroll->m_contentLayer ->addChild (GYModTile::create ());
157+ scroll->m_contentLayer ->addChild (GYModTile::create ());
158+ scroll->m_contentLayer ->addChild (GYModTile::create ());
159+ scroll->m_contentLayer ->addChild (GYModTile::create ());
160+ scroll->m_contentLayer ->addChild (GYModTile::create ());
161+ scroll->m_contentLayer ->addChild (GYModTile::create ());
162+ scroll->m_contentLayer ->addChild (GYModTile::create ());
163+ scroll->m_contentLayer ->addChild (GYModTile::create ());
164+ scroll->m_contentLayer ->addChild (GYModTile::create ());
165+ scroll->m_contentLayer ->addChild (GYModTile::create ());
166+ scroll->m_contentLayer ->addChild (GYModTile::create ());
167+ scroll->m_contentLayer ->addChild (GYModTile::create ());
168+ scroll->m_contentLayer ->addChild (GYModTile::create ());
169+ scroll->m_contentLayer ->addChild (GYModTile::create ());
170+ scroll->m_contentLayer ->addChild (GYModTile::create ());
171+ scroll->m_contentLayer ->addChild (GYModTile::create ());
172+ scroll->m_contentLayer ->addChild (GYModTile::create ());
173+
174+ GYSettingSelectLayer::generateModsList ();
129175
130176 this ->addChild (leftMenu);
131177 this ->addChild (menu);
@@ -227,5 +273,12 @@ bool GYSettingSelectLayer::generateModsList() {
227273 log::warn (" No valid 'layers' data found in JSON" );
228274 }
229275
276+ ScrollLayer* scroll = typeinfo_cast<ScrollLayer*>(this ->getChildByID (" content-box" )->getChildByID (" scroll" ));
277+ if (!scroll) {
278+ log::error (" Failed to cast content-box->scroll to ScrollLayer" );
279+ return false ;
280+ }
281+ scroll->m_contentLayer ->updateLayout ();
282+
230283 return true ;
231284}
0 commit comments