diff --git a/CMakeLists.txt b/CMakeLists.txt index d6b5101..97ec93d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64") set(CMAKE_CXX_VISIBILITY_PRESET hidden) -project(FakeRate VERSION 1.2.8) +project(FakeRate VERSION 1.2.9) add_library(${PROJECT_NAME} SHARED src/FakeRate.cpp diff --git a/changelog.md b/changelog.md index 2a3cf23..835e1c7 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,8 @@ # Fake Rate Changelog +## v1.2.9 (2024-07-05) +- Fixed a bug that caused two difficulty faces to be toggled in the difficulty selection popup with More Difficulties enabled +- Fixed incompatibility with the mod "GodlikeFaces" by adyagmd + ## v1.2.8 (2024-07-04) - Fixed a bug that caused the game to crash when a difficulty face in the difficulty selection popup was clicked with More Difficulties uninstalled or disabled (Somehow this bug keeps coming back) diff --git a/mod.json b/mod.json index 04b08d7..c4fbaed 100644 --- a/mod.json +++ b/mod.json @@ -5,7 +5,7 @@ "win": "2.206", "mac": "2.206" }, - "version": "v1.2.8", + "version": "v1.2.9", "id": "hiimjustin000.fake_rate", "name": "Fake Rate", "developer": "hiimjustin000", diff --git a/src/FREditPopup.cpp b/src/FREditPopup.cpp index f33744a..4f454fa 100644 --- a/src/FREditPopup.cpp +++ b/src/FREditPopup.cpp @@ -91,7 +91,7 @@ bool FREditPopup::setup(GJGameLevel* level, int stars, int feature, int difficul auto addButton = CCMenuItemExt::createSpriteExtra(ButtonSprite::create("Add", "goldFont.fnt", "GJ_button_01.png", 0.8f), [this, callback](auto) { auto vec = Mod::get()->getSavedValue>("fake-rate", {}); - auto it = std::find_if(vec.begin(), vec.end(), [this](auto const& item) { + auto it = std::find_if(vec.begin(), vec.end(), [this](FakeRateSaveData const& item) { return item.id == m_level->m_levelID; }); if (it != vec.end()) { @@ -119,7 +119,7 @@ bool FREditPopup::setup(GJGameLevel* level, int stars, int feature, int difficul auto removeButton = CCMenuItemExt::createSpriteExtra(ButtonSprite::create("Remove", "goldFont.fnt", "GJ_button_06.png", 0.8f), [this, callback](auto) { auto vec = Mod::get()->getSavedValue>("fake-rate", {}); if (vec.empty()) return; - vec.erase(std::remove_if(vec.begin(), vec.end(), [this](auto const& item) { + vec.erase(std::remove_if(vec.begin(), vec.end(), [this](FakeRateSaveData const& item) { return item.id == m_level->m_levelID; }), vec.end()); Mod::get()->setSavedValue("fake-rate", vec); @@ -142,8 +142,8 @@ void FREditPopup::setIDPopupClosed(SetIDPopup*, int stars) { } void FREditPopup::updateLabels() { - m_difficultySprite->updateDifficultyFrame(m_difficulty, GJDifficultyName::Long); m_difficultySprite->updateFeatureState((GJFeatureState)m_feature); + m_difficultySprite->updateDifficultyFrame(m_difficulty, GJDifficultyName::Long); m_difficultySprite->setPositionY(100.0f + (m_difficulty > 5 ? 5.0f : 0.0f) + (m_stars > 0 ? 10.0f : 0.0f)); m_starSprite->setPosition({ m_difficultySprite->getPositionX() + 8.0f, m_difficultySprite->getPositionY() - 30.0f - (m_difficulty > 5 ? 9.0f : 0.0f) }); m_starSprite->setVisible(m_stars > 0); @@ -242,15 +242,14 @@ void FRSetDifficultyPopup::createDifficultyToggle(CCMenu* menu, int difficulty, frameName = m_legacy ? fmt::format("uproxide.more_difficulties/MD_Difficulty{:02d}_Legacy.png", moreDifficultiesOverride) : fmt::format("uproxide.more_difficulties/MD_Difficulty{:02d}.png", moreDifficultiesOverride); else if (moreDifficultiesOverride > 0) return; - auto toggle = CCMenuItemExt::createSpriteExtraWithFrameName(frameName.c_str(), 1.0f, [this, difficulty, moreDifficultiesOverride](auto sender) { + auto toggle = CCMenuItemExt::createSpriteExtraWithFrameName(frameName.c_str(), 1.0f, [this, difficulty, moreDifficultiesOverride](CCMenuItemSpriteExtra* sender) { m_difficulty = difficulty; m_moreDifficultiesOverride = moreDifficultiesOverride; FakeRate::toggle(m_selected->getNormalImage(), false); FakeRate::toggle(sender->getNormalImage(), true); m_selected = sender; }); - auto isToggled = (moreDifficultiesOverride > 0 && moreDifficultiesOverride == m_moreDifficultiesOverride) || - (m_moreDifficultiesOverride <= 0 && m_difficulty == difficulty); + auto isToggled = moreDifficultiesOverride == m_moreDifficultiesOverride && (m_moreDifficultiesOverride <= 0 ? difficulty == m_difficulty : true); FakeRate::toggle(toggle->getNormalImage(), isToggled); m_selected = isToggled ? toggle : m_selected; menu->addChild(toggle); @@ -306,7 +305,7 @@ void FRSetFeaturePopup::createFeatureToggle(CCMenu* menu, GJFeatureState feature mdSprite->setPosition(difficultySprite->getContentSize() / 2 + (m_legacy ? CCPoint { 0.0f, 0.0f } : CCPoint { 0.25f, -0.1f })); difficultySprite->setOpacity(0); } - auto toggle = CCMenuItemExt::createSpriteExtra(difficultySprite, [this, feature](auto sender) { + auto toggle = CCMenuItemExt::createSpriteExtra(difficultySprite, [this, feature](CCMenuItemSpriteExtra* sender) { m_feature = feature; FakeRate::toggle(m_selected->getNormalImage(), false); if (auto particleSystem = getChildOfType(m_selected->getNormalImage(), 0)) particleSystem->setVisible(false); diff --git a/src/FakeRate.cpp b/src/FakeRate.cpp index 8de5c4e..89813f9 100644 --- a/src/FakeRate.cpp +++ b/src/FakeRate.cpp @@ -35,12 +35,13 @@ std::string FakeRate::getSpriteName(CCSprite* sprite) { void FakeRate::toggle(CCNode* node, bool enabled) { if (auto sprite = typeinfo_cast(node)) { - sprite->setColor(enabled ? ccColor3B { 255, 255, 255 } : ccColor3B { 125, 125, 125 }); + auto color = enabled ? ccColor3B { 255, 255, 255 } : ccColor3B { 125, 125, 125 }; + sprite->setColor(color); if (sprite->getChildren()) { auto children = sprite->getChildren(); - for (auto i = 0; i < children->count(); i++) { - if (auto child = typeinfo_cast(children->objectAtIndex(i))) child->setColor(enabled ? ccColor3B { 255, 255, 255 } : ccColor3B { 125, 125, 125 }); + for (int i = 0; i < children->count(); i++) { + if (auto child = typeinfo_cast(children->objectAtIndex(i))) child->setColor(color); } } } diff --git a/src/main.cpp b/src/main.cpp index 035790b..f0583f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -52,7 +52,7 @@ class $modify(FRLevelInfoLayer, LevelInfoLayer) { void checkFakeRate() { auto vec = Mod::get()->getSavedValue>("fake-rate", {}); - auto it = std::find_if(vec.begin(), vec.end(), [this](auto const& item) { return item.id == m_level->m_levelID; }); + auto it = std::find_if(vec.begin(), vec.end(), [this](FakeRateSaveData const& item) { return item.id == m_level->m_levelID; }); auto stars = m_level->m_stars.value(); auto starsRequested = m_level->m_starsRequested; if (it != vec.end()) updateFakeRate(it->stars, it->feature, it->difficulty, it->moreDifficultiesOverride, false, true); @@ -99,8 +99,8 @@ class $modify(FRLevelInfoLayer, LevelInfoLayer) { auto winSize = CCDirector::sharedDirector()->getWinSize(); auto gsm = GameStatsManager::sharedState(); auto showStars = stars > 0 || m_level->m_dailyID > 0 || m_level->m_gauntletLevel; - m_difficultySprite->updateDifficultyFrame(difficulty, GJDifficultyName::Long); m_difficultySprite->updateFeatureState((GJFeatureState)feature); + m_difficultySprite->updateDifficultyFrame(difficulty, GJDifficultyName::Long); CCNode* nodeToSetPosition = m_difficultySprite; CCNode* difficultySpriteParent = m_difficultySprite->getParent(); if (Loader::get()->isModLoaded("acaruso.horn")) { @@ -230,7 +230,7 @@ class $modify(FRLevelCell, LevelCell) { if (!difficultyContainer) difficultyContainer = m_mainLayer->getChildByID("grd-demon-icon-layer"); if (difficultyContainer) { auto vec = Mod::get()->getSavedValue>("fake-rate", {}); - auto it = std::find_if(vec.begin(), vec.end(), [level](auto const& item) { return item.id == level->m_levelID; }); + auto it = std::find_if(vec.begin(), vec.end(), [level](FakeRateSaveData const& item) { return item.id == level->m_levelID; }); if (it != vec.end()) { auto difficultySprite = static_cast(difficultyContainer->getChildByID("difficulty-sprite")); if (auto betweenDifficultySprite = static_cast(difficultyContainer->getChildByID("hiimjustin000.demons_in_between/between-difficulty-sprite"))) { @@ -256,8 +256,8 @@ class $modify(FRLevelCell, LevelCell) { } auto& fakeRateData = *it; - difficultySprite->updateDifficultyFrame(fakeRateData.difficulty, GJDifficultyName::Short); difficultySprite->updateFeatureState((GJFeatureState)fakeRateData.feature); + difficultySprite->updateDifficultyFrame(fakeRateData.difficulty, GJDifficultyName::Short); auto addCoins = level->m_coins > 0 && !m_compactView; auto showStars = fakeRateData.stars > 0 || level->m_dailyID > 0; difficultySprite->setPositionY((showStars || addCoins ? 5.0f : 0.0f) + (showStars && addCoins ? 9.0f : 0.0f) + (level->m_dailyID > 0 ? 10.0f : 0.0f));