From 6944f80e784d7dcda19a826be0a03cc1f90eb072 Mon Sep 17 00:00:00 2001 From: HJfod <60038575+HJfod@users.noreply.github.com> Date: Tue, 10 Sep 2024 22:57:34 +0300 Subject: [PATCH] update invalid mods (show a popup + make the N/A button gray) --- loader/src/ui/mods/GeodeStyle.cpp | 2 ++ loader/src/ui/mods/GeodeStyle.hpp | 1 + loader/src/ui/mods/list/ModItem.cpp | 38 ++++++++++++++++------------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/loader/src/ui/mods/GeodeStyle.cpp b/loader/src/ui/mods/GeodeStyle.cpp index 3fcd4f96..150ac8fb 100644 --- a/loader/src/ui/mods/GeodeStyle.cpp +++ b/loader/src/ui/mods/GeodeStyle.cpp @@ -150,6 +150,7 @@ const char* getGeodeButtonSpriteName(GeodeButtonSprite spr) { case GeodeButtonSprite::Install: return "GE_button_01.png"_spr; case GeodeButtonSprite::Delete: return "GJ_button_06.png"; case GeodeButtonSprite::Enable: return "GJ_button_01.png"; + case GeodeButtonSprite::Gray: return "GJ_button_05.png"; } } else { @@ -159,6 +160,7 @@ const char* getGeodeButtonSpriteName(GeodeButtonSprite spr) { case GeodeButtonSprite::Install: return "GE_button_01.png"_spr; case GeodeButtonSprite::Delete: return "GJ_button_06.png"; case GeodeButtonSprite::Enable: return "GJ_button_02.png"; + case GeodeButtonSprite::Gray: return "GJ_button_05.png"; } } } diff --git a/loader/src/ui/mods/GeodeStyle.hpp b/loader/src/ui/mods/GeodeStyle.hpp index 5a9375b2..8a1b9c26 100644 --- a/loader/src/ui/mods/GeodeStyle.hpp +++ b/loader/src/ui/mods/GeodeStyle.hpp @@ -71,6 +71,7 @@ enum class GeodeButtonSprite { Install, Delete, Enable, + Gray, }; const char* getGeodeButtonSpriteName(GeodeButtonSprite spr); IconButtonSprite* createGeodeButton(CCNode* icon, std::string const& text, GeodeButtonSprite bg = GeodeButtonSprite::Default); diff --git a/loader/src/ui/mods/list/ModItem.cpp b/loader/src/ui/mods/list/ModItem.cpp index 8cd6f720..1a10f9b9 100644 --- a/loader/src/ui/mods/list/ModItem.cpp +++ b/loader/src/ui/mods/list/ModItem.cpp @@ -143,7 +143,7 @@ bool ModItem::init(ModSource&& source) { auto gdValid = gameVersion == "*" || gameVersion == GEODE_STR(GEODE_GD_VERSION); if (!geodeValid || !gdValid) { - spr = createGeodeButton("N/A", 50, false, true, GeodeButtonSprite::Default); + spr = createGeodeButton("N/A", 50, false, true, GeodeButtonSprite::Gray); } } @@ -493,22 +493,26 @@ void ModItem::onView(CCObject*) { )->show(); } - if (auto serverMod = m_source.asServer(); serverMod != nullptr) { - auto version = serverMod->latestVersion(); - auto geodeVersion = version.getGeodeVersion(); - auto geodeValid = Loader::get()->isModVersionSupported(geodeVersion); - - if (auto res = version.checkGameVersion(); !res) { - FLAlertLayer::create(nullptr, "Unavailable", res.unwrapErr(), "Close", nullptr)->show(); - return; - } else if (!geodeValid) { - auto msg = fmt::format( - "Geode {} is required to view this mod. You currently have {}.", - geodeVersion.toVString(), - Loader::get()->getVersion().toVString() - ); - FLAlertLayer::create(nullptr, "Unavailable", msg, "Close", nullptr)->show(); - return; + // Show popups for invalid mods + if (m_source.asServer()) { + auto version = m_source.asServer()->latestVersion(); + if (!Loader::get()->isModVersionSupported(version.getGeodeVersion())) { + return FLAlertLayer::create( + nullptr, + "Outdated", + "This mod is targets an outdated version of Geode. " + "Please wait for its developer to update it.", + "OK", nullptr, 360 + )->show(); + } + if (version.getGameVersion() != "*" && version.getGameVersion() != GEODE_STR(GEODE_GD_VERSION)) { + return FLAlertLayer::create( + nullptr, + "Outdated", + "This mod is targets a different version of Geometry Dash. " + "Please wait for its developer to update it.", + "OK", nullptr, 360 + )->show(); } }