Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef WB_MAPBUILDER_HPP_
00021 #define WB_MAPBUILDER_HPP_
00022
00023 #include <boost/ptr_container/ptr_vector.hpp>
00024
00025 #include "utility.hpp"
00026 #include "visitor.hpp"
00027
00028 struct unit_movement_resetter;
00029
00030 namespace wb
00031 {
00032
00033
00034
00035
00036
00037 class mapbuilder
00038 : private enable_visit_all<mapbuilder>
00039 {
00040 friend class enable_visit_all<mapbuilder>;
00041
00042 public:
00043 mapbuilder(unit_map& unit_map);
00044 virtual ~mapbuilder();
00045
00046
00047 void build_map();
00048
00049 private:
00050
00051 bool process(size_t team_index, team&, side_actions&, side_actions::iterator);
00052 bool pre_visit_team(size_t turn, size_t team_index, team&, side_actions&);
00053 bool post_visit_team(size_t turn, size_t team_index, team&, side_actions&);
00054
00055 bool process_helper(side_actions::iterator const&, action_ptr const&);
00056
00057
00058 virtual void validate(side_actions::iterator const&) {}
00059
00060
00061 void pre_build();
00062
00063 void restore_normal_map();
00064
00065 unit_map& unit_map_;
00066
00067 action_queue applied_actions_;
00068 action_queue applied_actions_this_turn_;
00069
00070
00071 boost::ptr_vector<unit_movement_resetter> resetters_;
00072 boost::ptr_vector<temporary_unit_remover> removers_;
00073
00074
00075 std::set<unit const*> acted_this_turn_;
00076 };
00077
00078 }
00079
00080 #endif