int TitleScene::findEpisodes(void *) { m_filefind_found_files.clear(); DirMan worlddir(m_filefind_folder); std::vector<std::string> files; std::vector<std::string> folders; worlddir.getListOfFolders(folders); for(std::string &folder : folders) { std::string path = m_filefind_folder + folder; DirMan episodedir(path); std::vector<std::string> worlds; episodedir.getListOfFiles(worlds, {".wld", ".wldx"}); for(std::string &world : worlds) files.push_back(m_filefind_folder + folder + "/" + world); } bool has_files_added = false; if(!files.empty()) { WorldData world; for(std::string &filename : files) { if(FileFormats::OpenWorldFileHeader(filename, world)) { std::string title = world.EpisodeTitle; std::pair<std::string, std::string > file; file.first = filename; file.second = (title.empty() ? Files::basename(filename) : title); m_filefind_found_files.push_back(file); has_files_added = true; } else { pLogWarning("Failed to parse world map header %s while listing available levels with error [%s] at line %d with line data [%s]", filename.c_str(), world.meta.ERROR_info.c_str(), world.meta.ERROR_linenum, world.meta.ERROR_linedata.c_str()); } } } if(!has_files_added) { std::pair<std::string, std::string > file; file.first = "noworlds"; //% "<episodes not found>" file.second = qtTrId("MSG_EPISODES_NOT_FOUND"); m_filefind_found_files.push_back(file); } m_filefind_finished = true; return 0; }
int TitleScene::findEpisodes( void* ) { filefind_found_files.clear(); QDir worlddir(filefind_folder); QStringList filter; filter << "*.wld" << "*.wldx"; QStringList files; QStringList folders = worlddir.entryList(QDir::Dirs); foreach(QString folder, folders) { QString path = filefind_folder+folder; QDir episodedir(path); QStringList worlds = episodedir.entryList(filter); foreach(QString world, worlds) { files << filefind_folder+folder+"/"+world; }
void TitleScene::setMenu(TitleScene::CurrentMenu _menu) { if(_menu<menuFirst) return; if(_menu>menuLast) return; _currentMenu=_menu; menu.clear(); menu.setTextLenLimit(22); switch(_menu) { case menu_main: menu.setPos(300, 350); menu.setItemsNumber(5); menu.addMenuItem("game1p", "1 Player Game"); menu.addMenuItem("game2p", "2 Player Game"); menu.addMenuItem("gamebt", "Battle Game"); menu.addMenuItem("Options", "Options"); menu.addMenuItem("Exit", "Exit"); break; case menu_options: menu.setPos(260,284); menu.setItemsNumber(9); menu.addMenuItem("tests", "Test of screens"); menu.addMenuItem("testboxes", "Test of message boxes"); menu.addMenuItem("controls", "Player controlling"); menu.addMenuItem("videosetup", "Video settings"); menu.addIntMenuItem(&AppSettings.volume_music, 0, 128, "vlm_music", "Music volume", false, []()->void{ PGE_MusPlayer::MUS_changeVolume(AppSettings.volume_music); }); menu.addIntMenuItem(&AppSettings.volume_sound, 0, 128, "vlm_sound", "Sound volume", false); menu.addBoolMenuItem(&AppSettings.fullScreen, "full_screen", "Full Screen mode", []()->void{ PGE_Window::setFullScreen(AppSettings.fullScreen); } ); break; case menu_tests: menu.setPos(300, 350); menu.setItemsNumber(5); menu.addMenuItem("credits", "Credits"); menu.addMenuItem("loading", "Loading screen"); menu.addMenuItem("gameover", "Game over screen"); break; case menu_testboxes: menu.setPos(300, 350); menu.setItemsNumber(5); menu.addMenuItem("messagebox", "Message box"); menu.addMenuItem("menubox", "Menu box"); menu.addMenuItem("inputbox", "Text Input box"); menu.addMenuItem("questionbox", "Question box"); break; case menu_videosettings: menu.setPos(300, 350); menu.setItemsNumber(5); menu.addBoolMenuItem(&AppSettings.showDebugInfo, "dbg_flag", "Show debug info"); menu.addBoolMenuItem(&AppSettings.frameSkip, "frame_skip", "Enable frame-skip"); menu.addIntMenuItem(&AppSettings.MaxFPS, 65, 1000, "max_fps", "Max FPS"); menu.addIntMenuItem(&AppSettings.timeOfFrame, 2, 15, "phys_step", "Frame time (ms.)", false, [this]()->void{ PGE_Window::TicksPerSecond=1000.0f/AppSettings.timeOfFrame; PGE_Window::TimeOfFrame=AppSettings.timeOfFrame; AppSettings.TicksPerSecond=1000.0f/AppSettings.timeOfFrame; //PGE_Window::TicksPerSecond =AppSettings.TicksPerSecond; this->updateTickValue(); } ); break; case menu_controls: menu.setPos(300, 350); menu.setItemsNumber(5); menu.addMenuItem("control_plr1", "Player 1 controls"); menu.addMenuItem("control_plr2", "Player 2 controls"); break; case menu_controls_plr1: case menu_controls_plr2: { KeyMap *mp_p; int *mct_p=0; SDL_Joystick* jdev=NULL; std::function<void()> ctrlSwitch; if(_menu==menu_controls_plr1) { ctrlSwitch = [this]()->void{ setMenu(menu_controls_plr1); }; mct_p = &AppSettings.player1_controller; if((*mct_p>=0)&&(*mct_p<AppSettings.player1_joysticks.size())) { if(*mct_p<AppSettings.joysticks.size()) jdev = AppSettings.joysticks[*mct_p]; mp_p = &AppSettings.player1_joysticks[*mct_p]; } else mp_p = &AppSettings.player1_keyboard; } else{ ctrlSwitch = [this]()->void{ setMenu(menu_controls_plr2); }; mct_p = &AppSettings.player2_controller; if((*mct_p>=0)&&(*mct_p<AppSettings.player2_joysticks.size())) { if(*mct_p<AppSettings.joysticks.size()) jdev = AppSettings.joysticks[*mct_p]; mp_p = &AppSettings.player2_joysticks[*mct_p]; } else mp_p = &AppSettings.player2_keyboard; } menu.setPos(300, 216); menu.setItemsNumber(11); QList<NamedIntItem> ctrls; NamedIntItem controller; controller.value=-1; controller.label="Keyboard"; ctrls.push_back(controller); for(int i=0;i<AppSettings.joysticks.size();i++) { controller.value=i; controller.label=QString("Joystick: %1").arg(SDL_JoystickName(AppSettings.joysticks[i])); ctrls.push_back(controller); } menu.addNamedIntMenuItem(mct_p, ctrls, "ctrl_type", "Input:", true, ctrlSwitch); menu.setItemWidth(300); menu.setValueOffset(150); menu.addKeyGrabMenuItem(&mp_p->left, "key1", "Left.........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->right, "key2", "Right........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->up, "key3", "Up...........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->down, "key4", "Down.........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->jump, "key5", "Jump.........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->jump_alt, "key6", "Alt-Jump....", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->run, "key7", "Run..........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->run_alt, "key8", "Alt-Run.....", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->drop, "key9", "Drop.........", jdev); menu.setValueOffset(210); menu.addKeyGrabMenuItem(&mp_p->start, "key10", "Start........", jdev); menu.setValueOffset(210); } break; case menu_playepisode: { menu.setPos(300, 350); menu.setItemsNumber(5); //Build list of episodes QDir worlddir(ConfigManager::dirs.worlds); QStringList filter; filter << "*.wld" << "*.wldx"; QStringList files; QStringList folders = worlddir.entryList(QDir::Dirs); foreach(QString folder, folders) { QString path = ConfigManager::dirs.worlds+folder; QDir episodedir(path); QStringList worlds = episodedir.entryList(filter); foreach(QString world, worlds) { files << ConfigManager::dirs.worlds+folder+"/"+world; } } if(files.isEmpty()) menu.addMenuItem("noworlds", "<episodes not found>"); else { foreach(QString file, files) { WorldData world = FileFormats::OpenWorldFileHeader(file); if(world.ReadFileValid) { QString title = world.EpisodeTitle; menu.addMenuItem(file, (title.isEmpty()?QFileInfo(file).fileName():title)); } } menu.sort(); }