#include "tilemap.hpp" #include "dbc.hpp" #include "constants.hpp" #include "render.hpp" using nlohmann::json; using ftxui::Color; TileMap::TileMap(size_t width, size_t height) : $config("./assets/tiles.json"), $width(width), $height(height), $tile_ids(height, matrix::Row(width, SPACE_VALUE)), $display(height, TileRow(width, {""})) { } void TileMap::dump(int show_x, int show_y) { SFMLRender::init_terminal(); for(matrix::each_row it{$tile_ids}; it.next();) { const TileCell &cell = $display[it.y][it.x]; if(int(it.x) == show_x && int(it.y) == show_y) { fmt::print("{}<", cell.display); } else { fmt::print("{} ", cell.display); } if(it.row) fmt::print("\n"); } } void TileMap::load(matrix::Matrix &walls) { for(matrix::each_cell it{walls}; it.next();) { string tile_name = walls[it.y][it.x] == SPACE_VALUE ? "FLOOR_TILE" : "WALL_TILE"; std::wstring tile_id = $config.wstring(tile_name, "display"); json tile_conf = $config[tile_name]; TileCell tile{ tile_conf["display"], tile_conf["foreground"][0], tile_conf["foreground"][1], tile_conf["foreground"][2], tile_conf["background"][0], tile_conf["background"][1], tile_conf["background"][2]}; $tile_ids[it.y][it.x] = tile_id[0]; $display[it.y][it.x] = tile; } } const TileCell &TileMap::at(size_t x, size_t y) { return $display[y][x]; } bool TileMap::INVARIANT() { dbc::check(matrix::height($tile_ids) == $height, "$tile_ids has wrong height"); dbc::check(matrix::width($tile_ids) == $width, "$tile_ids has wrong width"); return true; }