Author: dave
Date: Fri Feb 29 06:29:53 2008
New Revision: 24151
URL: http://svn.gna.org/viewcvs/wesnoth?rev=24151&view=rev
Log:
added dir function to formula system
Modified:
branches/formula-ai/data/scenario-test.cfg
branches/formula-ai/src/ai.cpp
branches/formula-ai/src/callable_objects.hpp
branches/formula-ai/src/formula.cpp
branches/formula-ai/src/formula_ai.cpp
branches/formula-ai/src/formula_ai.hpp
branches/formula-ai/src/formula_callable.hpp
branches/formula-ai/src/formula_function.cpp
Modified: branches/formula-ai/data/scenario-test.cfg
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/data/scenario-test.cfg?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/data/scenario-test.cfg (original)
+++ branches/formula-ai/data/scenario-test.cfg Fri Feb 29 06:29:53 2008
@@ -46,11 +46,11 @@
canrecruit=1
recruit=Dwarvish Guardsman,Dwarvish Fighter,Dwarvish
Thunderer,Thief,Poacher,Footpad
gold=100
- #controller=human
+ controller=human
[/side]
[side]
- #controller=human
+ controller=human
type=Dark Sorcerer
side=2
canrecruit=1
Modified: branches/formula-ai/src/ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/ai.cpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/ai.cpp (original)
+++ branches/formula-ai/src/ai.cpp Fri Feb 29 06:29:53 2008
@@ -2184,10 +2184,6 @@
return attack_depth_;
}
-void ai_interface::get_inputs(std::vector<game_logic::formula_input>* inputs)
const
-{
-}
-
namespace {
template<typename Container>
variant villages_from_set(const Container& villages,
@@ -2240,6 +2236,19 @@
return variant(new gamemap_callable(info_.map));
}
return variant();
+}
+
+void ai_interface::get_inputs(std::vector<game_logic::formula_input>* inputs)
const
+{
+ using game_logic::FORMULA_READ_ONLY;
+ inputs->push_back(game_logic::formula_input("turn", FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("units",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("my_units",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("enemy_units",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("villages",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("my_villages",
FORMULA_READ_ONLY));
+
inputs->push_back(game_logic::formula_input("enemy_and_unowned_villages",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("map", FORMULA_READ_ONLY));
}
variant ai::attack_analysis::get_value(const std::string& key) const
Modified: branches/formula-ai/src/callable_objects.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/callable_objects.hpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/callable_objects.hpp (original)
+++ branches/formula-ai/src/callable_objects.hpp Fri Feb 29 06:29:53 2008
@@ -15,6 +15,9 @@
{} \
\
const klass& get_##klass() const { return object_; } \
+ void get_inputs(std::vector<game_logic::formula_input>* inputs) const \
+ { \
+ } \
\
variant get_value(const std::string& key) const {
Modified: branches/formula-ai/src/formula.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/formula.cpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/formula.cpp (original)
+++ branches/formula-ai/src/formula.cpp Fri Feb 29 06:29:53 2008
@@ -118,6 +118,13 @@
public:
explicit list_callable(const variant& list) : list_(list)
{}
+
+ void get_inputs(std::vector<formula_input>* inputs) const {
+ inputs->push_back(formula_input("size", FORMULA_READ_WRITE));
+ inputs->push_back(formula_input("empty", FORMULA_READ_WRITE));
+ inputs->push_back(formula_input("first", FORMULA_READ_WRITE));
+ inputs->push_back(formula_input("last", FORMULA_READ_WRITE));
+ }
variant get_value(const std::string& key) const {
if(key == "size") {
Modified: branches/formula-ai/src/formula_ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/formula_ai.cpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/formula_ai.cpp (original)
+++ branches/formula-ai/src/formula_ai.cpp Fri Feb 29 06:29:53 2008
@@ -506,6 +506,8 @@
formula_ai::formula_ai(info& i) : ai(i), move_maps_valid_(false)
{
+ //make sure we don't run out of refcount
+ add_ref();
vars_.add_ref();
}
@@ -737,6 +739,19 @@
return ai_interface::get_value(key);
}
+void formula_ai::get_inputs(std::vector<formula_input>* inputs) const
+{
+ using game_logic::FORMULA_READ_ONLY;
+ inputs->push_back(game_logic::formula_input("attacks",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("my_moves",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("enemy_moves",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("my_leader",
FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("vars", FORMULA_READ_ONLY));
+ inputs->push_back(game_logic::formula_input("keeps",
FORMULA_READ_ONLY));
+
+ ai_interface::get_inputs(inputs);
+}
+
variant formula_ai::get_keeps() const
{
if(keeps_cache_.is_null()) {
Modified: branches/formula-ai/src/formula_ai.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/formula_ai.hpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/formula_ai.hpp (original)
+++ branches/formula-ai/src/formula_ai.hpp Fri Feb 29 06:29:53 2008
@@ -32,6 +32,7 @@
void do_recruitment();
bool make_move();
virtual variant get_value(const std::string& key) const;
+ virtual void get_inputs(std::vector<game_logic::formula_input>* inputs)
const;
game_logic::const_formula_ptr recruit_formula_;
game_logic::const_formula_ptr move_formula_;
Modified: branches/formula-ai/src/formula_callable.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/formula_callable.hpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/formula_callable.hpp (original)
+++ branches/formula-ai/src/formula_callable.hpp Fri Feb 29 06:29:53 2008
@@ -50,7 +50,7 @@
return do_compare(other) < 0;
}
- virtual void get_inputs(std::vector<formula_input>* inputs) const {}
+ virtual void get_inputs(std::vector<formula_input>* inputs) const {};
protected:
virtual ~formula_callable() {}
Modified: branches/formula-ai/src/formula_function.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/formula-ai/src/formula_function.cpp?rev=24151&r1=24150&r2=24151&view=diff
==============================================================================
--- branches/formula-ai/src/formula_function.cpp (original)
+++ branches/formula-ai/src/formula_function.cpp Fri Feb 29 06:29:53 2008
@@ -1,6 +1,7 @@
#include <iostream>
#include <math.h>
+#include "foreach.hpp"
#include "formula_callable.hpp"
#include "formula_function.hpp"
@@ -9,6 +10,26 @@
namespace game_logic {
namespace {
+
+class dir_function : public function_expression {
+public:
+ explicit dir_function(const args_list& args)
+ : function_expression("dir", args, 1, 1)
+ {}
+
+private:
+ variant execute(const formula_callable& variables) const {
+ variant var = args()[0]->evaluate(variables);
+ const formula_callable* callable = var.as_callable();
+ std::vector<formula_input> inputs = callable->inputs();
+ std::vector<variant> res;
+ foreach(const formula_input& input, inputs) {
+ res.push_back(variant(input.name));
+ }
+
+ return variant(&res);
+ }
+};
class if_function : public function_expression {
public:
@@ -518,7 +539,9 @@
}
std::cerr << "FN: '" << fn << "' " << fn.size() << "\n";
- if(fn == "if") {
+ if(fn == "dir") {
+ return expression_ptr(new dir_function(args));
+ } else if(fn == "if") {
return expression_ptr(new if_function(args));
} else if(fn == "abs") {
return expression_ptr(new abs_function(args));
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits