Author: boucman
Date: Thu May 1 22:12:18 2008
New Revision: 26291
URL: http://svn.gna.org/viewcvs/wesnoth?rev=26291&view=rev
Log:
add a formula= filtering criteria to SUF, also remove is_ennemy and is_mine
from the unit FAI type, since it caused unwanted dependency in unit_callable.
The info should be available by other means (like a team_callable object)
Modified:
trunk/src/ai.cpp
trunk/src/callable_objects.cpp
trunk/src/callable_objects.hpp
trunk/src/formula_ai.cpp
trunk/src/unit.cpp
trunk/src/unit_animation.cpp
Modified: trunk/src/ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai.cpp?rev=26291&r1=26290&r2=26291&view=diff
==============================================================================
--- trunk/src/ai.cpp (original)
+++ trunk/src/ai.cpp Thu May 1 22:12:18 2008
@@ -2222,14 +2222,14 @@
} else if(key == "units") {
std::vector<variant> vars;
for(unit_map::const_iterator i = info_.units.begin(); i !=
info_.units.end(); ++i) {
- vars.push_back(variant(new unit_callable(*i,
info_.teams[info_.team_num-1], info_.team_num)));
+ vars.push_back(variant(new unit_callable(*i)));
}
return variant(&vars);
} else if(key == "my_units") {
std::vector<variant> vars;
for(unit_map::const_iterator i = info_.units.begin(); i !=
info_.units.end(); ++i) {
if(i->second.side() == info_.team_num) {
- vars.push_back(variant(new unit_callable(*i,
info_.teams[info_.team_num-1], info_.team_num)));
+ vars.push_back(variant(new unit_callable(*i)));
}
}
return variant(&vars);
@@ -2237,7 +2237,7 @@
std::vector<variant> vars;
for(unit_map::const_iterator i = info_.units.begin(); i !=
info_.units.end(); ++i) {
if(info_.teams[info_.team_num-1].is_enemy(i->second.side())) {
- vars.push_back(variant(new unit_callable(*i,
info_.teams[info_.team_num-1], info_.team_num)));
+ vars.push_back(variant(new unit_callable(*i)));
}
}
return variant(&vars);
Modified: trunk/src/callable_objects.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/callable_objects.cpp?rev=26291&r1=26290&r2=26291&view=diff
==============================================================================
--- trunk/src/callable_objects.cpp (original)
+++ trunk/src/callable_objects.cpp Thu May 1 22:12:18 2008
@@ -106,10 +106,6 @@
return variant(u_.movement_left());
} else if(key == "side") {
return variant(u_.side());
- } else if(key == "is_enemy") {
- return variant(team_.is_enemy(u_.side()));
- } else if(key == "is_mine") {
- return variant(side_ == u_.side());
} else if(key == "value") {
return variant(u_.cost());
} else if(key == "vars") {
@@ -139,8 +135,6 @@
inputs->push_back(game_logic::formula_input("total_movement",
FORMULA_READ_ONLY));
inputs->push_back(game_logic::formula_input("movement_left",
FORMULA_READ_ONLY));
inputs->push_back(game_logic::formula_input("side", FORMULA_READ_ONLY));
- inputs->push_back(game_logic::formula_input("is_enemy",
FORMULA_READ_ONLY));
- inputs->push_back(game_logic::formula_input("is_mine",
FORMULA_READ_ONLY));
}
variant terrain_callable::get_value(const std::string& key) const
Modified: trunk/src/callable_objects.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/callable_objects.hpp?rev=26291&r1=26290&r2=26291&view=diff
==============================================================================
--- trunk/src/callable_objects.hpp (original)
+++ trunk/src/callable_objects.hpp Thu May 1 22:12:18 2008
@@ -127,8 +127,8 @@
class unit_callable : public game_logic::formula_callable {
public:
typedef gamemap::location location;
- unit_callable(const std::pair<location, unit>& pair, const team&
current_team, unsigned int side)
- : loc_(pair.first), u_(pair.second), team_(current_team), side_(side)
+ unit_callable(const std::pair<location, unit>& pair)
+ : loc_(pair.first), u_(pair.second)
{}
const unit& get_unit() const { return u_; }
@@ -137,8 +137,6 @@
private:
const location& loc_;
const unit& u_;
- const team& team_;
- unsigned int side_;
};
#endif
Modified: trunk/src/formula_ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=26291&r1=26290&r2=26291&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Thu May 1 22:12:18 2008
@@ -209,7 +209,7 @@
while (un != end) {
if (distance_between(loc, un->first) <= range) {
if (un->second.side() !=
ai_.get_info().team_num) {
- vars.push_back(variant(new
unit_callable(*un, ai_.current_team(), un->second.side())));
+ vars.push_back(variant(new
unit_callable(*un)));
}
}
++un;
@@ -555,7 +555,7 @@
const location_callable* loc =
convert_variant<location_callable>(args()[0]->evaluate(variables));
const unit_map::const_iterator i =
ai_.get_info().units.find(loc->loc());
if(i != ai_.get_info().units.end()) {
- return variant(new unit_callable(*i,
ai_.current_team(), ai_.get_info().team_num));
+ return variant(new unit_callable(*i));
} else {
return variant();
}
@@ -608,7 +608,7 @@
unit_map::const_iterator un =
ai_.get_info().units.find(range.first->second);
assert(un != ai_.get_info().units.end());
const int side = un->second.side();
- vars.push_back(variant(new unit_callable(*un,
ai_.get_info().teams[side-1], side)));
+ vars.push_back(variant(new unit_callable(*un)));
++range.first;
}
@@ -810,7 +810,7 @@
game_logic::map_formula_callable callable(this);
unit_candidate_moves.push_back(formula);
callable.add_ref();
- callable.add("me", variant(new unit_callable(*i,
current_team(), get_info().team_num)));
+ callable.add("me", variant(new unit_callable(*i)));
make_move(formula, callable);
}
candidate_moves.insert(std::pair<const std::string,
std::vector<game_logic::const_formula_ptr> >
@@ -1079,7 +1079,7 @@
return variant();
}
- return variant(new unit_callable(*i, current_team(),
get_info().team_num));
+ return variant(new unit_callable(*i));
} else if(key == "vars") {
return variant(&vars_);
} else if(key == "keeps") {
Modified: trunk/src/unit.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit.cpp?rev=26291&r1=26290&r2=26291&view=diff
==============================================================================
--- trunk/src/unit.cpp (original)
+++ trunk/src/unit.cpp Thu May 1 22:12:18 2008
@@ -38,6 +38,8 @@
#include "sdl_utils.hpp"
#include "terrain_filter.hpp"
#include "variable.hpp"
+#include "callable_objects.hpp"
+#include "formula.hpp"
#include <cassert>
#include <climits>
@@ -1134,6 +1136,13 @@
if(ch_itors.first == ch_itors.second) {
return false;
}
+ }
+ }
+ if(cfg.has_attribute("formula")) {
+ const unit_callable callable(std::pair<gamemap::location,
unit>(loc,*this));
+ const game_logic::formula form(cfg["formula"]);
+ if(!form.execute(callable).as_bool()) {
+ return false;
}
}
Modified: trunk/src/unit_animation.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_animation.cpp?rev=26291&r1=26290&r2=26291&view=diff
==============================================================================
--- trunk/src/unit_animation.cpp (original)
+++ trunk/src/unit_animation.cpp Thu May 1 22:12:18 2008
@@ -240,6 +240,7 @@
}
std::vector<config>::const_iterator myitor;
for(myitor = unit_filter_.begin(); myitor !=
unit_filter_.end(); myitor++) {
+ printf("%s\n",my_unit->id().c_str());
if(!my_unit->matches_filter(&(*myitor),loc)) return
MATCH_FAIL;
result++;
}
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits