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