37 namespace default_recruitment {
61 : leader(leader), ratio_score(1.0), recruit_count(0), in_danger(false) { }
64 for (
const score_map::value_type& entry : scores) {
70 const double sum = get_score_sum();
75 for (
const score_map::value_type& entry : scores) {
76 normalized[entry.first] = entry.second / sum;
80 std::string to_string()
const;
88 a_defense(a_def), b_defense(b_def), value(v) {
91 return value < o.
value;
100 recruit_job(std::vector<std::string>
t, std::string L, std::string
id,
int n,
int i,
bool s,
bool p,
bool b)
101 : types(t), leader(L), id(id)
102 , number(n), importance(i)
103 , total(s), pattern(p), blocker(b)
107 if(number > 0 && number < 99999) {
108 cfg[
"number"] = number;
110 cfg[
"importance"] = importance;
111 cfg[
"total"] = total;
112 cfg[
"pattern"] = pattern;
113 cfg[
"blocker"] = blocker;
114 if(!leader.empty()) {
115 cfg[
"leader_id"] = leader;
126 std::string
get_name()
const {
return "recruit_job";}
135 : types(t), id(id), limit(lim)
149 std::string
get_name()
const {
return "recruit_limit";}
154 std::vector<std::shared_ptr<recruit_job>>
jobs_;
155 std::vector<std::shared_ptr<recruit_limit>>
limits_;
158 void recalculate()
const;
159 void create_job(std::vector<std::shared_ptr<recruit_job>> &jobs,
const config &job);
160 void create_limit(std::vector<std::shared_ptr<recruit_limit>> &limits,
const config &lim);
163 typedef std::map<std::string, std::set<cached_combat_value>>
table_row;
170 virtual double evaluate();
171 virtual void execute();
178 const std::string* get_appropriate_recall(
const std::string& type,
179 const data& leader_data)
const;
180 data* get_best_leader_from_ratio_scores(std::vector<data>& leader_data,
182 const std::string get_best_recruit_from_scores(
const data& leader_data,
186 void compare_cost_maps_and_update_important_hexes(
189 double get_average_defense(
const std::string&
unit_type)
const;
191 void show_important_hexes()
const;
192 void update_average_lawful_bonus();
193 void update_average_local_cost();
194 void update_important_hexes();
197 double compare_unit_types(
const std::string&
a,
const std::string&
b);
198 void do_combat_analysis(std::vector<data>* leader_data);
199 const double* get_cached_combat_value(
const std::string& a,
const std::string& b,
200 double a_defense,
double b_defense);
201 void simulate_attack(
202 const unit_type*
const attacker,
const unit_type*
const defender,
203 double attacker_defense,
double defender_defense,
204 double* damage_to_attacker,
double* damage_to_defender)
const;
207 config* get_most_important_job();
208 const std::string get_random_pattern_type_if_exists(
const data& leader_data,
210 void integrate_recruitment_pattern_in_recruitment_instructions();
211 bool leader_matches_job(
const data& leader_data,
const config* job)
const;
212 bool limit_ok(
const std::string& recruit)
const;
213 bool recruit_matches_job(
const std::string& recruit,
const config* job)
const;
214 bool recruit_matches_type(
const std::string& recruit,
const std::string& type)
const;
215 bool recruit_matches_types(
const std::string& recruit,
216 const std::vector<std::string>& types)
const;
217 bool remove_job_if_no_blocker(
config* job);
220 double get_estimated_income(
int turns)
const;
221 double get_estimated_unit_gain()
const;
222 double get_estimated_village_gain()
const;
223 double get_unit_ratio()
const;
227 void do_randomness(std::vector<data>* leader_data)
const;
228 void do_similarity_penalty(std::vector<data>* leader_data)
const;
230 void handle_recruitment_more(std::vector<data>* leader_data)
const;
231 bool is_enemy_in_radius(
const map_location& loc,
int radius)
const;
232 void update_own_units_count();
233 void update_scouts_wanted();
241 void handle_generic_event(
const std::string& event);
243 bool recruit_list_changed();
244 void set_recruit_list_changed(
bool changed);
245 int gamestate_changed();
246 void reset_gamestate_changed();
std::shared_ptr< action_result > action_result_ptr
std::vector< std::string > types
recruit_limit(std::vector< std::string > t, std::string id, int lim)
count_map own_units_count_
bool recruit_list_changed_
cached_combat_value(double a_def, double b_def, double v)
terrain_count_map important_terrain_
std::string join(const T &v, const std::string &s=",")
Generates a new string joining container items in a list.
std::string get_id() const
double get_score_sum() const
std::map< map_location, double > average_local_cost_
bool recall_unit(const std::string &id, team ¤t_team, const map_location &loc, const map_location &from, map_location::DIRECTION facing, bool show, bool use_undo)
Recalls the unit with the indicated ID for the provided team.
std::vector< std::shared_ptr< recruit_job > > jobs_
std::map< std::string, int > count_map
recruit_situation_change_observer recruit_situation_change_observer_
A single unit type that the player may recruit.
std::set< map_location > important_hexes_
int average_lawful_bonus_
std::string get_id() const
std::shared_ptr< const unit > unit_const_ptr
A small explanation about what's going on here: Each action has access to two game_info objects First...
cache_table combat_cache_
score_map get_normalized_scores() const
std::vector< std::string > types
Encapsulates the map of the game.
data(const unit_map::const_iterator leader)
static map_location::DIRECTION s
Structure which uses find_routes() to build a cost map This maps each hex to a the movements a unit w...
std::map< std::string, std::set< cached_combat_value > > table_row
std::vector< std::shared_ptr< recruit_limit > > limits_
std::map< t_translation::terrain_code, int > terrain_count_map
std::string get_name() const
std::string get_engine() const
recruit_job(std::vector< std::string > t, std::string L, std::string id, int n, int i, bool s, bool p, bool b)
config recruitment_instructions_
std::string get_engine() const
unit_map::const_iterator leader
std::map< std::string, table_row > cache_table
bool operator<(const cached_combat_value &o) const
A config object defines a single node in a WML file, with access to child nodes.
int recruitment_instructions_turn_
static map_location::DIRECTION n
std::map< std::string, double > score_map
std::set< std::string > recruits
int own_units_in_combat_counter_
std::string get_name() const
candidate action framework
std::map< std::size_t, int > cheapest_unit_costs_