|
|
|
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include <utility>
|
|
|
|
#include <string>
|
|
|
|
#include <algorithm>
|
|
|
|
#include <fmt/core.h>
|
|
|
|
#include "point.hpp"
|
|
|
|
#include "matrix.hpp"
|
|
|
|
#include "config.hpp"
|
|
|
|
#include <ftxui/screen/color.hpp>
|
|
|
|
|
|
|
|
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<TileCell> TileRow;
|
|
|
|
typedef std::vector<TileRow> 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();
|
|
|
|
};
|