void engine_lua::do_parse_candidate_action_from_config( rca_context &context, const config &cfg, std::back_insert_iterator<std::vector< candidate_action_ptr > > b ){ if (!cfg) { return; } if (!lua_ai_context_) { return; } candidate_action_ptr ca_ptr; if (!cfg["sticky"].to_bool()) { if (cfg.has_attribute("location")) { ca_ptr = candidate_action_ptr(new lua_candidate_action_wrapper_external(context,cfg,*lua_ai_context_)); } else { ca_ptr = candidate_action_ptr(new lua_candidate_action_wrapper(context,cfg,*lua_ai_context_)); } } else { ca_ptr = candidate_action_ptr(new lua_sticky_candidate_action_wrapper(context,cfg,*lua_ai_context_)); } if (ca_ptr) { *b = ca_ptr; } }
candidate_action_ptr candidate_action_manager::load_candidate_action_from_config(const config& rc_action, ai::formula_ai* ai, function_symbol_table* function_table) { candidate_action_ptr new_ca; const t_string &name = rc_action["name"]; try { const t_string &type = rc_action["type"]; if( type == "movement") { new_ca = candidate_action_ptr(new move_candidate_action(name, type, rc_action, function_table )); } else if( type == "attack") { new_ca = candidate_action_ptr(new attack_candidate_action(name, type, rc_action, function_table )); } else { ERR_AI << "Unknown candidate action type: " << type << "\n"; } } catch(formula_error& e) { ai->handle_exception(e, "Error while registering candidate action '" + name + "'"); } return new_ca; }
void engine_fai::do_parse_candidate_action_from_config( rca_context &context, const config &cfg, std::back_insert_iterator<std::vector< candidate_action_ptr > > b ){ game_logic::candidate_action_ptr fai_ca = formula_ai_.load_candidate_action_from_config(cfg); if (!fai_ca) { ERR_AI_ENGINE_FAI << "side "<<ai_.get_side()<< " : ERROR creating candidate_action["<<cfg["name"]<<"]"<< std::endl; DBG_AI_ENGINE_FAI << "config snippet contains: " << std::endl << cfg << std::endl; return; } candidate_action_ptr ca = candidate_action_ptr(new fai_candidate_action_wrapper(context,cfg,fai_ca,formula_ai_)); *b = ca; }