diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 84359029c..f52f52efb 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -1096,7 +1096,7 @@ SystemData* SystemData::getRandomSystem(const SystemData* currentSystem) return randomSystem; } -FileData* SystemData::getRandomGame(const FileData* currentGame) +FileData* SystemData::getRandomGame(const FileData* currentGame, bool gameSelectorMode) { std::vector<FileData*> gameList; bool onlyFolders = false; @@ -1109,12 +1109,17 @@ FileData* SystemData::getRandomGame(const FileData* currentGame) gameList = mRootFolder->getParent()->getChildrenListToDisplay(); } else { - gameList = ViewController::getInstance() - ->getGamelistView(mRootFolder->getSystem()) - .get() - ->getCursor() - ->getParent() - ->getChildrenListToDisplay(); + if (gameSelectorMode) { + gameList = mRootFolder->getFilesRecursive(GAME, false, false); + } + else { + gameList = ViewController::getInstance() + ->getGamelistView(mRootFolder->getSystem()) + .get() + ->getCursor() + ->getParent() + ->getChildrenListToDisplay(); + } } if (gameList.size() > 0 && gameList.front()->getParent()->getOnlyFoldersFlag()) diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index b0b4dad10..c22d84d71 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -128,7 +128,7 @@ public: SystemData* getNext() const; SystemData* getPrev() const; static SystemData* getRandomSystem(const SystemData* currentSystem); - FileData* getRandomGame(const FileData* currentGame = nullptr); + FileData* getRandomGame(const FileData* currentGame = nullptr, bool gameSelectorMode = false); FileData* getPlaceholder() { return mPlaceholder; } void sortSystem(bool reloadGamelist = true, bool jumpToFirstRow = false); diff --git a/es-core/src/components/GameSelectorComponent.h b/es-core/src/components/GameSelectorComponent.h index 26f72041a..42fae0fe3 100644 --- a/es-core/src/components/GameSelectorComponent.h +++ b/es-core/src/components/GameSelectorComponent.h @@ -34,7 +34,9 @@ public: if (mGameSelection == GameSelection::RANDOM) { for (int i = 0; i < mGameCount; ++i) { - FileData* randomGame {mSystem->getRandomGame()}; + if (mSystem->getRootFolder()->getGameCount().first == 0) + break; + FileData* randomGame {mSystem->getRandomGame(nullptr, true)}; if (randomGame != nullptr) mGames.emplace_back(randomGame); }