mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-15 17:25:32 +00:00
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:
parent
f3cdd5b2f0
commit
9b6fc78690
@ -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>();
|
||||
|
@ -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_;
|
||||
|
@ -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());
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user