void SavegameManager::store(Savegame& arg_savegame) { Savegame* savegame = new Savegame(arg_savegame); SavegameTable::iterator i = find(savegame->get_filename()); if (i == savegames.end()) { // don't know anything about the savegame savegames.push_back(savegame); } else { // already have such a savegame if ((*i)->get_status() == Savegame::FINISHED && savegame->get_status() == Savegame::ACCESSIBLE) { // saved savegame is better then new game delete savegame; } else { // new game is better or equal, save it delete *i; *i = savegame; } } flush(); }
void Levelset::refresh() { for(std::vector<Level*>::iterator i = levels.begin(); i != levels.end(); ++i) { Savegame* savegame = SavegameManager::instance()->get((*i)->resname); if (savegame) { (*i)->accessible = (savegame->get_status() != Savegame::NONE); (*i)->finished = (savegame->get_status() == Savegame::FINISHED); } } if (!levels.empty()) { levels[0]->accessible = true; for(std::vector<Level*>::size_type i = 0; i < levels.size()-1; ++i) if (levels[i]->finished) levels[i+1]->accessible = true; } completion = 0; for(std::vector<Level*>::iterator i = levels.begin(); i != levels.end(); ++i) if ((*i)->finished) completion += 1; completion = Math::clamp(0, completion * 100 / int(levels.size()), 100); }
bool LevelDot::finished() { Savegame* savegame = SavegameManager::instance()->get(plf.get_resname()); if (savegame && savegame->get_status() == Savegame::FINISHED) return true; else return false; }
bool LevelDot::accessible() { Savegame* savegame = SavegameManager::instance()->get(plf.get_resname()); if (savegame && savegame->get_status() != Savegame::NONE) return true; else return false; }
void LevelDot::draw(DrawingContext& gc) { Vector2i mpos = gc.screen_to_world(Vector2i(Input::Controller::current()->get_pointer(Input::STANDARD_POINTER)->get_pos())); float x = static_cast<float>(mpos.x) - pos.x; float y = static_cast<float>(mpos.y) - pos.y; bool highlight = false; if (Math::sqrt(x*x + y*y) < 30.0f) highlight = true; Savegame* savegame = SavegameManager::instance()->get(plf.get_resname()); if (savegame && (savegame->get_status() == Savegame::FINISHED || savegame->get_status() == Savegame::ACCESSIBLE)) { if (savegame->get_status() == Savegame::FINISHED) if (highlight) { gc.draw (highlight_green_dot_sur, pos); } else { gc.draw (green_dot_sur, pos); } else if (highlight) gc.draw (highlight_red_dot_sur, pos); else gc.draw (red_dot_sur, pos); } else { gc.draw (inaccessible_dot_sur, pos); } }
void LevelDot::unlock() { Savegame* savegame = SavegameManager::instance()->get(plf.get_resname()); if (savegame == 0 || savegame->get_status() == Savegame::NONE) { Savegame savegame_(plf.get_resname(), Savegame::ACCESSIBLE, 0, 0); SavegameManager::instance()->store(savegame_); } else { } }