Author: crab
Date: Thu Apr  9 15:51:08 2009
New Revision: 34650

URL: http://svn.gna.org/viewcvs/wesnoth?rev=34650&view=rev
Log:
Added timeofday_modifier formula function. This function returns combat 
modifier due to time of day, taking alignment, illuminate, time of day and 
fearless trait into account.

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

Modified: trunk/src/callable_objects.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/callable_objects.hpp?rev=34650&r1=34649&r2=34650&view=diff
==============================================================================
--- trunk/src/callable_objects.hpp (original)
+++ trunk/src/callable_objects.hpp Thu Apr  9 15:51:08 2009
@@ -202,6 +202,7 @@
        {}
 
        const unit& get_unit() const { return u_; }
+       const location& get_location() const { return loc_; }
        variant get_value(const std::string& key) const;
        void get_inputs(std::vector<game_logic::formula_input>* inputs) const;
 private:

Modified: trunk/src/formula_ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=34650&r1=34649&r2=34650&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Thu Apr  9 15:51:08 2009
@@ -268,6 +268,50 @@
                 }
 
                return variant(&res);
+       }
+
+       const formula_ai& ai_;
+};
+
+/**
+ * timeofday_modifer formula function. Returns combat modifier, taking
+ * alignment, illuminate, time of day and fearless trait into account.
+ * 'leadership' and 'slowed' are not taken into account.
+ * arguments[0] - unit
+ * arguments[1] - location (optional, defaults to unit's current location.
+ */
+class timeofday_modifier_function : public function_expression {
+public:
+       timeofday_modifier_function(const args_list& args, const formula_ai& ai)
+         : function_expression("timeofday_modifier", args, 1, 2), ai_(ai) {
+       }
+private:
+       variant execute(const formula_callable& variables) const {
+               variant u = args()[0]->evaluate(variables);
+
+               if( u.is_null() ) {
+                       return variant();
+               }
+
+               const unit_callable* u_call = 
try_convert_variant<unit_callable>(u);
+
+               if (u_call == NULL) {
+                       return variant();
+               }
+
+               const unit& un = u_call->get_unit();
+
+               map_location const* loc = NULL;
+
+               if(args().size()==2) {
+                       loc = 
&convert_variant<location_callable>(args()[1]->evaluate(variables))->loc();
+               }
+
+               if (loc == NULL) {
+                       loc = &u_call->get_location();
+               }
+
+               return variant(combat_modifier(ai_.get_info().state, 
ai_.get_info().units, *loc, un.alignment(), un.is_fearless(), 
ai_.get_info().map));
        }
 
        const formula_ai& ai_;
@@ -1428,6 +1472,8 @@
                return expression_ptr(new adjacent_locs_function(args, ai_));
        } else if(fn == "castle_locs") {
                return expression_ptr(new castle_locs_function(args, ai_));
+       } else if(fn == "timeofday_modifier") {
+               return expression_ptr(new timeofday_modifier_function(args, 
ai_));
        } else if(fn == "distance_to_nearest_unowned_village") {
                return expression_ptr(new 
distance_to_nearest_unowned_village_function(args, ai_));
        } else if(fn == "shortest_path") {


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

Reply via email to