std::vector<attack_type> unit_type::attacks() const { std::vector<attack_type> res; for (const config &att : cfg_.child_range("attack")) { res.push_back(attack_type(att)); } return res; }
static void set_weapon_info(twindow& window , const std::vector<battle_context>& weapons , const int best_weapon) { tlistbox& weapon_list = find_widget<tlistbox>(&window, "weapon_list", false); window.keyboard_capture(&weapon_list); const config empty; attack_type no_weapon(empty); for (size_t i = 0; i < weapons.size(); ++i) { const battle_context_unit_stats& attacker = weapons[i].get_attacker_stats(); const battle_context_unit_stats& defender = weapons[i].get_defender_stats(); const attack_type& attacker_weapon = attack_type(*attacker.weapon); const attack_type& defender_weapon = attack_type( defender.weapon ? *defender.weapon : no_weapon); std::map<std::string, string_map> data; string_map item; item["label"] = attacker_weapon.name(); data.insert(std::make_pair("attacker_weapon", item)); item["label"] = defender_weapon.name(); data.insert(std::make_pair("defender_weapon", item)); weapon_list.add_row(data); } assert(best_weapon < static_cast<int>(weapon_list.get_item_count())); weapon_list.select_row(best_weapon); }