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