1 #ifndef LEVEL_SOLID_MAP_HPP_INCLUDED 2 #define LEVEL_SOLID_MAP_HPP_INCLUDED 3 4 #include <bitset> 5 #include <map> 6 #include <vector> 7 8 static const int TileSize = 32; 9 10 typedef std::pair<int,int> tile_pos; 11 typedef std::bitset<TileSize*TileSize> tile_bitmap; 12 13 struct surface_info { surface_infosurface_info14 surface_info() : friction(0), traction(0), damage(-1), info(0) 15 {} 16 int friction, traction, damage; 17 const std::string* info; 18 static const std::string* get_info_str(const std::string& key); 19 }; 20 21 struct tile_solid_info { tile_solid_infotile_solid_info22 tile_solid_info() : all_solid(false) 23 {} 24 tile_bitmap bitmap; 25 surface_info info; 26 bool all_solid; 27 }; 28 29 class level_solid_map { 30 public: 31 level_solid_map(); 32 level_solid_map(const level_solid_map& m); 33 level_solid_map& operator=(const level_solid_map& m); 34 ~level_solid_map(); 35 tile_solid_info& insert_or_find(const tile_pos& pos); 36 const tile_solid_info* find(const tile_pos& pos) const; 37 void erase(const tile_pos& pos); 38 void clear(); 39 40 void merge(const level_solid_map& m, int xoffset, int yoffset); 41 private: 42 43 tile_solid_info** insert_raw(const tile_pos& pos); 44 45 struct row { 46 std::vector<tile_solid_info*> positive_cells, negative_cells; 47 }; 48 49 std::vector<row> positive_rows_, negative_rows_; 50 }; 51 52 #endif 53