move active_mods and mp_era to game_classification
in particular because active_mod is no longer mp specific, but also for technical reasons
This commit is contained in:
parent
8f9ab9d13f
commit
0efd35acbc
11 changed files with 35 additions and 31 deletions
|
@ -38,6 +38,8 @@ game_classification::game_classification(const config& cfg)
|
|||
, scenario_define(cfg["scenario_define"])
|
||||
, era_define(cfg["era_define"])
|
||||
, mod_defines(utils::split(cfg["mod_defines"]))
|
||||
, active_mods(utils::split(cfg["active_mods"]))
|
||||
, era_id(cfg["era_id"])
|
||||
, campaign(cfg["campaign"])
|
||||
, campaign_name(cfg["campaign_name"])
|
||||
, abbrev(cfg["abbrev"])
|
||||
|
@ -61,6 +63,8 @@ config game_classification::to_config() const
|
|||
cfg["scenario_define"] = scenario_define;
|
||||
cfg["era_define"] = era_define;
|
||||
cfg["mod_defines"] = utils::join(mod_defines);
|
||||
cfg["active_mods"] = utils::join(active_mods);
|
||||
cfg["era_id"] = era_id;
|
||||
cfg["campaign"] = campaign;
|
||||
cfg["campaign_name"] = campaign_name;
|
||||
cfg["abbrev"] = abbrev;
|
||||
|
|
|
@ -49,6 +49,9 @@ public:
|
|||
std::string era_define; /**< If there is a define the era uses to customize data */
|
||||
std::vector<std::string> mod_defines; /**< If there are defines the modifications use to customize data */
|
||||
|
||||
std::vector<std::string> active_mods;
|
||||
std::string era_id;
|
||||
|
||||
std::string campaign; /**< The id of the campaign being played */
|
||||
std::string campaign_name; /**< The name of the campaign being played. */
|
||||
|
||||
|
|
|
@ -282,11 +282,11 @@ create_engine::create_engine(saved_game& state)
|
|||
|
||||
for(const std::string& str : preferences::modifications(state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER)) {
|
||||
if(game_config_.find_child("modification", "id", str)) {
|
||||
state_.mp_settings().active_mods.push_back(str);
|
||||
state_.classification().active_mods.push_back(str);
|
||||
}
|
||||
}
|
||||
|
||||
dependency_manager_->try_modifications(state_.mp_settings().active_mods, true);
|
||||
dependency_manager_->try_modifications(state_.classification().active_mods, true);
|
||||
|
||||
reset_level_filters();
|
||||
}
|
||||
|
@ -371,8 +371,9 @@ void create_engine::prepare_for_new_level()
|
|||
|
||||
void create_engine::prepare_for_era_and_mods()
|
||||
{
|
||||
state_.classification().era_define = game_config_.find_child("era", "id", get_parameters().mp_era)["define"].str();
|
||||
for(const std::string& mod_id : get_parameters().active_mods) {
|
||||
get_parameters();
|
||||
state_.classification().era_define = game_config_.find_child("era", "id", state_.classification().era_id)["define"].str();
|
||||
for(const std::string& mod_id : state_.classification().active_mods) {
|
||||
state_.classification().mod_defines.push_back(game_config_.find_child("modification", "id", mod_id)["define"].str());
|
||||
}
|
||||
}
|
||||
|
@ -550,7 +551,7 @@ bool create_engine::toggle_mod(int index, bool force)
|
|||
bool is_active = dependency_manager_->is_modification_active(index);
|
||||
dependency_manager_->try_modification_by_index(index, !is_active, force);
|
||||
|
||||
state_.mp_settings().active_mods = dependency_manager_->get_modifications();
|
||||
state_.classification().active_mods = dependency_manager_->get_modifications();
|
||||
|
||||
return !is_active;
|
||||
}
|
||||
|
@ -602,12 +603,12 @@ int create_engine::find_extra_by_id(const MP_EXTRA extra_type, const std::string
|
|||
|
||||
void create_engine::init_active_mods()
|
||||
{
|
||||
state_.mp_settings().active_mods = dependency_manager_->get_modifications();
|
||||
state_.classification().active_mods = dependency_manager_->get_modifications();
|
||||
}
|
||||
|
||||
std::vector<std::string>& create_engine::active_mods()
|
||||
{
|
||||
return state_.mp_settings().active_mods;
|
||||
return state_.classification().active_mods;
|
||||
}
|
||||
|
||||
std::vector<create_engine::extras_metadata_ptr> create_engine::active_mods_data()
|
||||
|
@ -633,7 +634,7 @@ const mp_game_settings& create_engine::get_parameters()
|
|||
DBG_MP << "getting parameter values" << std::endl;
|
||||
|
||||
int era_index = current_level().allow_era_choice() ? current_era_index_ : 0;
|
||||
state_.mp_settings().mp_era = eras_[era_index]->id;
|
||||
state_.classification().era_id = eras_[era_index]->id;
|
||||
state_.mp_settings().mp_era_name = eras_[era_index]->name;
|
||||
|
||||
return state_.mp_settings();
|
||||
|
|
|
@ -45,6 +45,9 @@ static void add_multiplayer_classification(config& multiplayer, saved_game& stat
|
|||
multiplayer["difficulty_define"] = state.classification().difficulty;
|
||||
multiplayer["mp_campaign"] = state.classification().campaign;
|
||||
multiplayer["mp_campaign_name"] = state.classification().campaign_name;
|
||||
multiplayer["mp_era"] = state.classification().era_id;
|
||||
multiplayer["active_mods"] = utils::join(state.classification().active_mods, ",");
|
||||
|
||||
}
|
||||
|
||||
config initial_level_config(saved_game& state)
|
||||
|
@ -84,7 +87,7 @@ config initial_level_config(saved_game& state)
|
|||
level.child("multiplayer")["mp_scenario_addon_version"] = state.to_config().child("scenario")["addon_version"].str();
|
||||
|
||||
// [multiplayer] mp_era= should be persistent over saves.
|
||||
std::string era = params.mp_era;
|
||||
std::string era = state.classification().era_id;
|
||||
|
||||
/**
|
||||
* [era] and [modification]s are toplevel tags here.
|
||||
|
@ -121,7 +124,7 @@ config initial_level_config(saved_game& state)
|
|||
}
|
||||
|
||||
// Add modifications, needed for ai algorithms which are applied in mp_staging.
|
||||
const std::vector<std::string>& mods = params.active_mods;
|
||||
const std::vector<std::string>& mods = state.classification().active_mods;
|
||||
std::vector<std::string> mod_versions;
|
||||
std::vector<std::string> mod_addon_ids;
|
||||
|
||||
|
|
|
@ -705,7 +705,7 @@ void start_local_game_commandline(const config& game_config, saved_game& state,
|
|||
mp_game_settings& parameters = state.mp_settings();
|
||||
|
||||
// Hardcoded default values
|
||||
parameters.mp_era = "era_default";
|
||||
state.classification().era_id = "era_default";
|
||||
parameters.name = "multiplayer_The_Freelands";
|
||||
|
||||
// Default values for which at getter function exists
|
||||
|
@ -729,13 +729,13 @@ void start_local_game_commandline(const config& game_config, saved_game& state,
|
|||
|
||||
// [era] define.
|
||||
if(cmdline_opts.multiplayer_era) {
|
||||
parameters.mp_era = *cmdline_opts.multiplayer_era;
|
||||
state.classification().era_id = *cmdline_opts.multiplayer_era;
|
||||
}
|
||||
|
||||
if(const config& cfg_era = game_config.find_child("era", "id", parameters.mp_era)) {
|
||||
if(const config& cfg_era = game_config.find_child("era", "id", state.classification().era_id)) {
|
||||
state.classification().era_define = cfg_era["define"].str();
|
||||
} else {
|
||||
std::cerr << "Could not find era '" << parameters.mp_era << "'\n";
|
||||
std::cerr << "Could not find era '" << state.classification().era_id << "'\n";
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -440,8 +440,8 @@ void game_launcher::set_test(const std::string& id)
|
|||
state_.clear();
|
||||
state_.classification().campaign_type = game_classification::CAMPAIGN_TYPE::TEST;
|
||||
state_.classification().campaign_define = "TEST";
|
||||
state_.classification().era_id = "era_default";
|
||||
|
||||
state_.mp_settings().mp_era = "era_default";
|
||||
|
||||
state_.set_carryover_sides_start(
|
||||
config {"next_scenario", id}
|
||||
|
@ -738,7 +738,8 @@ void game_launcher::set_tutorial()
|
|||
state_.classification().campaign_type = game_classification::CAMPAIGN_TYPE::TUTORIAL;
|
||||
state_.classification().campaign_define = "TUTORIAL";
|
||||
state_.classification().campaign = "Tutorial";
|
||||
state_.mp_settings().mp_era = "era_default";
|
||||
state_.classification().era_id = "era_default";
|
||||
|
||||
state_.set_carryover_sides_start(
|
||||
config {"next_scenario", "tutorial"}
|
||||
);
|
||||
|
|
|
@ -32,12 +32,10 @@ mp_game_settings::mp_game_settings() :
|
|||
name(),
|
||||
password(),
|
||||
hash(),
|
||||
mp_era(),
|
||||
mp_era_name(),
|
||||
mp_scenario(),
|
||||
mp_scenario_name(),
|
||||
mp_campaign(),
|
||||
active_mods(),
|
||||
side_users(),
|
||||
num_turns(0),
|
||||
village_gold(0),
|
||||
|
@ -66,12 +64,10 @@ mp_game_settings::mp_game_settings(const config& cfg)
|
|||
: name(cfg["scenario"].str())
|
||||
, password()
|
||||
, hash(cfg["hash"].str())
|
||||
, mp_era(cfg["mp_era"].str())
|
||||
, mp_era_name(cfg["mp_era_name"].str())
|
||||
, mp_scenario(cfg["mp_scenario"].str())
|
||||
, mp_scenario_name(cfg["mp_scenario_name"].str())
|
||||
, mp_campaign(cfg["mp_campaign"].str())
|
||||
, active_mods(utils::split(cfg["active_mods"], ','))
|
||||
, side_users(utils::map_split(cfg["side_users"]))
|
||||
, num_turns(cfg["mp_num_turns"])
|
||||
, village_gold(cfg["mp_village_gold"])
|
||||
|
@ -108,12 +104,10 @@ config mp_game_settings::to_config() const
|
|||
|
||||
cfg["scenario"] = name;
|
||||
cfg["hash"] = hash;
|
||||
cfg["mp_era"] = mp_era;
|
||||
cfg["mp_era_name"] = mp_era_name;
|
||||
cfg["mp_scenario"] = mp_scenario;
|
||||
cfg["mp_scenario_name"] = mp_scenario_name;
|
||||
cfg["mp_campaign"] = mp_campaign;
|
||||
cfg["active_mods"] = utils::join(active_mods, ",");
|
||||
cfg["side_users"] = utils::join_map(side_users);
|
||||
cfg["experience_modifier"] = xp_modifier;
|
||||
cfg["mp_countdown"] = mp_countdown;
|
||||
|
|
|
@ -35,12 +35,10 @@ struct mp_game_settings
|
|||
std::string name;
|
||||
std::string password;
|
||||
std::string hash;
|
||||
std::string mp_era;
|
||||
std::string mp_era_name;
|
||||
std::string mp_scenario;
|
||||
std::string mp_scenario_name;
|
||||
std::string mp_campaign;
|
||||
std::vector<std::string> active_mods;
|
||||
std::map<std::string, std::string> side_users;
|
||||
|
||||
int num_turns;
|
||||
|
|
|
@ -369,13 +369,13 @@ void saved_game::expand_mp_events()
|
|||
std::vector<modevents_entry> mods;
|
||||
std::set<std::string> loaded_resources;
|
||||
|
||||
std::transform(mp_settings_.active_mods.begin(), mp_settings_.active_mods.end(), std::back_inserter(mods),
|
||||
std::transform(classification_.active_mods.begin(), classification_.active_mods.end(), std::back_inserter(mods),
|
||||
[](const std::string& id) { return modevents_entry("modification", id); }
|
||||
);
|
||||
|
||||
// We don't want the error message below if there is no era (= if this is a sp game).
|
||||
if(!mp_settings_.mp_era .empty()) {
|
||||
mods.emplace_back("era", mp_settings_.mp_era);
|
||||
if(!classification_.era_id .empty()) {
|
||||
mods.emplace_back("era", classification_.era_id);
|
||||
}
|
||||
|
||||
if(!classification_.campaign.empty()) {
|
||||
|
@ -407,11 +407,11 @@ void saved_game::expand_mp_options()
|
|||
if(starting_point_type_ == STARTING_POINT_SCENARIO && !has_carryover_expanded_) {
|
||||
std::vector<modevents_entry> mods;
|
||||
|
||||
std::transform(mp_settings_.active_mods.begin(), mp_settings_.active_mods.end(), std::back_inserter(mods),
|
||||
std::transform(classification_.active_mods.begin(), classification_.active_mods.end(), std::back_inserter(mods),
|
||||
[](const std::string& id) { return modevents_entry("modification", id); }
|
||||
);
|
||||
|
||||
mods.emplace_back("era", mp_settings_.mp_era);
|
||||
mods.emplace_back("era", classification_.era_id);
|
||||
mods.emplace_back("multiplayer", get_scenario_id());
|
||||
mods.emplace_back("campaign", classification().campaign);
|
||||
|
||||
|
|
|
@ -1385,7 +1385,7 @@ int game_lua_kernel::impl_game_config_get(lua_State *L)
|
|||
return_string_attrib("campaign_type", classification.campaign_type.to_string());
|
||||
if(classification.campaign_type==game_classification::CAMPAIGN_TYPE::MULTIPLAYER) {
|
||||
return_cfgref_attrib("mp_settings", mp_settings.to_config());
|
||||
return_cfgref_attrib("era", game_config_manager::get()->game_config().find_child("era","id",mp_settings.mp_era));
|
||||
return_cfgref_attrib("era", game_config_manager::get()->game_config().find_child("era","id",classification.era_id));
|
||||
//^ finds the era with name matching mp_era, and creates a lua reference from the config of that era.
|
||||
|
||||
//This code for SigurdFD, not the cleanest implementation but seems to work just fine.
|
||||
|
|
|
@ -59,9 +59,9 @@ struct mp_connect_fixture {
|
|||
|
||||
state.reset(new saved_game());
|
||||
state->classification().campaign_type = game_classification::CAMPAIGN_TYPE::MULTIPLAYER;
|
||||
state->classification().era_id = "era_default";
|
||||
config_manager->load_game_config_for_game(state->classification());
|
||||
|
||||
state->mp_settings().mp_era = "era_default";
|
||||
state->mp_settings().name = "multiplayer_The_Freelands";
|
||||
state->mp_settings().use_map_settings = true;
|
||||
state->mp_settings().saved_game = mp_game_settings::SAVED_GAME_MODE::NONE;
|
||||
|
|
Loading…
Add table
Reference in a new issue