00001 /* $Id: registry.cpp 52533 2012-01-07 02:35:17Z shadowmaster $ */ 00002 /* 00003 Copyright (C) 2009 - 2012 by Yurii Chernyi <terraninfo@terraninfo.net> 00004 Part of the Battle for Wesnoth Project http://www.wesnoth.org/ 00005 00006 This program is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY. 00012 00013 See the COPYING file for more details. 00014 */ 00015 00016 /** 00017 * All known c++ AI parts. Workaround to a linker feature of not including all symbols from files, and including only actually referenced stuff. this is not good for 'static registry' pattern. (other workarounds such as --whole-archive for ld are possible, but require messing with all buildsystems) 00018 * @file 00019 */ 00020 00021 #include "composite/ai.hpp" 00022 #include "composite/aspect.hpp" 00023 #include "composite/engine_default.hpp" 00024 #include "composite/engine_fai.hpp" 00025 #include "composite/engine_lua.hpp" 00026 #include "composite/goal.hpp" 00027 #include "default/ai.hpp" 00028 #include "formula/ai.hpp" 00029 #include "registry.hpp" 00030 #include "testing/aspect_attacks.hpp" 00031 #include "testing/ca.hpp" 00032 #include "testing/ca_testing_move_to_targets.hpp" 00033 #include "testing/ca_testing_recruitment.hpp" 00034 #include "testing/ca_global_fallback.hpp" 00035 #include "testing/stage_rca.hpp" 00036 #include "testing/stage_fallback.hpp" 00037 00038 namespace ai { 00039 // ======================================================================= 00040 // AIs 00041 // ======================================================================= 00042 00043 static register_ai_factory<ai_composite> ai_factory_default(""); 00044 static register_ai_factory<ai_composite> ai_default_ai_factory("default_ai"); 00045 static register_ai_factory<idle_ai> ai_idle_ai_factory("idle_ai"); 00046 static register_ai_factory<ai_composite> ai_composite_ai_factory("composite_ai"); 00047 00048 00049 // ======================================================================= 00050 // Engines 00051 // ======================================================================= 00052 00053 static register_engine_factory<engine_cpp> 00054 composite_ai_factory_cpp("cpp"); 00055 00056 static register_engine_factory<engine_fai> 00057 composite_ai_factory_fai("fai"); 00058 00059 static register_engine_factory<engine_lua> 00060 composite_ai_factory_lua("lua"); 00061 00062 // ======================================================================= 00063 // Stages 00064 // ======================================================================= 00065 static register_stage_factory<testing_ai_default::candidate_action_evaluation_loop> 00066 candidate_action_evaluation_loop_factory("testing_ai_default::candidate_action_evaluation_loop"); 00067 00068 static register_stage_factory<testing_ai_default::fallback_to_other_ai> 00069 fallback_to_other_ai_factory("testing_ai_default::fallback"); 00070 00071 static register_stage_factory<ai_default_recruitment_stage> 00072 ai_default_recruitment_stage_factory("ai_default::recruitment"); 00073 00074 static register_stage_factory<idle_stage> 00075 ai_idle_stage_factory("empty"); 00076 00077 00078 // ======================================================================= 00079 // Candidate actions 00080 // ======================================================================= 00081 00082 static register_candidate_action_factory<testing_ai_default::goto_phase> 00083 goto_phase_factory("testing_ai_default::goto_phase"); 00084 00085 static register_candidate_action_factory<testing_ai_default::aspect_recruitment_phase> 00086 aspect_recruitment_phase_factory("testing_ai_default::aspect_recruitment_phase"); 00087 00088 static register_candidate_action_factory<testing_ai_default::recruitment_phase> 00089 recruitment_phase_factory("testing_ai_default::recruitment_phase"); 00090 00091 static register_candidate_action_factory<testing_ai_default::combat_phase> 00092 combat_phase_factory("testing_ai_default::combat_phase"); 00093 00094 static register_candidate_action_factory<testing_ai_default::move_leader_to_goals_phase> 00095 move_leader_to_goals_phase_factory("testing_ai_default::move_leader_to_goals_phase"); 00096 00097 static register_candidate_action_factory<testing_ai_default::move_leader_to_keep_phase> 00098 move_leader_to_keep_phase_factory("testing_ai_default::move_leader_to_keep_phase"); 00099 00100 static register_candidate_action_factory<testing_ai_default::get_villages_phase> 00101 get_villages_phase_factory("testing_ai_default::get_villages_phase"); 00102 00103 static register_candidate_action_factory<testing_ai_default::get_healing_phase> 00104 get_healing_phase_factory("testing_ai_default::get_healing_phase"); 00105 00106 static register_candidate_action_factory<testing_ai_default::retreat_phase> 00107 retreat_phase_factory("testing_ai_default::retreat_phase"); 00108 00109 static register_candidate_action_factory<testing_ai_default::simple_move_and_targeting_phase> 00110 simple_move_and_targeting_phase_factory("testing_ai_default::simple_move_and_targeting_phase"); 00111 00112 static register_candidate_action_factory<testing_ai_default::testing_move_to_targets_phase> 00113 default_move_to_targets_phase_factory("testing_ai_default::default_move_to_targets_phase"); 00114 00115 static register_candidate_action_factory<testing_ai_default::testing_move_to_targets_phase> 00116 testing_move_to_targets_phase_factory("testing_ai_default::testing_move_to_targets_phase"); 00117 00118 static register_candidate_action_factory<testing_ai_default::leader_control_phase> 00119 leader_control_phase_factory("testing_ai_default::leader_control_phase"); 00120 00121 static register_candidate_action_factory<testing_ai_default::testing_recruitment_phase> 00122 testing_recruitment_phase_factory("testing_ai_default::testing_recruitment_phase"); 00123 00124 static register_candidate_action_factory<testing_ai_default::passive_leader_shares_keep_phase> 00125 passive_leader_shares_keep_phase_factory("testing_ai_default::passive_leader_shares_keep_phase"); 00126 00127 static register_candidate_action_factory<testing_ai_default::global_fallback_phase> 00128 global_fallback_phase_factory("testing_ai_default::global_fallback_phase"); 00129 00130 // ======================================================================= 00131 // Goals 00132 // ======================================================================= 00133 00134 static register_goal_factory<target_unit_goal> 00135 goal_factory(""); 00136 00137 00138 static register_goal_factory<target_unit_goal> 00139 goal_factory_target("target"); 00140 00141 00142 static register_goal_factory<target_location_goal> 00143 goal_factory_target_location("target_location"); 00144 00145 00146 static register_goal_factory<protect_location_goal> 00147 goal_factory_protect("protect"); 00148 00149 00150 static register_goal_factory<protect_location_goal> 00151 goal_factory_protect_location("protect_location"); 00152 00153 00154 static register_goal_factory<protect_my_unit_goal> 00155 goal_factory_protect_my_unit("protect_my_unit"); 00156 00157 00158 static register_goal_factory<protect_unit_goal> 00159 goal_factory_protect_unit("protect_unit"); 00160 00161 static register_goal_factory<lua_goal> 00162 goal_factory_lua_goal("lua_goal"); 00163 00164 00165 // ======================================================================= 00166 // Aspects 00167 // ======================================================================= 00168 00169 //name=composite_aspect 00170 static register_aspect_factory< composite_aspect<double> > 00171 aggression__composite_aspect_factory("aggression*composite_aspect"); 00172 00173 static register_aspect_factory< composite_aspect<int> > 00174 attack_depth__composite_aspect_factory("attack_depth*composite_aspect"); 00175 00176 static register_aspect_factory< composite_aspect< attacks_vector > > 00177 attacks__composite_aspect_factory("attacks*composite_aspect"); 00178 00179 static register_aspect_factory< composite_aspect< terrain_filter > > 00180 avoid__composite_aspect_factory("avoid*composite_aspect"); 00181 00182 static register_aspect_factory< composite_aspect<double> > 00183 caution__composite_aspect_factory("caution*composite_aspect"); 00184 00185 static register_aspect_factory< composite_aspect<std::string> > 00186 grouping__composite_aspect_factory("grouping*composite_aspect"); 00187 00188 static register_aspect_factory< composite_aspect<double> > 00189 leader_aggression__composite_aspect_factory("leader_aggression*composite_aspect"); 00190 00191 static register_aspect_factory< composite_aspect<config> > 00192 leader_goal__composite_aspect_factory("leader_goal*composite_aspect"); 00193 00194 static register_aspect_factory< composite_aspect<double> > 00195 leader_value__composite_aspect_factory("leader_value*composite_aspect"); 00196 00197 static register_aspect_factory< composite_aspect<double> > 00198 number_of_possible_recruits_to_force_recruit__composite_aspect_factory("number_of_possible_recruits_to_force_recruit*composite_aspect"); 00199 00200 static register_aspect_factory< composite_aspect<bool> > 00201 passive_leader__composite_aspect_factory("passive_leader*composite_aspect"); 00202 00203 static register_aspect_factory< composite_aspect<bool> > 00204 passive_leader_shares_keep__composite_aspect_factory("passive_leader_shares_keep*composite_aspect"); 00205 00206 static register_aspect_factory< composite_aspect<ministage> > 00207 recruitment__composite_aspect_factory("recruitment*composite_aspect"); 00208 00209 static register_aspect_factory< composite_aspect<bool> > 00210 recruitment_ignore_bad_combat__composite_aspect_factory("recruitment_ignore_bad_combat*composite_aspect"); 00211 00212 static register_aspect_factory< composite_aspect<bool> > 00213 recruitment_ignore_bad_movement__composite_aspect_factory("recruitment_ignore_bad_movement*composite_aspect"); 00214 00215 static register_aspect_factory< composite_aspect< std::vector<std::string> > > 00216 recruitment_pattern__composite_aspect_factory("recruitment_pattern*composite_aspect"); 00217 00218 static register_aspect_factory< composite_aspect<double> > 00219 scout_village_targeting__composite_aspect_factory("scout_village_targeting*composite_aspect"); 00220 00221 static register_aspect_factory< composite_aspect<bool> > 00222 simple_targeting__composite_aspect_factory("simple_targeting*composite_aspect"); 00223 00224 static register_aspect_factory< composite_aspect<bool> > 00225 support_villages__composite_aspect_factory("support_villages*composite_aspect"); 00226 00227 static register_aspect_factory< composite_aspect<double> > 00228 village_value__composite_aspect_factory("village_value*composite_aspect"); 00229 00230 static register_aspect_factory< composite_aspect<int> > 00231 villages_per_scout__composite_aspect_factory("villages_per_scout*composite_aspect"); 00232 00233 00234 //name=standard_aspect 00235 static register_aspect_factory< standard_aspect<double> > 00236 aggression__standard_aspect_factory("aggression*standard_aspect"); 00237 00238 static register_aspect_factory< standard_aspect<int> > 00239 attack_depth__standard_aspect_factory("attack_depth*standard_aspect"); 00240 00241 static register_aspect_factory< testing_ai_default::aspect_attacks > 00242 attacks__testing_ai_default_aspect_attacks_factory("attacks*testing_ai_default::aspect_attacks"); 00243 00244 static register_aspect_factory< standard_aspect< terrain_filter > > 00245 avoid__standard_aspect_factory("avoid*standard_aspect"); 00246 00247 static register_aspect_factory< standard_aspect<double> > 00248 caution__standard_aspect_factory("caution*standard_aspect"); 00249 00250 static register_aspect_factory< standard_aspect<std::string> > 00251 grouping__standard_aspect_factory("grouping*standard_aspect"); 00252 00253 static register_aspect_factory< standard_aspect<double> > 00254 leader_aggression__standard_aspect_factory("leader_aggression*standard_aspect"); 00255 00256 static register_aspect_factory< standard_aspect<config> > 00257 leader_goal__standard_aspect_factory("leader_goal*standard_aspect"); 00258 00259 static register_aspect_factory< standard_aspect<double> > 00260 leader_value__standard_aspect_factory("leader_value*standard_aspect"); 00261 00262 static register_aspect_factory< standard_aspect<double> > 00263 number_of_possible_recruits_to_force_recruit__standard_aspect_factory("number_of_possible_recruits_to_force_recruit*standard_aspect"); 00264 00265 static register_aspect_factory< standard_aspect<bool> > 00266 passive_leader__standard_aspect_factory("passive_leader*standard_aspect"); 00267 00268 static register_aspect_factory< standard_aspect<bool> > 00269 passive_leader_shares_keep__standard_aspect_factory("passive_leader_shares_keep*standard_aspect"); 00270 00271 static register_aspect_factory< standard_aspect<ministage> > 00272 recruitment__standard_aspect_factory("recruitment*standard_aspect"); 00273 00274 static register_aspect_factory< standard_aspect<bool> > 00275 recruitment_ignore_bad_combat__standard_aspect_factory("recruitment_ignore_bad_combat*standard_aspect"); 00276 00277 static register_aspect_factory< standard_aspect<bool> > 00278 recruitment_ignore_bad_movement__standard_aspect_factory("recruitment_ignore_bad_movement*standard_aspect"); 00279 00280 static register_aspect_factory< standard_aspect< std::vector<std::string> > > 00281 recruitment_pattern__standard_aspect_factory("recruitment_pattern*standard_aspect"); 00282 00283 static register_aspect_factory< standard_aspect<double> > 00284 scout_village_targeting__standard_aspect_factory("scout_village_targeting*standard_aspect"); 00285 00286 static register_aspect_factory< standard_aspect<bool> > 00287 simple_targeting__standard_aspect_factory("simple_targeting*standard_aspect"); 00288 00289 static register_aspect_factory< standard_aspect<bool> > 00290 support_villages__standard_aspect_factory("support_villages*standard_aspect"); 00291 00292 static register_aspect_factory< standard_aspect<double> > 00293 village_value__standard_aspect_factory("village_value*standard_aspect"); 00294 00295 static register_aspect_factory< standard_aspect<int> > 00296 villages_per_scout__standard_aspect_factory("villages_per_scout*standard_aspect"); 00297 00298 00299 //name = default 00300 static register_aspect_factory< standard_aspect<double> > 00301 aggression__standard_aspect_factory2("aggression*"); 00302 00303 static register_aspect_factory< standard_aspect<int> > 00304 attack_depth__standard_aspect_factory2("attack_depth*"); 00305 00306 static register_aspect_factory< testing_ai_default::aspect_attacks > 00307 attacks__testing_ai_default_aspect_attacks_factory2("attacks*"); 00308 00309 static register_aspect_factory< standard_aspect< terrain_filter > > 00310 avoid__standard_aspect_factory2("avoid*"); 00311 00312 static register_aspect_factory< standard_aspect<double> > 00313 caution__standard_aspect_factory2("caution*"); 00314 00315 static register_aspect_factory< standard_aspect<std::string> > 00316 grouping__standard_aspect_factory2("grouping*"); 00317 00318 static register_aspect_factory< standard_aspect<double> > 00319 leader_aggression__standard_aspect_factory2("leader_aggression*"); 00320 00321 static register_aspect_factory< standard_aspect<config> > 00322 leader_goal__standard_aspect_factory2("leader_goal*"); 00323 00324 static register_aspect_factory< standard_aspect<double> > 00325 leader_value__standard_aspect_factory2("leader_value*"); 00326 00327 static register_aspect_factory< standard_aspect<double> > 00328 number_of_possible_recruits_to_force_recruit__standard_aspect_factory2("number_of_possible_recruits_to_force_recruit*"); 00329 00330 static register_aspect_factory< standard_aspect<bool> > 00331 passive_leader__standard_aspect_factory2("passive_leader*"); 00332 00333 static register_aspect_factory< standard_aspect<bool> > 00334 passive_leader_shares_keep__standard_aspect_factory2("passive_leader_shares_keep*"); 00335 00336 static register_aspect_factory< standard_aspect<ministage> > 00337 recruitment__standard_aspect_factory2("recruitment*"); 00338 00339 static register_aspect_factory< standard_aspect<bool> > 00340 recruitment_ignore_bad_combat__standard_aspect_factory2("recruitment_ignore_bad_combat*"); 00341 00342 static register_aspect_factory< standard_aspect<bool> > 00343 recruitment_ignore_bad_movement__standard_aspect_factory2("recruitment_ignore_bad_movement*"); 00344 00345 static register_aspect_factory< standard_aspect< std::vector<std::string> > > 00346 recruitment_pattern__standard_aspect_factory2("recruitment_pattern*"); 00347 00348 static register_aspect_factory< standard_aspect<double> > 00349 scout_village_targeting__standard_aspect_factory2("scout_village_targeting*"); 00350 00351 static register_aspect_factory< standard_aspect<bool> > 00352 simple_targeting__standard_aspect_factory2("simple_targeting*"); 00353 00354 static register_aspect_factory< standard_aspect<bool> > 00355 support_villages__standard_aspect_factory2("support_villages*"); 00356 00357 static register_aspect_factory< standard_aspect<double> > 00358 village_value__standard_aspect_factory2("village_value*"); 00359 00360 static register_aspect_factory< standard_aspect<int> > 00361 villages_per_scout__standard_aspect_factory2("villages_per_scout*"); 00362 00363 00364 //name = lua 00365 static register_lua_aspect_factory< lua_aspect<double> > 00366 aggression__lua_aspect_factory("aggression*lua_aspect"); 00367 00368 static register_lua_aspect_factory< lua_aspect<int> > 00369 attack_depth__lua_aspect_factory("attack_depth*lua_aspect"); 00370 00371 static register_lua_aspect_factory< lua_aspect<terrain_filter> > 00372 avoid__lua_aspect_factory("avoid*lua_aspect"); 00373 00374 static register_lua_aspect_factory< lua_aspect<double> > 00375 caution__lua_aspect_factory("caution*lua_aspect"); 00376 00377 static register_lua_aspect_factory< lua_aspect<std::string> > 00378 grouping__lua_aspect_factory("grouping*lua_aspect"); 00379 00380 static register_lua_aspect_factory< lua_aspect<double> > 00381 leader_aggression__lua_aspect_factory("leader_aggression*lua_aspect"); 00382 00383 static register_lua_aspect_factory< lua_aspect<config> > 00384 leader_goal__lua_aspect_factory("leader_goal*lua_aspect"); 00385 00386 static register_lua_aspect_factory< lua_aspect<double> > 00387 leader_value__lua_aspect_factory("leader_value*lua_aspect"); 00388 00389 static register_lua_aspect_factory< lua_aspect<double> > 00390 number_of_possible_recruits_to_force_recruit__lua_aspect_factory("number_of_possible_recruits_to_force_recruit*lua_aspect"); 00391 00392 static register_lua_aspect_factory< lua_aspect<bool> > 00393 passive_leader__lua_aspect_factory("passive_leader*lua_aspect"); 00394 00395 static register_lua_aspect_factory< lua_aspect<bool> > 00396 passive_leader_shares_keep__lua_aspect_factory("passive_leader_shares_keep*lua_aspect"); 00397 00398 static register_lua_aspect_factory< lua_aspect<bool> > 00399 recruitment_ignore_bad_combat__lua_aspect_factory("recruitment_ignore_bad_combat*lua_aspect"); 00400 00401 static register_lua_aspect_factory< lua_aspect<bool> > 00402 recruitment_ignore_bad_movement__lua_aspect_factory("recruitment_ignore_bad_movement*lua_aspect"); 00403 00404 static register_lua_aspect_factory< lua_aspect<double> > 00405 scout_village_targeting__lua_aspect_factory("scout_village_targeting*lua_aspect"); 00406 00407 static register_lua_aspect_factory< lua_aspect<bool> > 00408 simple_targeting__lua_aspect_factory("simple_targeting*lua_aspect"); 00409 00410 static register_lua_aspect_factory< lua_aspect<bool> > 00411 support_villages__lua_aspect_factory("support_villages*lua_aspect"); 00412 00413 static register_lua_aspect_factory< lua_aspect<double> > 00414 village_value__lua_aspect_factory("village_value*lua_aspect"); 00415 00416 static register_lua_aspect_factory< lua_aspect<int> > 00417 villages_per_scout__lua_aspect_factory("villages_per_scout*lua_aspect"); 00418 00419 static register_lua_aspect_factory< lua_aspect< std::vector<std::string> > > 00420 recruitment_pattern__lua_aspect_factory("recruitment_pattern*lua_aspect"); 00421 00422 void registry::init() 00423 { 00424 } 00425 00426 } //end of namespace ai
| Generated by doxygen 1.7.1 on Fri May 25 2012 01:02:44 for The Battle for Wesnoth | Gna! | Forum | Wiki | CIA | devdocs |