diff --git a/main.cpp b/main.cpp index 29f2152..785c80a 100644 --- a/main.cpp +++ b/main.cpp @@ -12,6 +12,8 @@ #include // for Render #include // for ftxui #include +#include + #include #include "map.hpp" #include "dbc.hpp" @@ -31,10 +33,10 @@ int main() { Matrix &input_map = game_map.input_map(); Matrix &walls = game_map.walls(); - input_map[10][10] = 0; + // place character + // input_map[10][10] = 0; auto map = Renderer([&] { - game_map.make_paths(); Matrix &result = game_map.paths(); for(size_t x = 0; x < result[0].size(); ++x) { @@ -43,11 +45,12 @@ int main() { if(path == 1000) { // it's a wall or unreachable, use the wall_map const string tile = walls[y][x] == 1 ? "#" : "."; - c.DrawText(x*2, y*4, tile); + c.DrawText(x*2, y*4, tile, Color::Yellow); } else { // it's a path number, show it const string tile = format("{}", path); - c.DrawText(x*2, y*4, tile); + Color color = path == 0 ? Color::Red : Color::GrayDark; + c.DrawText(x*2, y*4, tile, color); } } } @@ -58,27 +61,23 @@ int main() { return canvas(c); }); - while (true) { - auto document = hbox({ - hflow( - vbox( - gauge(0.5) | border, - text("STATUS") | border - ) | xflex_grow - ), - separator(), - hbox(map->Render()), - }) | border; - - auto screen = Screen::Create(Dimension::Full()); - Render(screen, document); + auto document = hbox({ + hflow( + vbox( + gauge(0.5) | border, + text("STATUS") | border + ) | xflex_grow + ), + separator(), + hbox(map->Render()), + }) | border; - std::cout << reset_position; - screen.Print(); - reset_position = screen.ResetPosition(); + auto screen = Screen::Create(Dimension::Full()); + Render(screen, document); - std::this_thread::sleep_for(0.01s); - } + std::cout << reset_position; + screen.Print(); + reset_position = screen.ResetPosition(); return 0; } diff --git a/map.cpp b/map.cpp index c50c1b9..f6d0685 100644 --- a/map.cpp +++ b/map.cpp @@ -42,7 +42,7 @@ inline void add_neighbors(PairList &neighbors, Matrix &closed, size_t j, size_t } Map::Map(size_t width, size_t height) : m_limit(1000) { - m_walls = Matrix(height, MatrixRow(width, 1)); + m_walls = Matrix(height, MatrixRow(width, 0)); m_input_map = Matrix(height, MatrixRow(width, 1)); } @@ -94,7 +94,6 @@ void Map::make_paths() { } void Map::make_room(size_t origin_x, size_t origin_y, size_t w, size_t h) { - println("MAKE ROOM x={}, y={}, w={}, h={}", origin_x, origin_y, w, h); dbc::pre("x out of bounds", origin_x < width()); dbc::pre("y out of bounds", origin_y < height()); dbc::pre("w out of bounds", w <= width()); @@ -104,7 +103,7 @@ void Map::make_room(size_t origin_x, size_t origin_y, size_t w, size_t h) { dbc::check(y < m_walls.size(), "y is out of bounds"); for(size_t x = origin_x; x < origin_x + w; ++x) { dbc::check(x < m_walls[y].size(), "x is out of bounds"); - m_walls[y][x] = 0; + m_walls[y][x] = 1; } } } @@ -121,7 +120,6 @@ inline int make_split(Room &cur, bool horiz) { } void Map::partition_map(Room &cur, int depth) { - if(cur.width >= 5 && cur.width <= 10 && cur.height >= 5 && cur.height <= 10) { m_rooms.push_back(cur); @@ -158,9 +156,12 @@ void Map::partition_map(Room &cur, int depth) { } } -void Map::draw_map(Room &cur) { - for(auto cur : m_rooms) { - make_room(cur.x+1, cur.y+1, cur.width-2, cur.height-2); +void Map::place_rooms(Room &cur) { + for(auto &cur : m_rooms) { + make_room(cur.x+1, cur.y+1, cur.width-2, cur.height-2); + cur.door_x = cur.x+1; + cur.door_y = cur.y; + m_input_map[cur.door_y][cur.door_x] = 0; } } @@ -172,8 +173,22 @@ void Map::generate() { .height = height() }; - partition_map(root, 6); - draw_map(root); // left + partition_map(root, 10); + place_rooms(root); + make_paths(); + Room &room0 = m_rooms[0]; + Room &room1 = m_rooms[1]; + + int cur = m_paths[room0.door_y][room0.door_x]; + int next = m_paths[room0.door_y][room0.door_x+1]; + int i = 1; + + while(next >= cur) { + cur = next; + next = m_paths[room0.door_y][room0.door_x+i]; + ++i; + println("door_y: {}, door_x: {}, CUR: {}, NEXT: {}", room0.door_y, room0.door_x, cur, next); + } } diff --git a/map.hpp b/map.hpp index bb0fcaa..ad55609 100644 --- a/map.hpp +++ b/map.hpp @@ -16,6 +16,8 @@ struct Room { size_t y = 0; size_t width = 0; size_t height = 0; + size_t door_x = 0; + size_t door_y = 0; std::vector next; }; @@ -57,7 +59,7 @@ public: void make_room(size_t origin_y, size_t origin_x, size_t width, size_t height); void generate(); - void draw_map(Room &root); + void place_rooms(Room &root); void make_paths(); void partition_map(Room &cur, int depth); void dump();