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

Reply via email to