Revert "MP Create: basic implementation of saved games as their own category (debug only)"

This reverts commit 9a569df848f3b7d774ac29c100a4f36c4923b7bd.

This commit somehow causes massive lag when opening the Campaign dialog with a large (several hundred) saves.
Somehow, the save_index was being regenerated every single time a new save was processed, likely due to
the calling of save.summary() in the create_engine initialization loop. It remains to be seen if this is a bug
in the save_index code, which seems possible.

This commit was also likely the cause of bug #25146. While the fix for that might have been simpler (short-circuiting
the campaign type conditional with a savefile corruption check), since this commit has already caused issues, it's
best to revert it and revisit this idea at another time.
This commit is contained in:
Charles Dang 2016-10-05 05:46:51 +11:00
parent f3cdd5b2f0
commit 9b6fc78690
4 changed files with 5 additions and 131 deletions

View File

@ -30,7 +30,6 @@
#include "marked-up_text.hpp"
#include "minimap.hpp"
#include "saved_game.hpp"
#include "save_index.hpp"
#include "wml_separators.hpp"
#include "wml_exception.hpp"
@ -389,28 +388,6 @@ int campaign::max_players() const
return max_players_;
}
engine_saved_game::engine_saved_game(const config& data, const std::string name)
: scenario(data)
, name_(name)
, id_(data["id"])
{
}
std::string engine_saved_game::name() const
{
return name_;
}
std::string engine_saved_game::id() const
{
return id_;
}
bool engine_saved_game::can_launch_game() const
{
return !data()["corrupt"].to_bool(false);
}
create_engine::create_engine(CVideo& v, saved_game& state) :
current_level_type_(),
current_level_index_(0),
@ -726,11 +703,6 @@ void create_engine::reset_level_filters()
random_maps_filtered_.push_back(i);
}
saved_games_filtered_.clear();
for (size_t i = 0; i<saved_games_.size(); i++) {
saved_games_filtered_.push_back(i);
}
level_name_filter_ = "";
}
@ -790,12 +762,9 @@ level& create_engine::current_level() const
case level::TYPE::CAMPAIGN: {
return *campaigns_[current_level_index_];
}
case level::TYPE::SP_CAMPAIGN: {
return *sp_campaigns_[current_level_index_];
}
case level::TYPE::SAVED_GAME:
case level::TYPE::SP_CAMPAIGN:
default: {
return *saved_games_[current_level_index_];
return *sp_campaigns_[current_level_index_];
}
} // end switch
}
@ -840,9 +809,6 @@ void create_engine::set_current_level(const size_t index)
break;
case level::TYPE::USER_SCENARIO:
current_level_index_ = user_scenarios_filtered_.at(index);
break;
case level::TYPE::SAVED_GAME:
current_level_index_ = saved_games_filtered_.at(index);
}
}
catch (std::out_of_range&)
@ -862,8 +828,7 @@ void create_engine::set_current_level(const size_t index)
}
if (current_level_type_ != level::TYPE::CAMPAIGN &&
current_level_type_ != level::TYPE::SP_CAMPAIGN &&
current_level_type_ != level::TYPE::SAVED_GAME) {
current_level_type_ != level::TYPE::SP_CAMPAIGN) {
dependency_manager_->try_scenario(current_level().id());
}
@ -909,7 +874,7 @@ bool create_engine::generator_assigned() const
bool create_engine::generator_has_settings() const
{
return generator_assigned() && generator_->allow_user_config();
return generator_->allow_user_config();
}
void create_engine::generator_user_config(CVideo& v)
@ -967,14 +932,6 @@ int create_engine::find_level_by_id(const std::string& id) const
i++;
}
i = 0;
for (saved_game_ptr saved_game : saved_games_) {
if (saved_game->id() == id) {
return i;
}
i++;
}
return -1;
}
@ -1019,11 +976,6 @@ level::TYPE create_engine::find_level_type_by_id(const std::string& id) const
return level::TYPE::CAMPAIGN;
}
}
for (saved_game_ptr saved_game : saved_games_) {
if (saved_game->id() == id) {
return level::TYPE::SAVED_GAME;
}
}
return level::TYPE::SP_CAMPAIGN;
}
@ -1189,17 +1141,6 @@ void create_engine::init_all_levels()
// Sort sp campaigns by rank.
std::stable_sort(sp_campaigns_.begin(),sp_campaigns_.end(),less_campaigns_rank);
// Saved games
for(const auto& save : savegame::get_saves_list()) {
// TODO: is this the right way to do this?
if(game_classification::CAMPAIGN_TYPE::string_to_enum(save.summary()["campaign_type"].str()) != game_classification::CAMPAIGN_TYPE::MULTIPLAYER) {
continue;
}
saved_game_ptr game(new engine_saved_game(save.summary(), save.name()));
saved_games_.push_back(game);
}
}
void create_engine::init_extras(const MP_EXTRA extra_type)
@ -1283,15 +1224,6 @@ void create_engine::apply_level_filters()
}
}
saved_games_filtered_.clear();
for (size_t i = 0; i<saved_games_.size(); i++) {
//if (contains_ignore_case(saved_games_[i]->name(), level_name_filter_) &&
// (player_count_filter_ == 1 ||
// saved_games_[i]->num_players() == player_count_filter_)) {
saved_games_filtered_.push_back(i);
//}
}
}
std::vector<create_engine::level_ptr>
@ -1329,11 +1261,6 @@ std::vector<create_engine::level_ptr>
levels.push_back(level);
}
break;
case level::TYPE::SAVED_GAME:
for (level_ptr level : saved_games_) {
levels.push_back(level);
}
break;
} // end switch
return levels;
@ -1373,12 +1300,6 @@ std::vector<create_engine::level_ptr> create_engine::get_levels_by_type(level::T
levels.push_back(sp_campaigns_[level]);
}
break;
case level::TYPE::SAVED_GAME:
for (size_t level : saved_games_filtered_) {
std::cerr << "pushing back saved game level\n";
levels.push_back(saved_games_[level]);
}
break;
} // end switch
return levels;
@ -1399,8 +1320,6 @@ std::vector<size_t> create_engine::get_filtered_level_indices(level::TYPE type)
return campaigns_filtered_;
case level::TYPE::SP_CAMPAIGN:
return sp_campaigns_filtered_;
case level::TYPE::SAVED_GAME:
return saved_games_filtered_;
} // end switch
return std::vector<size_t>();

