Author: dragonking
Date: Mon Oct 13 00:24:40 2008
New Revision: 30104

URL: http://svn.gna.org/viewcvs/wesnoth?rev=30104&view=rev
Log:
Add support for unit loop formulas

Modified:
    trunk/src/formula_ai.cpp
    trunk/src/unit.cpp
    trunk/src/unit.hpp

Modified: trunk/src/formula_ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=30104&r1=30103&r2=30104&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Mon Oct 13 00:24:40 2008
@@ -1369,19 +1369,38 @@
 
        for(unit_map::unit_iterator i = units_.begin() ; i != units_.end() ; 
++i)
        {
-               if ( (i->second.side() == get_info().team_num) && 
i->second.has_formula() )
+               if (i->second.side() == get_info().team_num)
                {
-                       try {
-                               game_logic::const_formula_ptr formula(new 
game_logic::formula(i->second.get_formula(), &function_table));
-                               game_logic::map_formula_callable callable(this);
-                               callable.add_ref();
-                               callable.add("me", variant(new 
unit_callable(*i)));
-                               make_move(formula, callable);
-                       }
-                       catch(formula_error& e) {
-                               if(e.filename_ == "formula")
-                                       e.line_ = 0;
-                               handle_exception( e, "Unit formula error for 
unit: '" + i->second.type_id() + "' standing at (" + 
boost::lexical_cast<std::string>(i->first.x+1) + "," + 
boost::lexical_cast<std::string>(i->first.y+1) + ")");
+                       if( i->second.has_formula() )
+                       {
+                               try {
+                                       game_logic::const_formula_ptr 
formula(new game_logic::formula(i->second.get_formula(), &function_table));
+                                       game_logic::map_formula_callable 
callable(this);
+                                       callable.add_ref();
+                                       callable.add("me", variant(new 
unit_callable(*i)));
+                                       make_move(formula, callable);
+                               }
+                               catch(formula_error& e) {
+                                       if(e.filename_ == "formula")
+                                               e.line_ = 0;
+                                       handle_exception( e, "Unit formula 
error for unit: '" + i->second.type_id() + "' standing at (" + 
boost::lexical_cast<std::string>(i->first.x+1) + "," + 
boost::lexical_cast<std::string>(i->first.y+1) + ")");
+                               }
+                       }
+
+                       if( i->second.has_loop_formula() )
+                       {
+                               try {
+                                       game_logic::const_formula_ptr 
loop_formula(new game_logic::formula(i->second.get_loop_formula(), 
&function_table));
+                                       game_logic::map_formula_callable 
callable(this);
+                                       callable.add_ref();
+                                       callable.add("me", variant(new 
unit_callable(*i)));
+                                       while ( make_move(loop_formula, 
callable) ) {}
+                               }
+                               catch(formula_error& e) {
+                                       if(e.filename_ == "formula")
+                                               e.line_ = 0;
+                                       handle_exception( e, "Unit loop formula 
error for unit: '" + i->second.type_id() + "' standing at (" + 
boost::lexical_cast<std::string>(i->first.x+1) + "," + 
boost::lexical_cast<std::string>(i->first.y+1) + ")");
+                               }
                        }
                }
        }

Modified: trunk/src/unit.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit.cpp?rev=30104&r1=30103&r2=30104&view=diff
==============================================================================
--- trunk/src/unit.cpp (original)
+++ trunk/src/unit.cpp Mon Oct 13 00:24:40 2008
@@ -116,6 +116,7 @@
            alpha_(o.alpha_),
 
            unit_formula_(o.unit_formula_),
+           unit_loop_formula_(o.unit_loop_formula_),
            formula_vars_(o.formula_vars_ ? new 
game_logic::map_formula_callable(*o.formula_vars_) : o.formula_vars_),
 
            recruits_(o.recruits_),
@@ -199,6 +200,7 @@
        gender_(),
        alpha_(),
        unit_formula_(),
+       unit_loop_formula_(),
        formula_vars_(),
        recruits_(),
        movement_(0),
@@ -276,6 +278,7 @@
        gender_(),
        alpha_(),
        unit_formula_(),
+       unit_loop_formula_(),
        formula_vars_(),
        recruits_(),
        movement_(0),
@@ -381,6 +384,7 @@
        gender_(dummy_unit ? gender : generate_gender(*t,use_traits)),
        alpha_(),
        unit_formula_(),
+       unit_loop_formula_(),
        formula_vars_(),
        recruits_(),
        movement_(0),
@@ -479,6 +483,7 @@
        gender_(dummy_unit ? gender : generate_gender(*t,use_traits)),
        alpha_(),
        unit_formula_(),
+       unit_loop_formula_(),
        formula_vars_(),
        recruits_(),
        movement_(0),
@@ -1474,6 +1479,7 @@
 
        //support for unit formulas and unit-specyfic variables in [ai_vars]
        unit_formula_ = cfg["formula"];
+       unit_loop_formula_ = cfg["loop_formula"];
 
        const config* ai_vars = cfg.child("ai_vars");
        if (ai_vars)
@@ -1641,6 +1647,9 @@
        //support for unit formulas and unit-specyfic variables in [ai_vars]
        if (has_formula())
                cfg["formula"] = unit_formula_;
+
+       if (has_loop_formula())
+               cfg["loop_formula"] = unit_loop_formula_;
 
 
        if (formula_vars_ && formula_vars_->empty() == false)

Modified: trunk/src/unit.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit.hpp?rev=30104&r1=30103&r2=30104&view=diff
==============================================================================
--- trunk/src/unit.hpp (original)
+++ trunk/src/unit.hpp Mon Oct 13 00:24:40 2008
@@ -289,7 +289,9 @@
 
        const game_logic::map_formula_callable_ptr& formula_vars() const { 
return formula_vars_; }
        bool has_formula() const { return !unit_formula_.empty(); }
+       bool has_loop_formula() const { return !unit_loop_formula_.empty(); }
        const std::string& get_formula() const { return unit_formula_; }
+       const std::string& get_loop_formula() const { return 
unit_loop_formula_; }
 
        void reset_modifications();
        void backup_state();
@@ -376,6 +378,7 @@
        fixed_t alpha_;
 
        std::string unit_formula_;
+       std::string unit_loop_formula_;
        game_logic::map_formula_callable_ptr formula_vars_;
 
        std::vector<std::string> recruits_;


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to