#pragma once #include #include #include #include #include #include "point.hpp" #include "matrix.hpp" #include "config.hpp" #include struct TileCell { std::string display; uint8_t fg_h; uint8_t fg_s; uint8_t fg_v; uint8_t bg_h; uint8_t bg_s; uint8_t bg_v; }; typedef std::vector TileRow; typedef std::vector TileGrid; class TileMap { public: Config $config; size_t $width; size_t $height; matrix::Matrix $tile_ids; TileGrid $display; TileMap(size_t width, size_t height); // disable copying TileMap(TileMap &map) = delete; size_t width() { return $width; } size_t height() { return $height; } void load(matrix::Matrix &walls); const TileCell &at(size_t x, size_t y); void set_tile(size_t x, size_t y, std::string tile_name); void dump(int show_x=-1, int show_y=-1); bool INVARIANT(); };