Author: tschmitz
Date: Mon Aug 22 12:07:18 2011
New Revision: 50878

URL: http://svn.gna.org/viewcvs/wesnoth?rev=50878&view=rev
Log:
Maybe fixed a bug with invalid/multi-turn actions.

Refactored mapbuilder::visit().

Modified:
    trunk/src/whiteboard/mapbuilder.cpp
    trunk/src/whiteboard/mapbuilder.hpp

Modified: trunk/src/whiteboard/mapbuilder.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/mapbuilder.cpp?rev=50878&r1=50877&r2=50878&view=diff
==============================================================================
--- trunk/src/whiteboard/mapbuilder.cpp (original)
+++ trunk/src/whiteboard/mapbuilder.cpp Mon Aug 22 12:07:18 2011
@@ -66,21 +66,43 @@
        visit_all();
 }
 
+///@return whether act is invalid
+bool mapbuilder::visit_helper(side_actions::iterator const& itor, action_ptr 
const& act)
+{
+       validate(itor);
+       if(act->is_valid())
+       {
+               act->apply_temp_modifier(unit_map_);
+               applied_actions_.push_back(act);
+               return false;
+       }
+       else //invalid
+               return true;
+}
+
 bool mapbuilder::visit(size_t, team&, side_actions&, side_actions::iterator 
itor)
 {
        action_ptr act = *itor;
        unit* u = act->get_unit();
 
        if(acted_this_turn_.find(u) == acted_this_turn_.end())
+               visit_helper(itor,act);
+       else //gotta restore MP first
        {
+               int original_moves = u->movement_left();
+
+               //reset MP
                u->set_movement(u->total_movement());
                acted_this_turn_.insert(u);
-       }
-       validate(itor);
-       if(act->is_valid())
-       {
-               act->apply_temp_modifier(unit_map_);
-               applied_actions_.push_back(act);
+
+               bool revert = visit_helper(itor,act);
+
+               if(revert) //< the action was invalid
+               {
+                       //didn't need to restore MP after all ... so let's 
change it back
+                       acted_this_turn_.erase(u);
+                       u->set_movement(original_moves);
+               }
        }
        return true;
 }

Modified: trunk/src/whiteboard/mapbuilder.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/mapbuilder.hpp?rev=50878&r1=50877&r2=50878&view=diff
==============================================================================
--- trunk/src/whiteboard/mapbuilder.hpp (original)
+++ trunk/src/whiteboard/mapbuilder.hpp Mon Aug 22 12:07:18 2011
@@ -52,8 +52,11 @@
        bool visit(size_t team_index, team&, side_actions&, 
side_actions::iterator);
        bool post_visit_team(size_t team_index, team&, side_actions&);
 
+       //helper for visit(), above
+       bool visit_helper(side_actions::iterator const&, action_ptr const&);
+
        //For validate_visitor to override
-       virtual void validate(side_actions::iterator const&) {};
+       virtual void validate(side_actions::iterator const&) {}
 
        //Helper fcn: Arranges for all units' MP to be restored upon destruction
        void reset_moves();


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

Reply via email to