Author: sapient
Date: Thu Jun 12 06:27:44 2008
New Revision: 27109
URL: http://svn.gna.org/viewcvs/wesnoth?rev=27109&view=rev
Log:
possible fix for bug #11813, Shadow_Master to test it
Modified:
trunk/src/unit_types.cpp
Modified: trunk/src/unit_types.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_types.cpp?rev=27109&r1=27108&r2=27109&view=diff
==============================================================================
--- trunk/src/unit_types.cpp (original)
+++ trunk/src/unit_types.cpp Thu Jun 12 06:27:44 2008
@@ -38,6 +38,10 @@
#define DBG_UT LOG_STREAM(debug, engine)
#define LOG_UT LOG_STREAM(info, engine)
#define ERR_UT LOG_STREAM(err, engine)
+
+namespace {
+ std::map< std::string, std::set< std::string > > future_advancefroms;
+}
attack_type::attack_type(const config& cfg)
{
@@ -762,6 +766,16 @@
hide_help_= utils::string_bool(cfg["hide_help"],false);
build_status_ = HELP_INDEX;
+
+ std::map< std::string, std::set< std::string > >::const_iterator
adv_froms = future_advancefroms.find(id_);
+ if (adv_froms != future_advancefroms.end()) {
+ std::set< std::string >::const_iterator adv_it,
+ adv_end = adv_froms->second.end();
+ for(adv_it = adv_froms->second.begin(); adv_it != adv_end;
++adv_it) {
+ add_advancesfrom(*adv_it);
+ }
+ future_advancefroms.erase(id_);
+ }
}
const unit_type& unit_type::get_gender_unit_type(unit_race::GENDER gender)
const
@@ -1131,7 +1145,13 @@
count++;
DBG_UT << "Unit: " << unit_cfg["id"] << ", AdvanceTo " << count <<
": " << *i_adv << "\n";
unit_type_map::iterator itor_advanceto = types_.find(*i_adv);
- itor_advanceto->second.add_advancesfrom(unit_cfg["id"]);
+ if(itor_advanceto == types_.end()) {
+ // if we can't add the advancefrom information yet, we should
+ // just remember it for later (to prevent infinite recursion)
+ future_advancefroms[*i_adv].insert(unit_cfg["id"]);
+ } else {
+
itor_advanceto->second.add_advancesfrom(unit_cfg["id"]);
+ }
}
}
}
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits