Skip to content

Commit b64b3eb

Browse files
committed
mods list pt 2
1 parent 625b10e commit b64b3eb

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

src/EndLevelLayer.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,35 @@ class $modify(MyEndLevelLayer, EndLevelLayer) {
224224
endTextLabel->setString(randomString.c_str()); // set string
225225
endTextLabel->setAlignment(kCCTextAlignmentCenter);
226226
}
227+
void addLoadedModsList() {
228+
if (!m_playLayer || m_playLayer->m_isPracticeMode || !m_listLayer) return;
229+
230+
CCLabelBMFont* label = CCLabelBMFont::create("Mods\nList", "bigFont.fnt");
231+
CCSprite* sprite = CircleButtonSprite::create(label, CircleBaseColor::Green);
232+
sprite->setScale(.8f);
233+
label->setScale(.4f);
234+
label->setAlignment(kCCTextAlignmentCenter);
235+
236+
CCMenuItemSpriteExtra* modsListButton = CCMenuItemSpriteExtra::create(sprite, this, menu_selector(MyEndLevelLayer::showModsList));
237+
238+
CCMenu* modsListMenu = CCMenu::create();
239+
modsListMenu->setContentSize({33, 33});
240+
modsListMenu->setPosition(m_listLayer->getPosition()); // i know this sounds like a crackpot position but it fits perfectly (im ignoring practice mode bc who tf wanna show that)
241+
modsListMenu->ignoreAnchorPointForPosition(false);
242+
modsListMenu->addChildAtPosition(modsListButton, Anchor::Center);
243+
244+
this->m_mainLayer->addChild(modsListMenu);
245+
}
246+
void showModsList(CCObject* sender) {
247+
Manager* manager = Manager::getSharedInstance();
248+
const std::string& formattedList = manager->modsListFormatted;
249+
const std::string& formattedTitle = fmt::format("{} Total ({} Loaded, {} Disabled, {} w/Problems)", manager->totalMods, manager->loadedMods, manager->disabledMods, manager->problemMods);
250+
MDPopup::create(formattedTitle, formattedList, "Copy", "Close", [formattedList](const bool btn2){
251+
if (btn2) return;
252+
geode::utils::clipboard::write(formattedList);
253+
Notification::create("Copied mods list")->show();
254+
})->show();
255+
}
227256
void showLayer(bool p0) {
228257
if (!getModBool("enabled")) return EndLevelLayer::showLayer(p0);
229258
EndLevelLayer::showLayer(getModBool("noTransition"));
@@ -233,7 +262,7 @@ class $modify(MyEndLevelLayer, EndLevelLayer) {
233262
MyEndLevelLayer::applyHideChainsBackground();
234263
MyEndLevelLayer::applySpaceUK();
235264
MyEndLevelLayer::applyPlatAttemptsAndJumpsOrFlukedFromPercent(theLevel);
236-
// MyEndLevelLayer::applyGDMOCompatShowLayer(theLevel);
265+
MyEndLevelLayer::addLoadedModsList();
237266
}
238267
void customSetup() {
239268
EndLevelLayer::customSetup();

src/Manager.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ class Manager {
4949
int64_t originalOpacity = 0;
5050
int lastFlukedPercent = 0;
5151

52+
int totalMods = 0;
53+
int loadedMods = 0;
54+
int disabledMods = 0;
55+
int problemMods = 0;
56+
5257
bool isCompactEndscreen;
5358
bool isGDMO;
5459
bool isLevelComplete = false;

src/MenuLayer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ class $modify(MyMenuLayer, MenuLayer) {
1111
bool result = MenuLayer::init();
1212
const auto mods = Loader::get()->getAllMods();
1313
Manager* manager = managerMacro;
14+
manager->totalMods = mods.size();
1415
std::ranges::for_each(mods, [&](const Mod* mod) {
16+
if (!mod->hasLoadProblems() && mod->isEnabled()) manager->loadedMods += 1;
17+
else manager->problemMods += 1;
18+
19+
if (!mod->isEnabled()) manager->disabledMods += 1;
20+
1521
const std::string& modID = mod->getID();
1622

1723
if (manager->modIDToModMenu.contains(modID)) manager->loadedModMenus.push_back(modID);

0 commit comments

Comments
 (0)