// 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 #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(50, 27); game_map.generate(); auto map = Renderer([&] { Matrix &result = game_map.paths(); Matrix &walls = game_map.walls(); 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 || walls[y][x] == 1) { // it's a wall or unreachable, use the wall_map const string tile = walls[y][x] == 1 ? "#" : "."; c.DrawText(x*2, y*4, tile, Color::GrayDark); } else { // it's a path number, show it const string tile = format("{}", path); auto color = Color::Palette16(path % 7 + 1); c.DrawText(x*2, y*4, tile, color); } } } // draw the character //c.DrawText(10*2, 10*4, "@", Color::Blue); return canvas(c); }); 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(); return 0; }