void FullScreenResolutions::init() { #ifdef _WIN32 m_currentResolutions = -1; DEVMODE enumMode, currentMode; int iModeNum = 0; memset(&enumMode, 0, sizeof(DEVMODE)); EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, ¤tMode); ResolutionInfo prevInfo; while (EnumDisplaySettings(NULL, iModeNum++, &enumMode) != 0) { ResolutionInfo curInfo("", enumMode.dmPelsWidth, enumMode.dmPelsHeight, enumMode.dmDisplayFrequency); if (enumMode.dmBitsPerPel == 32 && curInfo != prevInfo) { m_dwNumResolutions++; prevInfo = curInfo; } } m_aResolutions = new ResolutionInfo[m_dwNumResolutions]; m_aResolutionsStr = new char*[m_dwNumResolutions]; iModeNum = 0; int current = 0; char smode[256]; memset(&enumMode, 0, sizeof(DEVMODE)); memset(&prevInfo, 0, sizeof(ResolutionInfo)); while (EnumDisplaySettings(NULL, iModeNum++, &enumMode) != 0) { ResolutionInfo curInfo(NULL, enumMode.dmPelsWidth, enumMode.dmPelsHeight, enumMode.dmDisplayFrequency); if (enumMode.dmBitsPerPel == 32 && curInfo != prevInfo) { if (enumMode.dmPelsHeight == currentMode.dmPelsHeight && enumMode.dmPelsWidth == currentMode.dmPelsWidth) { m_currentResolutions = current; } m_aResolutions[current] = curInfo; sprintf(smode, curInfo.frequency() > 0 ? "%ix%i 32bpp %iHz" : "%ix%i 32bpp", curInfo.width(), curInfo.height(), curInfo.frequency()); m_aResolutionsStr[current] = new char[strlen(smode) + 1]; strcpy(m_aResolutionsStr[current], smode); prevInfo = curInfo; current++; } } #endif }
bool FullScreenResolutions::changeDisplaySettings(uint32_t _resolution) { #ifdef _WIN32 uint32_t width, height, frequency; getResolution(_resolution, &width, &height, &frequency); ResolutionInfo info(NULL, width, height, frequency); DEVMODE enumMode; int iModeNum = 0; memset(&enumMode, 0, sizeof(DEVMODE)); while (EnumDisplaySettings(NULL, iModeNum++, &enumMode) != 0) { ResolutionInfo curInfo(NULL, enumMode.dmPelsWidth, enumMode.dmPelsHeight, enumMode.dmDisplayFrequency); if (enumMode.dmBitsPerPel == 32 && curInfo == info) { bool bRes = ChangeDisplaySettings(&enumMode, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL; WriteTrace(TraceGlitch, TraceDebug, "width=%d, height=%d, freq=%d %s\r\n", enumMode.dmPelsWidth, enumMode.dmPelsHeight, enumMode.dmDisplayFrequency, bRes ? "Success" : "Failed"); return bRes; } } return false; #else // _WIN32 return false; #endif // _WIN32 }
//#define DEBUG bool CFlashUpdate::selectHttpImage(void) { CHTTPTool httpTool; std::string url; std::string name; std::string version; std::string md5; std::vector<std::string> updates_lists, urls, names, versions, descriptions, md5s; char fileTypes[128]; int selected = -1, listWidth = w_max (80, 10); int curVer, newVer, newfound = 0; std::vector<CUpdateMenuTarget*> update_t_list; CConfigFile _configfile('\t'); const char * versionString = (_configfile.loadConfig("/.version")) ? (_configfile.getString( "version", "????????????????").c_str()) : "????????????????"; installedVersion = versionString; CFlashVersionInfo curInfo(versionString); printf("current flash-version: %s (%d)\n", installedVersion.c_str(), curInfo.getVersion()); curVer = curInfo.getVersion(); httpTool.setStatusViewer(this); showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_GETINFOFILE)); // UTF-8 char current[200]; snprintf(current, 200, "%s: %s %s %s %s %s", g_Locale->getText(LOCALE_FLASHUPDATE_CURRENTVERSION_SEP), curInfo.getReleaseCycle(), g_Locale->getText(LOCALE_FLASHUPDATE_CURRENTVERSIONDATE), curInfo.getDate(), g_Locale->getText(LOCALE_FLASHUPDATE_CURRENTVERSIONTIME), curInfo.getTime()); CMenuWidget SelectionWidget(LOCALE_FLASHUPDATE_SELECTIMAGE, NEUTRINO_ICON_UPDATE, listWidth, MN_WIDGET_ID_IMAGESELECTOR); SelectionWidget.addItem(GenericMenuSeparator); SelectionWidget.addItem(GenericMenuBack); SelectionWidget.addItem(new CMenuSeparator(CMenuSeparator::LINE)); SelectionWidget.addItem(new CMenuForwarder(current, false)); std::ifstream urlFile(g_settings.softupdate_url_file.c_str()); #ifdef DEBUG printf("[update] file %s\n", g_settings.softupdate_url_file.c_str()); #endif unsigned int i = 0; while (urlFile >> url) { std::string::size_type startpos, endpos; #ifdef DEBUG printf("[update] url %s\n", url.c_str()); #endif /* extract domain name */ startpos = url.find("//"); if (startpos == std::string::npos) { startpos = 0; endpos = std::string::npos; updates_lists.push_back(url.substr(startpos, endpos - startpos)); } else { //startpos += 2; //endpos = url.find('/', startpos); startpos = url.find('/', startpos+2)+1; endpos = std::string::npos; updates_lists.push_back(url.substr(startpos, endpos - startpos)); } //updates_lists.push_back(url.substr(startpos, endpos - startpos)); SelectionWidget.addItem(new CMenuSeparator(CMenuSeparator::STRING | CMenuSeparator::LINE, updates_lists.rbegin()->c_str())); if (httpTool.downloadFile(url, gTmpPath LIST_OF_UPDATES_LOCAL_FILENAME, 20)) { std::ifstream in(gTmpPath LIST_OF_UPDATES_LOCAL_FILENAME); bool enabled; while (in >> url >> version >> md5 >> std::ws) { urls.push_back(url); versions.push_back(version); std::getline(in, name); names.push_back(name); //std::getline(in, md5); md5s.push_back(md5); enabled = true; CFlashVersionInfo versionInfo(versions[i]); newVer = versionInfo.getVersion(); #ifdef DEBUG printf("[update] url %s version %s (%d) md5 %s name %s\n", url.c_str(), version.c_str(), newVer, md5.c_str(), name.c_str()); #endif if(newVer > curVer) newfound = 1; if(!allow_flash && (versionInfo.snapshot < '3')) enabled = false; fileTypes[i] = versionInfo.snapshot; //std::string description = versionInfo.getType(); std::string description = versionInfo.getReleaseCycle(); description += ' '; description += versionInfo.getType(); description += ' '; description += versionInfo.getDate(); description += ' '; description += versionInfo.getTime(); descriptions.push_back(description); /* workaround since CMenuForwarder does not store the Option String itself */ //SelectionWidget.addItem(new CMenuForwarder(names[i].c_str(), enabled, descriptions[i].c_str(), new CUpdateMenuTarget(i, &selected))); CUpdateMenuTarget * up = new CUpdateMenuTarget(i, &selected); update_t_list.push_back(up); SelectionWidget.addItem(new CMenuForwarder(descriptions[i].c_str(), enabled, names[i].c_str(), up)); i++; } } }
list<GameMap::Index2> GameMap::getPath( const Index2& from, const Index2& to ) { if (from==to || (to.first<0 || to.first>=m_objects.size() || to.second<0 || to.second>=m_objects[0].size())) return list<Index2>(); struct AStarInfo { int g; int h; Index2 parent; int f(){ return g+h; } AStarInfo(int argg, int argh){ g = argg; h = argh; parent.first = parent.second = -1; } }; map<Index2, AStarInfo> opened; map<Index2, AStarInfo> closed; auto last_obj = opened.end(); opened.insert( make_pair(from, AStarInfo(0,0)) ); do { Break_If( opened.empty() ); int min_cost = INT_MAX; Index2 curPos(-1,-1); AStarInfo curInfo(INT_MAX, 0); map<Index2, AStarInfo>::iterator cur; for (map<Index2, AStarInfo>::iterator it = opened.begin(); it != opened.end(); ++it) { if (it->second.f() < curInfo.f()) { curPos = it->first; curInfo = it->second; cur = it; } } opened.erase(cur); closed.insert( make_pair(curPos, curInfo) ); auto surround = getSurrounding(curPos, 1); for (auto it = surround.begin(); it != surround.end(); ++it) { MapCell* cell = m_objects[it->first][it->second]; if ( *it == to ) { AStarInfo info( curInfo.g+loss(curPos,*it), loss(*it, to) ); info.parent = curPos; opened.insert( make_pair(*it, info) ); } else if ( cell->getAStarCost()==INT_MAX || closed.find(*it)!=closed.end() ) { //do nothing } else if ( opened.find(*it) == opened.end() ) { AStarInfo info( curInfo.g+loss(curPos,*it), loss(*it, to) ); info.parent = curPos; opened.insert( make_pair(*it, info) ); } else//已经在开启列表中,检查新的路径是否更好 { auto has = opened.find(*it); if (has->second.g > curInfo.g+loss(curPos,*it)) { has->second.parent = curPos; has->second.g = curInfo.g+loss(curPos,*it); } } } last_obj = opened.find(to); if (last_obj != opened.end()) break; } while (true); if (last_obj == opened.end()) { return list<Index2>(); } list<Index2> ret; ret.push_front( last_obj->first ); auto path = closed.find( last_obj->second.parent ); while (path != closed.end()) { ret.push_front(path->first); path = closed.find( path->second.parent ); } if (!ret.empty()) ret.pop_front(); if (ret.size() > 10) { ret.clear(); } return ret; }