// 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 std::chrono_literals; Matrix input = { {1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1}, }; Matrix walls = { {1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,1,1,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1}, }; int main() { using namespace ftxui; std::string reset_position; auto c = Canvas(150, 100); Map game_map = Map(input, walls, 1000); 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 val = result[y][x]; const string tile = val == 1000 ? "#" : fmt::format("{}", result[y][x]); c.DrawText(x*2, y*4, tile); } } c.DrawText(4*2, 3*4, "@", Color::Blue); return canvas(c) | border; }); 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; }