void show_unit_description(CVideo& video, const unit_type &t) { std::string var_id = t.get_cfg()["variation_id"].str(); if (var_id.empty()) var_id = t.get_cfg()["variation_name"].str(); bool hide_help = t.hide_help(); bool use_variation = false; if (!var_id.empty()) { const unit_type *parent = unit_types.find(t.id()); assert(parent); if (hide_help) { hide_help = parent->hide_help(); } else { use_variation = true; } } if (use_variation) help::show_variation_help(video, t.id(), var_id, hide_help); else help::show_unit_help(video, t.id(), t.show_variations_in_help(), hide_help); }
void unit_type_data::add_advancement(unit_type& to_unit) const { const config& cfg = to_unit.get_cfg(); for (const config &af : cfg.child_range("advancefrom")) { const std::string &from = af["unit"]; int xp = af["experience"]; unit_type_data::unit_type_map::iterator from_unit = types_.find(from); if (from_unit == types_.end()) { std::ostringstream msg; msg << "unit type '" << from << "' not found when resolving [advancefrom] tag for '" << to_unit.log_id() << "'"; throw config::error(msg.str()); } // Fix up advance_from references from_unit->second.add_advancement(to_unit, xp); DBG_UT << "Added advancement ([advancefrom]) from " << from << " to " << to_unit.log_id() << "\n"; } }