Author: segfault
Date: Mon May 19 22:45:19 2008
New Revision: 26724

URL: http://svn.gna.org/viewcvs/wesnoth?rev=26724&view=rev
Log:
finish the "heal_unit" action (i.e add a healers filter, choose if the 
animation must be played and clean the unused variable)

Modified:
    trunk/src/game_events.cpp

Modified: trunk/src/game_events.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_events.cpp?rev=26724&r1=26723&r2=26724&view=diff
==============================================================================
--- trunk/src/game_events.cpp (original)
+++ trunk/src/game_events.cpp Mon May 19 22:45:19 2008
@@ -2771,28 +2771,48 @@
 
        else if(cmd== "heal_unit") {
                
-               const vconfig filter = cfg.child("filter");
+               const bool animated = utils::string_bool(cfg["animate"],false);
+               
+               const vconfig healed_filter = cfg.child("filter");
                unit_map::iterator u;
                
-               if (filter.null()) {
+               if (healed_filter.null()) {
                        // Try to take the unit at loc1
                        u = units->find(event_info.loc1);
                }
                else {
                        for(u  = units->begin(); u != units->end(); ++u) {
-                               if(game_events::unit_matches_filter(u, filter))
+                               if(game_events::unit_matches_filter(u, 
healed_filter))
                                        break;
+                       }
+               }
+
+               const vconfig healers_filter = 
cfg.child("secondary_unit_filter");
+               unit_map::iterator v;
+               std::vector<unit_map::iterator> healers;
+
+               if (!healers_filter.null()) {
+                       for(v  = units->begin(); v != units->end(); ++v) {
+                               if(game_events::unit_matches_filter(v, 
healers_filter) &&
+                                  v->second.has_ability_type("heals")) {
+                                       healers.push_back(v);
+                               }
                        }
                }
 
                // We have found a unit
                if(u != units->end()) {
-                       int amount = lexical_cast_default<int>(cfg["amount"],1);
+                       int amount = lexical_cast_default<int>(cfg["amount"],0);
                        int real_amount = u->second.hitpoints();
                        u->second.heal(amount);
                        real_amount = u->second.hitpoints() - real_amount;
-                       gamemap::location healed_loc = 
u->second.get_interrupted_move();
-                       
unit_display::unit_healing(u->second,u->first,std::vector<unit_map::iterator>(),real_amount);
+
+                       if (animated) {
+                               unit_display::unit_healing(u->second,u->first,
+                                                          healers,
+                                                          real_amount);
+                       }
+
                        state_of_game->set_variable("heal_amount",
                                                    str_cast<int>(real_amount));
                }


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

Reply via email to