improve upgrade procedure for target/protect tags

properly convert conditional goals to new-style config
This commit is contained in:
Iurii Chernyi 2010-08-12 19:40:06 +00:00
parent 9eef9054fb
commit f046b0b767

View File

@ -320,6 +320,17 @@ bool configuration::parse_side_config(side_number side, const config& original_c
}
static void transfer_turns_and_time_of_day_data(const config &src, config &dst)
{
if (const config::attribute_value *turns = src.get("turns")) {
dst["turns"] = *turns;
}
if (const config::attribute_value *time_of_day = src.get("time_of_day")) {
dst["time_of_day"] = *time_of_day;
}
}
bool configuration::upgrade_side_config_from_1_07_02_to_1_07_03(side_number side, config &cfg)
{
LOG_AI_CONFIGURATION << "side "<< side <<": upgrading ai config version from version 1.7.2 to 1.7.3"<< std::endl;
@ -349,7 +360,6 @@ bool configuration::upgrade_side_config_from_1_07_02_to_1_07_03(side_number side
config fallback_stage_cfg_ai;
foreach (config &aiparam, cfg.child_range("ai")) {
if (!aiparam.has_attribute("turns") && !aiparam.has_attribute("time_of_day")) {
foreach (const well_known_aspect &wka, well_known_aspects) {
if (wka.was_an_attribute_) {
aiparam.remove_attribute(wka.name_);
@ -361,6 +371,7 @@ bool configuration::upgrade_side_config_from_1_07_02_to_1_07_03(side_number side
foreach (const config &aitarget, aiparam.child_range("target")) {
config aigoal;
transfer_turns_and_time_of_day_data(aiparam,aigoal);
if (const config::attribute_value *v = aitarget.get("value")) {
aigoal["value"] = *v;
@ -376,13 +387,15 @@ bool configuration::upgrade_side_config_from_1_07_02_to_1_07_03(side_number side
aiparam.clear_children("target");
foreach (const config &ai_protect_unit, aiparam.child_range("protect_unit")) {
foreach (config &ai_protect_unit, aiparam.child_range("protect_unit")) {
transfer_turns_and_time_of_day_data(aiparam,ai_protect_unit);
upgrade_protect_goal_config_from_1_07_02_to_1_07_03(side,ai_protect_unit,parsed_cfg,true);
}
aiparam.clear_children("protect_unit");
foreach (const config &ai_protect_location, aiparam.child_range("protect_location")) {
foreach (config &ai_protect_location, aiparam.child_range("protect_location")) {
transfer_turns_and_time_of_day_data(aiparam,ai_protect_location);
upgrade_protect_goal_config_from_1_07_02_to_1_07_03(side,ai_protect_location,parsed_cfg,false);
}
aiparam.clear_children("protect_location");
@ -394,6 +407,7 @@ bool configuration::upgrade_side_config_from_1_07_02_to_1_07_03(side_number side
c["value"] = *v;
c["canrecruit"] = true;
c["side_number"] = side;
transfer_turns_and_time_of_day_data(aiparam,c);
if (const config::attribute_value *v = aiparam.get("protect_leader_radius")) {
c["radius"] = *v;
}
@ -401,7 +415,7 @@ bool configuration::upgrade_side_config_from_1_07_02_to_1_07_03(side_number side
upgrade_protect_goal_config_from_1_07_02_to_1_07_03(side,c,parsed_cfg,true);
}
if (!aiparam.has_attribute("turns") && !aiparam.has_attribute("time_of_day")) {
fallback_stage_cfg_ai.append(aiparam);
}
}
@ -452,6 +466,7 @@ void configuration::upgrade_protect_goal_config_from_1_07_02_to_1_07_03(side_num
{
config aigoal;
aigoal["name"] = "protect";
transfer_turns_and_time_of_day_data(protect_cfg,aigoal);
if (const config::attribute_value *v = protect_cfg.get("value")) {
aigoal["value"] = *v;