Skip to content

Commit

Permalink
Allow external Lua CAs to use [params] instead of {exec,eval}_parms
Browse files Browse the repository at this point in the history
  • Loading branch information
CelticMinstrel authored and mattsc committed Mar 22, 2016
1 parent d0e3bc6 commit e2cbe50
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions src/ai/composite/engine_lua.cpp
Expand Up @@ -126,8 +126,13 @@ class lua_candidate_action_wrapper : public lua_candidate_action_wrapper_base {
class lua_candidate_action_wrapper_external : public lua_candidate_action_wrapper_base {
public:
lua_candidate_action_wrapper_external(rca_context& context, const config& cfg, lua_ai_context &lua_ai_ctx)
: lua_candidate_action_wrapper_base(context,cfg), location_(cfg["location"]), eval_parms_(cfg["eval_parms"]), exec_parms_(cfg["exec_parms"])
: lua_candidate_action_wrapper_base(context,cfg), location_(cfg["location"]), use_parms_(false)
{
if (cfg.has_attribute("exec_parms") || cfg.has_attribute("eval_parms")) {
use_parms_ = true;
exec_parms_ = cfg["exec_parms"].str();
eval_parms_ = cfg["eval_parms"].str();
}
std::string eval_code;
std::string exec_code;
generate_code(eval_code, exec_code);
Expand All @@ -142,21 +147,29 @@ class lua_candidate_action_wrapper_external : public lua_candidate_action_wrappe
{
config cfg = lua_candidate_action_wrapper_base::to_config();
cfg["location"] = location_;
cfg["eval_parms"] = eval_parms_;
cfg["exec_parms"] = exec_parms_;
if (use_parms_) {
cfg["eval_parms"] = eval_parms_;
cfg["exec_parms"] = exec_parms_;
}
return cfg;
}

private:
std::string location_;
std::string eval_parms_;
std::string exec_parms_;
bool use_parms_;

void generate_code(std::string& eval, std::string& exec) {
std::string preamble = "local params, data, state = ...\n";
std::string load = "wesnoth.require(\"" + location_ + "\")";
eval = preamble + "return " + load + ":evaluation(ai, {" + eval_parms_ + "}, {data = data})";
exec = preamble + load + ":execution(ai, {" + exec_parms_ + "}, {data = data})";
if (use_parms_) {
eval = preamble + "return " + load + ":evaluation(ai, {" + eval_parms_ + "}, {data = data})";
exec = preamble + load + ":execution(ai, {" + exec_parms_ + "}, {data = data})";
} else {
eval = preamble + "return " + load + ".evaluation(params, data, state)";
exec = preamble + load + ".execution(params, data, state)";
}
}
};

Expand Down

0 comments on commit e2cbe50

Please sign in to comment.