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

Reply via email to