View File

@ -17,7 +17,6 @@
#include "config.hpp"
#include "utils/make_enum.hpp"
#include "mp_game_settings.hpp"
#include "save_index.hpp"
#include "sdl/utils.hpp"
#include <string>
@ -43,7 +42,6 @@ public:
(RANDOM_MAP, "random_map")
(CAMPAIGN, "campaign")
(SP_CAMPAIGN, "sp_campaign")
(SAVED_GAME, "saved_game")
)
virtual bool can_launch_game() const = 0;
@ -178,24 +176,6 @@ private:
int max_players_;
};
class engine_saved_game : public scenario
{
public:
engine_saved_game(const config& data, const std::string name);
std::string name() const;
std::string id() const;
bool can_launch_game() const;
private:
engine_saved_game(const engine_saved_game&);
void operator=(const engine_saved_game&);
std::string name_;
std::string id_;
};
class create_engine
{
public:
@ -219,7 +199,6 @@ public:
typedef std::shared_ptr<user_map> user_map_ptr;
typedef std::shared_ptr<random_map> random_map_ptr;
typedef std::shared_ptr<campaign> campaign_ptr;
typedef std::shared_ptr<engine_saved_game> saved_game_ptr;
void init_generated_level_data();
@ -315,7 +294,6 @@ private:
std::vector<campaign_ptr> campaigns_;
std::vector<campaign_ptr> sp_campaigns_;
std::vector<random_map_ptr> random_maps_;
std::vector<saved_game_ptr> saved_games_;
std::vector<size_t> scenarios_filtered_;
std::vector<size_t> user_maps_filtered_;
@ -323,7 +301,6 @@ private:
std::vector<size_t> campaigns_filtered_;
std::vector<size_t> sp_campaigns_filtered_;
std::vector<size_t> random_maps_filtered_;
std::vector<size_t> saved_games_filtered_;
std::vector<std::string> user_map_names_;
std::vector<std::string> user_scenario_names_;

View File

@ -447,8 +447,6 @@ void create::process_event_impl(const process_event_data & data)
break;
}
case ng::level::TYPE::SAVED_GAME:
break;
} // end switch
map_size_label_.set_text(map_size.str());

View File

@ -95,7 +95,6 @@ tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& create_en
};
if(game_config::debug) {
level_types_.push_back({ng::level::TYPE::SAVED_GAME, _("Saved Games")});
level_types_.push_back({ng::level::TYPE::SP_CAMPAIGN, _("SP Campaigns")});
}
@ -631,8 +630,7 @@ void tmp_create_game::update_details(twindow& window)
case ng::level::TYPE::SCENARIO:
case ng::level::TYPE::USER_MAP:
case ng::level::TYPE::USER_SCENARIO:
case ng::level::TYPE::RANDOM_MAP:
case ng::level::TYPE::SAVED_GAME: {
case ng::level::TYPE::RANDOM_MAP: {
ng::scenario* current_scenario = dynamic_cast<ng::scenario*>(&create_engine_.current_level());
assert(current_scenario);
@ -738,24 +736,6 @@ void tmp_create_game::post_show(twindow& window)
find_widget<tstacked_widget>(&window, "pager", false).select_layer(-1);
if(get_retval() == twindow::OK) {
// Saved games have a different loading process... at least, right now
if(create_engine_.current_level_type() == ng::level::TYPE::SAVED_GAME) {
std::string error_log;
savegame::read_save_file(create_engine_.current_level().name(), create_engine_.current_level().data(), &error_log);
//copy_era(create_engine_.current_level().data()); TODO
if(!error_log.empty()) {
gui2::show_error_message(window.video(), _("The file you have tried to load is corrupt: '") + error_log);
return;
}
create_engine_.get_state().set_data(create_engine_.current_level().data());
create_engine_.prepare_for_saved_game();
return;
}
preferences::set_modifications(create_engine_.active_mods());
preferences::set_level_type(create_engine_.current_level_type().v);
preferences::set_level(create_engine_.current_level().id());