Author: tschmitz
Date: Fri Jul 15 23:44:39 2011
New Revision: 50334
URL: http://svn.gna.org/viewcvs/wesnoth?rev=50334&view=rev
Log:
Reworked the wb::visitor interface a little.
Tightened up some member privacy, added/removed some members, removed some
unnecessary virtual keywords.
Changed the behavior of visitor::visit_all_actions().
Modified:
trunk/src/whiteboard/highlight_visitor.cpp
trunk/src/whiteboard/highlight_visitor.hpp
trunk/src/whiteboard/manager.cpp
trunk/src/whiteboard/mapbuilder_visitor.cpp
trunk/src/whiteboard/mapbuilder_visitor.hpp
trunk/src/whiteboard/validate_visitor.cpp
trunk/src/whiteboard/validate_visitor.hpp
trunk/src/whiteboard/visitor.cpp
trunk/src/whiteboard/visitor.hpp
Modified: trunk/src/whiteboard/highlight_visitor.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/highlight_visitor.cpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/highlight_visitor.cpp (original)
+++ trunk/src/whiteboard/highlight_visitor.cpp Fri Jul 15 23:44:39 2011
@@ -37,7 +37,7 @@
{
highlight_visitor::highlight_visitor(const unit_map& unit_map,
side_actions_ptr side_actions)
- : visitor (side_actions)
+ : visitor()
, mode_(NONE)
, unit_map_(unit_map)
, mouseover_hex_()
@@ -46,6 +46,7 @@
, selection_candidate_(NULL)
, main_highlight_()
, secondary_highlights_()
+ , side_actions_(side_actions)
{
}
Modified: trunk/src/whiteboard/highlight_visitor.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/highlight_visitor.hpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/highlight_visitor.hpp (original)
+++ trunk/src/whiteboard/highlight_visitor.hpp Fri Jul 15 23:44:39 2011
@@ -41,7 +41,7 @@
{
public:
highlight_visitor(const unit_map& unit_map, side_actions_ptr
side_actions);
- virtual ~highlight_visitor();
+ ~highlight_visitor();
void set_mouseover_hex(const map_location& hex);
const map_location& get_mouseover_hex() const {return mouseover_hex_; }
@@ -60,14 +60,13 @@
/// @return the collection of actions that are highlighted but don't
have the focus
secondary_highlights_t get_secondary_highlights() { return
secondary_highlights_; }
-
+private:
virtual void visit_move(move_ptr move);
virtual void visit_attack(attack_ptr attack);
virtual void visit_recruit(recruit_ptr recruit);
virtual void visit_recall(recall_ptr recall);
virtual void visit_suppose_dead(suppose_dead_ptr sup_d);
-private:
void unhighlight();
void find_main_highlight();
@@ -94,6 +93,8 @@
weak_action_ptr main_highlight_;
secondary_highlights_t secondary_highlights_;
+
+ side_actions_ptr side_actions_;
};
} // end namespace wb
Modified: trunk/src/whiteboard/manager.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/manager.cpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/manager.cpp (original)
+++ trunk/src/whiteboard/manager.cpp Fri Jul 15 23:44:39 2011
@@ -267,7 +267,7 @@
: message = "Building planned unit map";
log_scope2("whiteboard", message);
is_map_for_pathfinding_ = for_pathfinding;
- mapbuilder_.reset(new
mapbuilder_visitor(*resources::units, viewer_actions(), for_pathfinding));
+ mapbuilder_.reset(new
mapbuilder_visitor(*resources::units, for_pathfinding));
mapbuilder_->build_map();
planned_unit_map_active_ = true;
}
Modified: trunk/src/whiteboard/mapbuilder_visitor.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/mapbuilder_visitor.cpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/mapbuilder_visitor.cpp (original)
+++ trunk/src/whiteboard/mapbuilder_visitor.cpp Fri Jul 15 23:44:39 2011
@@ -36,8 +36,8 @@
namespace wb
{
-mapbuilder_visitor::mapbuilder_visitor(unit_map& unit_map, side_actions_ptr
side_actions, bool for_pathfinding)
- : visitor(side_actions)
+mapbuilder_visitor::mapbuilder_visitor(unit_map& unit_map, bool
for_pathfinding)
+ : visitor()
, unit_map_(unit_map)
, for_pathfinding_(for_pathfinding)
, applied_actions_()
Modified: trunk/src/whiteboard/mapbuilder_visitor.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/mapbuilder_visitor.hpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/mapbuilder_visitor.hpp (original)
+++ trunk/src/whiteboard/mapbuilder_visitor.hpp Fri Jul 15 23:44:39 2011
@@ -39,30 +39,29 @@
{
public:
- mapbuilder_visitor(unit_map& unit_map, side_actions_ptr side_actions,
bool include_recruits = false);
- virtual ~mapbuilder_visitor();
+ mapbuilder_visitor(unit_map& unit_map, bool include_recruits = false);
+ ~mapbuilder_visitor();
/**
* Calls the appropriate visit_* method on each of the actions
contained in the
* side_actions objects of every team whose turn comes earlier in the
turn order,
* including (and stopping at) the viewer's team.
*/
- virtual void build_map();
+ void build_map();
- /// Visitor pattern method, no need to call this directly
+protected:
virtual void visit_move(move_ptr move);
virtual void visit_attack(attack_ptr attack);
virtual void visit_recruit(recruit_ptr recruit);
virtual void visit_recall(recall_ptr recall);
virtual void visit_suppose_dead(suppose_dead_ptr sup_d);
-protected:
-
//Helper fcn: Temporarily resets all units' moves to max EXCEPT for
//the ones controlled by the player whose turn it is currently.
void reset_moves();
- virtual void restore_normal_map();
+private:
+ void restore_normal_map();
unit_map& unit_map_;
Modified: trunk/src/whiteboard/validate_visitor.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/validate_visitor.cpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/validate_visitor.cpp (original)
+++ trunk/src/whiteboard/validate_visitor.cpp Fri Jul 15 23:44:39 2011
@@ -38,7 +38,8 @@
{
validate_visitor::validate_visitor(unit_map& unit_map)
- : mapbuilder_visitor(unit_map, viewer_actions(), true)
+ : mapbuilder_visitor(unit_map, true)
+ , viewer_actions_(*viewer_actions())
, actions_to_erase_()
, arg_itor_()
{
@@ -73,13 +74,13 @@
// by using the iterator returned by remove_action it could even be
done in the loop above
if (!actions_to_erase_.empty())
{
- int side_actions_size_before = side_actions_->actions().size();
+ int side_actions_size_before = viewer_actions_.actions().size();
LOG_WB << "Erasing " << actions_to_erase_.size() << " invalid
actions.\n";
foreach(action_ptr action, actions_to_erase_)
{
-
side_actions_->remove_action(side_actions_->get_position_of(action), false);
- }
- assert(side_actions_size_before -
side_actions_->actions().size() == actions_to_erase_.size());
+
viewer_actions_.remove_action(viewer_actions_.get_position_of(action), false);
+ }
+ assert(side_actions_size_before -
viewer_actions_.actions().size() == actions_to_erase_.size());
actions_to_erase_.clear();
return false;
}
@@ -122,7 +123,7 @@
pathfind::marked_route new_route;
//@todo: use something else than empty vector for waypoints?
new_route =
resources::controller->get_mouse_handler_base().get_route(m.get_unit(),m.get_dest_hex(),
-
std::vector<map_location>(),
resources::teams->at(side_actions_->team_index()));
+
std::vector<map_location>(),
resources::teams->at(viewer_actions_.team_index()));
/**
* @todo Is the comparison with getNoPathValue really
necessary? An empty route (with cost = 0) is returned
@@ -139,7 +140,7 @@
m.set_route(new_route);
//send updated path to allies
-
resources::whiteboard->queue_net_cmd(side_actions_->make_net_cmd_replace(arg_itor_,m_ptr));
+
resources::whiteboard->queue_net_cmd(viewer_actions_.make_net_cmd_replace(arg_itor_,m_ptr));
//@todo: Since this might lengthen the path, we
probably need a special conflict state
// to warn the player that the initial path is
no longer possible.
@@ -155,15 +156,15 @@
}
// This helper function determines whether there are any invalid actions
planned for m_ptr->get_unit()
-// that occur earlier in the side_actions_ than m_ptr.
+// that occur earlier in viewer_actions_ than m_ptr.
/* private */
bool validate_visitor::no_previous_invalids(move_ptr m_ptr)
{
//arg_itor_ is a protected member of mapbuilder_visitor
- if(arg_itor_ == side_actions_->begin())
+ if(arg_itor_ == viewer_actions_.begin())
return true;
- side_actions::iterator prev_action_of_unit =
side_actions_->find_last_action_of(m_ptr->get_unit(),arg_itor_-1);
- if(prev_action_of_unit == side_actions_->end())
+ side_actions::iterator prev_action_of_unit =
viewer_actions_.find_last_action_of(m_ptr->get_unit(),arg_itor_-1);
+ if(prev_action_of_unit == viewer_actions_.end())
return true;
return (*prev_action_of_unit)->is_valid();
}
@@ -237,7 +238,7 @@
//invalidate recruit hex so number display is updated properly
resources::screen->invalidate(recruit->recruit_hex_);
- int team_index = side_actions_->team_index();
+ int team_index = viewer_actions_.team_index();
//Check that destination hex is still free
if(resources::units->find(recruit->recruit_hex_) !=
resources::units->end())
@@ -282,7 +283,7 @@
//invalidate recall hex so number display is updated properly
resources::screen->invalidate(recall->recall_hex_);
- int team_index = side_actions_->team_index();
+ int team_index = viewer_actions_.team_index();
//Check that destination hex is still free
if(resources::units->find(recall->recall_hex_) !=
resources::units->end())
Modified: trunk/src/whiteboard/validate_visitor.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/validate_visitor.hpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/validate_visitor.hpp (original)
+++ trunk/src/whiteboard/validate_visitor.hpp Fri Jul 15 23:44:39 2011
@@ -34,26 +34,28 @@
* * actions are evaluated for validity along the way.
* * Some invalid actions are deleted.
*/
-class validate_visitor: public mapbuilder_visitor
+class validate_visitor: private mapbuilder_visitor
{
public:
explicit validate_visitor(unit_map& unit_map);
- virtual ~validate_visitor();
+ ~validate_visitor();
/// @return false some actions had to be deleted during validation,
/// which may warrant a second validation
bool validate_actions();
+private:
virtual void visit_move(move_ptr move);
virtual void visit_attack(attack_ptr attack);
virtual void visit_recruit(recruit_ptr recruit);
virtual void visit_recall(recall_ptr recall);
virtual void visit_suppose_dead(suppose_dead_ptr sup_d);
-private:
enum VALIDITY {VALID, OBSTRUCTED, WORTHLESS};
VALIDITY evaluate_move_validity(move_ptr);
bool no_previous_invalids(move_ptr);
+
+ side_actions& viewer_actions_;
std::set<action_ptr> actions_to_erase_;
Modified: trunk/src/whiteboard/visitor.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/visitor.cpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/visitor.cpp (original)
+++ trunk/src/whiteboard/visitor.cpp Fri Jul 15 23:44:39 2011
@@ -17,29 +17,28 @@
* @file
*/
-#include "validate_visitor.hpp"
+#include "visitor.hpp"
#include "action.hpp"
#include "foreach.hpp"
#include "side_actions.hpp"
+#include "play_controller.hpp"
+#include "resources.hpp"
+#include "team.hpp"
+
namespace wb
{
-visitor::visitor(side_actions_ptr side_actions):
- side_actions_(side_actions)
-{
-}
-
-visitor::~visitor()
-{
-}
-
void visitor::visit_all_actions()
{
- foreach(action_ptr action, *side_actions_)
+ size_t current_team = resources::controller->current_side() - 1;
+ size_t num_teams = resources::teams->size();
+ for(size_t iteration = 0; iteration < num_teams; ++iteration)
{
- action->accept(*this);
+ size_t team_index = (current_team+iteration) % num_teams;
+ foreach(action_ptr act,
*resources::teams->at(team_index).get_side_actions())
+ act->accept(*this);
}
}
Modified: trunk/src/whiteboard/visitor.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/visitor.hpp?rev=50334&r1=50333&r2=50334&view=diff
==============================================================================
--- trunk/src/whiteboard/visitor.hpp (original)
+++ trunk/src/whiteboard/visitor.hpp Fri Jul 15 23:44:39 2011
@@ -33,19 +33,23 @@
*/
class visitor : private boost::noncopyable
{
-public:
- visitor(side_actions_ptr side_actions);
- virtual ~visitor();
+ friend class move;
+ friend class attack;
+ friend class recruit;
+ friend class recall;
+ friend class suppose_dead;
+
+protected:
+ visitor() {}
+ ~visitor() {} //Not intended for polymorphic deletion
+
+ void visit_all_actions(); //< weird utility function for derived classes
virtual void visit_move(move_ptr move) = 0;
virtual void visit_attack(attack_ptr attack) = 0;
virtual void visit_recruit(recruit_ptr recruit) = 0;
virtual void visit_recall(recall_ptr recall) = 0;
virtual void visit_suppose_dead(suppose_dead_ptr sup_d) = 0;
-
-protected:
- virtual void visit_all_actions();
- side_actions_ptr side_actions_;
};
}
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits