// Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. #include // for operator""s, chrono_literals #include // for Full, Screen #include // for cout, ostream #include // for allocator, shared_ptr #include // for string, operator<< #include // for sleep_for #include // for hflow, paragraph, separator, hbox, vbox, filler, operator|, border, Element #include // for Render #include // for ftxui #include #include #include "map.hpp" #include "dbc.hpp" using std::string; using namespace fmt; using namespace std::chrono_literals; int main() { using namespace ftxui; std::string reset_position; auto c = Canvas(60 * 2, 27 * 4); Map game_map(60, 27); game_map.generate(); Matrix &input_map = game_map.input_map(); Matrix &walls = game_map.walls(); 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) { for(size_t y = 0; y < result.size(); ++y) { auto path = result[y][x]; 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); } else { // it's a path number, show it const string tile = format("{}", path); c.DrawText(x*2, y*4, tile); } } } // draw the character c.DrawText(10*2, 10*4, "@", Color::Blue); 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); std::cout << reset_position; screen.Print(); reset_position = screen.ResetPosition(); std::this_thread::sleep_for(0.01s); } return 0; }