void ViewController::reloadAll() { std::map<SystemData*, FileData*> cursorMap; for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { cursorMap[it->first] = it->second->getCursor(); } mGameListViews.clear(); for(auto it = cursorMap.begin(); it != cursorMap.end(); it++) { it->first->loadTheme(); getGameListView(it->first)->setCursor(it->second); } mSystemListView.reset(); getSystemListView(); // update mCurrentView since the pointers changed if(mState.viewing == GAME_LIST) { mCurrentView = getGameListView(mState.getSystem()); }else if(mState.viewing == SYSTEM_SELECT) { mSystemListView->goToSystem(mState.getSystem(), false); mCurrentView = mSystemListView; }else{ goToSystemView(SystemData::sSystemVector.front()); } updateHelpPrompts(); }
void ViewController::preload() { for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { getGameListView(*it); } }
void ViewController::goToGameList(SystemData* system) { if(mState.viewing == SYSTEM_SELECT) { // move system list auto sysList = getSystemListView(); float offX = sysList->getPosition().x(); int sysId = getSystemId(system); sysList->setPosition(sysId * (float)Renderer::getScreenWidth(), sysList->getPosition().y()); offX = sysList->getPosition().x() - offX; mCamera.translation().x() -= offX; } mState.viewing = GAME_LIST; mState.system = system; if (mCurrentView) { mCurrentView->onHide(); } mCurrentView = getGameListView(system); if (mCurrentView) { mCurrentView->onShow(); } playViewTransition(); }
void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) { for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { if(it->second.get() == view) { bool isCurrent = (mCurrentView == it->second); SystemData* system = it->first; FileData* cursor = view->getCursor(); mGameListViews.erase(it); if(reloadTheme) system->loadTheme(); std::shared_ptr<IGameListView> newView = getGameListView(system); // to counter having come from a placeholder if (!cursor->isPlaceHolder()) { newView->setCursor(cursor); } if(isCurrent) mCurrentView = newView; break; } } // Redisplay the current view if (mCurrentView) mCurrentView->onShow(); }
void ViewController::goToRandomGame() { unsigned int total = 0; for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { if ((*it)->getName() != "retropie") total += (*it)->getDisplayedGameCount(); } // get random number in range int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { if ((*it)->getName() != "retropie") { if ((target - (int)(*it)->getDisplayedGameCount()) >= 0) { target -= (int)(*it)->getDisplayedGameCount(); } else { goToGameList(*it); std::vector<FileData*> list = (*it)->getRootFolder()->getFilesRecursive(GAME, true); getGameListView(*it)->setCursor(list.at(target)); return; } } } }
void ViewController::preload() { const std::vector<SystemData*>& systems = SystemManager::getInstance()->getSystems(); for(auto it = systems.begin(); it != systems.end(); it++) { getGameListView(*it); } }
void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) { for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { if(it->second.get() == view) { bool isCurrent = (mCurrentView == it->second); SystemData* system = it->first; FileData* cursor = view->getCursor(); mGameListViews.erase(it); if(reloadTheme) system->loadTheme(); std::shared_ptr<IGameListView> newView = getGameListView(system); newView->setCursor(cursor); if(isCurrent) mCurrentView = newView; break; } } }