Skip to content

Commit

Permalink
refactor carryover_info::transfer_all_to
Browse files Browse the repository at this point in the history
the plan is to fully remove the [side] from [carryover_sides] in this
case, but it needs some testing still.
  • Loading branch information
gfgtdf committed Jun 10, 2014
1 parent 703502e commit 42a28bf
Showing 1 changed file with 31 additions and 11 deletions.
42 changes: 31 additions & 11 deletions src/carryover.cpp
Expand Up @@ -186,22 +186,42 @@ void carryover_info::transfer_from(const team& t, int carryover_gold){
carryover_sides_.push_back(carryover(t, carryover_gold, end_level_.carryover_add));
}


struct save_id_equals
{
save_id_equals(std::string val) : value (val) {}
bool operator () (carryover& v2)
{
return value == v2.get_save_id();
}

std::string value;
};

void carryover_info::transfer_all_to(config& side_cfg){
if(side_cfg["save_id"].empty()){
side_cfg["save_id"] = side_cfg["id"];
}
BOOST_FOREACH(carryover& side, carryover_sides_){
if(side.get_save_id() == side_cfg["save_id"]){
side.transfer_all_gold_to(side_cfg);
side.transfer_all_recalls_to(side_cfg);
side.transfer_all_recruits_to(side_cfg);
return;
}
std::vector<carryover>::iterator iside = std::find_if(
carryover_sides_.begin(),
carryover_sides_.end(),
save_id_equals(side_cfg["save_id"])
);
if(iside != carryover_sides_.end())
{
iside->transfer_all_gold_to(side_cfg);
iside->transfer_all_recalls_to(side_cfg);
iside->transfer_all_recruits_to(side_cfg);
//TODO: enable the following line after some testing.
//carryover_sides_.erase(iside);
return;
}

//if no carryover was found for this side, check if starting gold is defined
if(!side_cfg.has_attribute("gold") || side_cfg["gold"].empty()){
side_cfg["gold"] = default_gold_qty;
else
{
//if no carryover was found for this side, check if starting gold is defined
if(!side_cfg.has_attribute("gold") || side_cfg["gold"].empty()){
side_cfg["gold"] = default_gold_qty;
}
}
}

Expand Down

0 comments on commit 42a28bf

Please sign in to comment.