Author: dave
Date: Thu Feb 28 07:03:53 2008
New Revision: 24135
URL: http://svn.gna.org/viewcvs/wesnoth?rev=24135&view=rev
Log:
added feature to formula AI to allow it to fallback to another AI
Modified:
branches/formula-ai/src/formula_ai.cpp
Modified: branches/formula-ai/src/formula_ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/formula_ai.cpp?rev=24135&r1=24134&r2=24135&view=diff
==============================================================================
--- branches/formula-ai/src/formula_ai.cpp (original)
+++ branches/formula-ai/src/formula_ai.cpp Thu Feb 28 07:03:53 2008
@@ -211,6 +211,27 @@
private:
variant execute(const formula_callable& variables) const {
return variant(new
set_var_callable(args()[0]->evaluate(variables).as_string(),
args()[1]->evaluate(variables)));
+ }
+};
+
+class fallback_callable : public formula_callable {
+ std::string key_;
+ variant get_value(const std::string& key) const { return variant(); }
+public:
+ explicit fallback_callable(const std::string& key) : key_(key) {
+ }
+
+ const std::string& key() const { return key_; }
+};
+
+class fallback_function : public function_expression {
+public:
+ explicit fallback_function(const args_list& args)
+ : function_expression("fallback", args, 1, 1)
+ {}
+private:
+ variant execute(const formula_callable& variables) const {
+ return variant(new
fallback_callable(args()[0]->evaluate(variables).as_string()));
}
};
@@ -460,6 +481,8 @@
return expression_ptr(new unit_moves_function(args,
ai_));
} else if(fn == "set_var") {
return expression_ptr(new set_var_function(args));
+ } else if(fn == "fallback") {
+ return expression_ptr(new fallback_function(args));
} else if(fn == "units_can_reach") {
return expression_ptr(new
units_can_reach_function(args, ai_));
} else if(fn == "defense_on") {
@@ -595,6 +618,7 @@
const attack_callable* attack =
i->try_convert<attack_callable>();
const recruit_callable* recruit_command =
i->try_convert<recruit_callable>();
const set_var_callable* set_var_command =
i->try_convert<set_var_callable>();
+ const fallback_callable* fallback_command =
i->try_convert<fallback_callable>();
prepare_move();
if(move) {
@@ -631,6 +655,12 @@
made_move = true;
} else if(i->is_string() && i->as_string() == "end_turn") {
return false;
+ } else if(fallback_command) {
+ ai_interface* fallback =
create_ai(fallback_command->key(), get_info());
+ if(fallback) {
+ fallback->play_turn();
+ }
+ return false;
} else {
std::cerr << "UNRECOGNIZED MOVE\n";
}
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits