Skip to content

Commit 966787d

Browse files
committed
feat(roulette), refactor: Fix practice mode crash. Refactor some repeated calls to RLM::get
1 parent a4844db commit 966787d

File tree

7 files changed

+62
-43
lines changed

7 files changed

+62
-43
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8+
## [4.0.2] - 2025-02-01
9+
10+
### Fixed
11+
12+
- Practice mode crash when finishing level (thanks @Vulm)
13+
814
## [4.0.1] - 2025-01-31
915

1016
### Fixed

mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"android": "2.2074",
66
"mac": "2.2074"
77
},
8-
"version": "v4.0.1",
8+
"version": "v4.0.2",
99
"id": "spaghettdev.gd-roulette",
1010
"name": "GD-Roulette",
1111
"developer": "SpaghettDev",

src/layers/EndLevelLayer.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ class $modify(RLEndLevelLayer, EndLevelLayer)
88
{
99
EndLevelLayer::customSetup();
1010

11-
if (!RouletteManager::get().isPlaying || !RouletteManager::get().gameState.hasReachedGoal)
11+
const auto& rlm = RouletteManager::get();
12+
const auto pl = GameManager::sharedState()->getPlayLayer();
13+
14+
if (!rlm.isPlaying || !pl || pl->m_isPracticeMode || !rlm.gameState.hasReachedGoal)
1215
return;
1316

1417
auto levelCompleteSprite = this->m_mainLayer->getChildByID("level-complete-text");

src/layers/PlayLayer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class $modify(RLPlayLayer, PlayLayer)
3737
{
3838
PlayLayer::updateProgressbar();
3939

40-
auto& rlm = RouletteManager::get();
40+
const auto& rlm = RouletteManager::get();
4141

4242
if (!this->m_percentageLabel || !rlm.isPlaying || m_fields->m_has_set_progress_color)
4343
return;
@@ -141,7 +141,7 @@ class $modify(RLPlayLayer, PlayLayer)
141141
{
142142
PlayLayer::showCompleteText();
143143

144-
if (!RouletteManager::get().isPlaying || !RouletteManager::get().gameState.hasReachedGoal)
144+
if (!RouletteManager::get().isPlaying || this->m_isPracticeMode || !RouletteManager::get().gameState.hasReachedGoal)
145145
return;
146146

147147
auto levelCompleteSprite = this->getChildByType<CCSprite>(1);

src/listfetcher/ListFetcher.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ matjson::Value ListFetcher::normalListCacheFunction()
6767

6868
void ListFetcher::getRandomNormalListLevel(GJDifficulty difficulty, geode::Result<level_pair_t>& result)
6969
{
70+
is_fetching = true;
71+
7072
m_main_listener.bind([&](web::WebTask::Event* e) {
7173
if (web::WebResponse* res = e->getValue())
7274
{

src/roulette/RLRouletteInfoAlertLayer.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,14 @@ void RLRouletteInfoAlertLayer::onInfoIcon(CCObject* sender)
202202

203203
void RLRouletteInfoAlertLayer::onIDButton(CCObject*)
204204
{
205+
auto& rlm = RouletteManager::get();
206+
205207
m_integer_input_layer = RLIntegerInputAlertLayer::create({
206208
"List ID", "ID", 0, 0, INT_MAX,
207-
RouletteManager::get().gdListID == 0 ? std::nullopt : std::optional<int>(RouletteManager::get().gdListID),
209+
rlm.gdListID == 0 ? std::nullopt : std::optional<int>(rlm.gdListID),
208210
10, false,
209211
[&](auto iil) {
210-
RouletteManager::get().gdListID = iil->m_integer;
212+
rlm.gdListID = iil->m_integer;
211213
Mod::get()->setSavedValue<uint64_t>(
212214
DataManager::values::getKeyString<DMMiscKey::GD_LIST_ID>(),
213215
static_cast<uint64_t>(iil->m_integer)

src/roulette/RLRouletteLayer.cpp

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,11 @@ bool RLRouletteLayer::init()
5858
{
5959
if (!BaseCustomLayer::init("RL_sideArt_001.png"_spr)) return false;
6060

61+
auto& rlm = RouletteManager::get();
6162
auto winSize = CCDirector::sharedDirector()->getWinSize();
6263

63-
m_selected_difficulty = RouletteManager::get().previousDifficulty;
64-
m_selected_demon_difficulty = RouletteManager::get().previousDemonDifficulty;
64+
m_selected_difficulty = rlm.previousDifficulty;
65+
m_selected_demon_difficulty = rlm.previousDemonDifficulty;
6566

6667
this->setID("RLRouletteLayer");
6768

@@ -370,7 +371,7 @@ bool RLRouletteLayer::init()
370371
playing_menu->addChild(difficultyNode);
371372

372373
auto attemptText = CCLabelBMFont::create(
373-
fmt::format("Attempt {}", RouletteManager::get().gameState.levelAttempts).c_str(),
374+
fmt::format("Attempt {}", rlm.gameState.levelAttempts).c_str(),
374375
"goldFont.fnt"
375376
);
376377
attemptText->setPosition({ 50.f, -27.f });
@@ -379,7 +380,7 @@ bool RLRouletteLayer::init()
379380
playing_menu->addChild(attemptText);
380381

381382
auto percentageText = CCLabelBMFont::create(
382-
fmt::format("{}%", RouletteManager::get().currentPercentageGoal).c_str(),
383+
fmt::format("{}%", rlm.currentPercentageGoal).c_str(),
383384
"goldFont.fnt"
384385
);
385386
percentageText->setPosition({ 50.f, -60.f });
@@ -396,7 +397,7 @@ bool RLRouletteLayer::init()
396397
percentageBg->setID("percentage-bg");
397398
playing_menu->addChild(percentageBg, -1);
398399

399-
auto progressBar = RLProgressBar::create(RouletteManager::get().gameState.levelPercentage, false);
400+
auto progressBar = RLProgressBar::create(rlm.gameState.levelPercentage, false);
400401
progressBar->setPosition({ .0f, 102.f });
401402
progressBar->setColor({ 255, 255, 0 });
402403
progressBar->setScale(.9f);
@@ -509,7 +510,7 @@ bool RLRouletteLayer::init()
509510
onListChanged();
510511

511512

512-
if (RouletteManager::get().gameState.levelPercentage == 100 && RouletteManager::get().gameState.hasReachedGoal)
513+
if (rlm.gameState.levelPercentage == 100 && rlm.gameState.hasReachedGoal)
513514
{
514515
main_bg->getChildByID("border-title")->setVisible(false);
515516
main_bg->getChildByID("background-1")->setVisible(false);
@@ -518,10 +519,8 @@ bool RLRouletteLayer::init()
518519

519520
onNextButton(nullptr);
520521
}
521-
else if (RouletteManager::get().isPaused)
522+
else if (rlm.isPaused)
522523
{
523-
auto& rlm = RouletteManager::get();
524-
525524
rlm.isPlaying = true;
526525
rlm.isPaused = false;
527526

@@ -549,7 +548,7 @@ void RLRouletteLayer::onClose(CCObject*)
549548
{
550549
auto& rlm = RouletteManager::get();
551550

552-
if (RouletteManager::get().isPlaying)
551+
if (rlm.isPlaying)
553552
{
554553
m_confirmation_layer = RLConfirmationAlertLayer::create({
555554
"Woah there!",
@@ -603,9 +602,11 @@ void RLRouletteLayer::onInfoButton(CCObject*)
603602

604603
void RLRouletteLayer::onStatsButton(CCObject*)
605604
{
606-
RouletteManager::get().gameState.playTime = RouletteManager::get().gameTimer.getElapsedTime();
605+
auto& rlm = RouletteManager::get();
606+
607+
rlm.gameState.playTime = rlm.gameTimer.getElapsedTime();
607608

608-
if ((m_stats_layer = RLStatsAlertLayer::create(RouletteManager::get().gameState)))
609+
if ((m_stats_layer = RLStatsAlertLayer::create(rlm.gameState)))
609610
m_stats_layer->show();
610611
}
611612

@@ -641,19 +642,20 @@ void RLRouletteLayer::onDifficultyButton(CCObject* sender)
641642

642643
void RLRouletteLayer::onStartButton(CCObject*)
643644
{
645+
auto& rlm = RouletteManager::get();
646+
644647
main_menu->setVisible(false);
645648
main_bg->getChildByID("border-title")->setVisible(false);
646649
main_bg->getChildByID("background-1")->setVisible(false);
647650
main_bg->getChildByID("background-2")->setVisible(true);
648651

649-
RouletteManager::get().gameState.startTime = rl::utils::getUnixEpoch();
650-
RouletteManager::get().gameTimer.start();
652+
rlm.gameState.startTime = rl::utils::getUnixEpoch();
653+
rlm.gameTimer.start();
651654

652655
getRandomListLevel();
653-
654656
setupForNextLevel(false, true);
655657

656-
RouletteManager::get().isPlaying = true;
658+
rlm.isPlaying = true;
657659
}
658660

659661
void RLRouletteLayer::onPlusButton(CCObject*)
@@ -732,22 +734,24 @@ void RLRouletteLayer::onNextButton(CCObject*)
732734
if (ListFetcher::get().is_fetching)
733735
return;
734736

735-
if (RouletteManager::get().gameState.levelPercentage == 100)
737+
auto& rlm = RouletteManager::get();
738+
739+
if (rlm.gameState.levelPercentage == 100)
736740
{
737741
auto winSize = CCDirector::sharedDirector()->getWinSize();
738742

739-
RouletteManager::get().gameTimer.pause();
743+
rlm.gameTimer.pause();
740744

741745
setupForNextLevel();
742746

743747
static_cast<CCLabelBMFont*>(finished_menu->getChildByID("skips-label"))->setString(
744-
fmt::format("Skips Used: {}", RouletteManager::get().gameState.skipsUsed).c_str()
748+
fmt::format("Skips Used: {}", rlm.gameState.skipsUsed).c_str()
745749
);
746750
static_cast<CCLabelBMFont*>(finished_menu->getChildByID("levels-played-label"))->setString(
747-
fmt::format("Levels Played: {}", RouletteManager::get().gameState.numLevels).c_str()
751+
fmt::format("Levels Played: {}", rlm.gameState.numLevels).c_str()
748752
);
749753
static_cast<CCLabelBMFont*>(finished_menu->getChildByID("total-attempts-label"))->setString(
750-
fmt::format("Total Attempts: {}", RouletteManager::get().gameState.totalAttempts).c_str()
754+
fmt::format("Total Attempts: {}", rlm.gameState.totalAttempts).c_str()
751755
);
752756

753757
info_menu->getChildByID("stats-button")->setVisible(true);
@@ -763,29 +767,29 @@ void RLRouletteLayer::onNextButton(CCObject*)
763767
playing_menu->setVisible(false);
764768
finished_menu->setVisible(true);
765769
}
766-
else if (RouletteManager::get().gameState.hasReachedGoal)
770+
else if (rlm.gameState.hasReachedGoal)
767771
{
768-
RouletteManager::get().gameState.hasReachedGoal = false;
769-
RouletteManager::get().currentPercentageGoal = RouletteManager::get().gameState.levelPercentageGoal;
770-
RouletteManager::get().gameState.levelPercentage = 0;
771-
RouletteManager::get().gameState.levelAttempts = 0;
772+
rlm.gameState.hasReachedGoal = false;
773+
rlm.currentPercentageGoal = rlm.gameState.levelPercentageGoal;
774+
rlm.gameState.levelPercentage = 0;
775+
rlm.gameState.levelAttempts = 0;
772776

773777
setupForNextLevel(false, true, 40.f);
774778

775779
static_cast<CCLabelBMFont*>(
776780
playing_menu->getChildByID("percentage-text")
777-
)->setString(fmt::format("{}%", RouletteManager::get().currentPercentageGoal).c_str());
781+
)->setString(fmt::format("{}%", rlm.currentPercentageGoal).c_str());
778782
static_cast<CCLabelBMFont*>(
779783
playing_menu->getChildByID("attempt-count-label")
780-
)->setString(fmt::format("Attempt {}", RouletteManager::get().gameState.levelAttempts).c_str());
784+
)->setString(fmt::format("Attempt {}", rlm.gameState.levelAttempts).c_str());
781785

782786
if (m_level.isOkAnd([](auto&& level) { return level.first.levelID != 0; }))
783-
RouletteManager::get().gameState.playedLevels.emplace_back(m_level.unwrap().first.levelID);
787+
rlm.gameState.playedLevels.emplace_back(m_level.unwrap().first.levelID);
784788

785789
getRandomListLevel();
786790
}
787791
else
788-
rl::utils::createNotificationToast(this, fmt::format("You need to get at least {}%!", RouletteManager::get().currentPercentageGoal), .5f, 85.f);
792+
rl::utils::createNotificationToast(this, fmt::format("You need to get at least {}%!", rlm.currentPercentageGoal), .5f, 85.f);
789793
}
790794

791795
void RLRouletteLayer::onRefreshButton(CCObject*)
@@ -883,7 +887,9 @@ void RLRouletteLayer::onSkipButton(CCObject*)
883887
if (ListFetcher::get().is_fetching)
884888
return;
885889

886-
if (RouletteManager::get().gameState.levelPercentage == 100 || RouletteManager::get().gameState.hasReachedGoal)
890+
auto& rlm = RouletteManager::get();
891+
892+
if (rlm.gameState.levelPercentage == 100 || rlm.gameState.hasReachedGoal)
887893
{
888894
rl::utils::createNotificationToast(this, "Skip not used, you have already reached the goal!", .5f, 85.f);
889895

@@ -892,20 +898,20 @@ void RLRouletteLayer::onSkipButton(CCObject*)
892898
return;
893899
}
894900

895-
if (RouletteManager::get().gameState.skipsUsed < Mod::get()->getSettingValue<int64_t>("max-skips"))
901+
if (rlm.gameState.skipsUsed < Mod::get()->getSettingValue<int64_t>("max-skips"))
896902
{
897-
RouletteManager::get().gameState.skipsUsed++;
898-
RouletteManager::get().gameState.hasReachedGoal = false;
899-
RouletteManager::get().currentPercentageGoal = RouletteManager::get().gameState.levelPercentageGoal;
903+
rlm.gameState.skipsUsed++;
904+
rlm.gameState.hasReachedGoal = false;
905+
rlm.currentPercentageGoal = rlm.gameState.levelPercentageGoal;
900906

901907
setupForNextLevel(false, true, 40.f);
902908

903909
static_cast<CCLabelBMFont*>(
904910
playing_menu->getChildByID("attempt-count-label")
905911
)->setString("Attempt 0");
906912

907-
if (RouletteManager::get().gameState.playedLevels.size())
908-
RouletteManager::get().gameState.playedLevels.pop_back();
913+
if (rlm.gameState.playedLevels.size())
914+
rlm.gameState.playedLevels.pop_back();
909915

910916
getRandomListLevel();
911917
}

0 commit comments

Comments
 (0)