void AchievementNotification::tick(float t) { // 还有没有完成的通知 if (waitingTaskVec.size() > 0) { // 如果当前没有显示,那么就立刻显示一个 if(!mShowing) { showImmediately(getAchievement()); } } }
void Achieve(int player_id, int game_id, int achievement_id) { Player* player_achieved = getPlayer(player_id); Game* game_achieved = getGame(game_id); Achievement* player_achieved_1 = getAchievement(game_id, achievement_id); for (int i = 0; i < player_database.size(); i++) { if (player_id == player_database[i].getId()) { player_database[i].vector_game_achieve.push_back(make_pair(player_achieved, make_pair(game_achieved, player_achieved_1))); } } }
/** Loads the saved state of all achievements from an XML file. * \param input The XML node to load the data from. */ void AchievementsStatus::load(const XMLNode * input) { std::vector<XMLNode*> xml_achievements; input->getNodes("achievement", xml_achievements); for (unsigned int i = 0; i < xml_achievements.size(); i++) { uint32_t achievement_id(0); xml_achievements[i]->get("id", &achievement_id); Achievement * achievement = getAchievement(achievement_id); if (achievement == NULL) { Log::warn("AchievementsStatus", "Found saved achievement data for a non-existent " "achievement. Discarding."); continue; } achievement->load(xml_achievements[i]); } // for i in xml_achievements } // load
/** Synchronises the achievements between local and online usage. It takes * the list of online achievements, and marks them all to be achieved * locally. Then it issues 'achieved' requests to the server for all local * achievements that are not set online. */ void AchievementsStatus::sync(const std::vector<uint32_t> & achieved_ids) { std::vector<bool> done; for(unsigned int i =0; i < achieved_ids.size(); ++i) { if(done.size()< achieved_ids[i]+1) done.resize(achieved_ids[i]+1); done[achieved_ids[i]] = true; Achievement * achievement = getAchievement(achieved_ids[i]); if(achievement != NULL) achievement->setAchieved(); } std::map<uint32_t, Achievement*>::iterator i; // String to collect all local ids that are not synched // to the online account std::string ids; for(i=m_achievements.begin(); i!=m_achievements.end(); i++) { unsigned int id = i->second->getID(); if(i->second->isAchieved() && (id>=done.size() || !done[id]) ) { ids=ids+StringUtils::toString(id)+","; } } if(ids.size()>0) { ids = ids.substr(0, ids.size() - 1); // delete the last "," in the string Log::info("Achievements", "Synching achievement %d to server.", ids.c_str()); Online::HTTPRequest * request = new Online::HTTPRequest(true, 2); PlayerManager::setUserDetails(request, "achieving"); request->addParameter("achievementid", ids); request->queue(); } } // sync