#pragma once #include #include #include #include #include #include #include "point.hpp" #include #include "ansi_parser.hpp" using ftxui::Canvas, ftxui::Screen; #define BG_TILE L'█' constexpr int VIDEO_X = 1600; constexpr int VIDEO_Y = 900; constexpr int MIN_FONT_SIZE = 20; constexpr int MAX_FONT_SIZE = 140; constexpr int GAME_MAP_POS = 600; constexpr int UI_FONT_SIZE=30; constexpr int BASE_MAP_FONT_SIZE=90; enum class Value { BLACK=0, DARK_DARK, DARK_MID, DARK_LIGHT, MID, LIGHT_DARK, LIGHT_MID, LIGHT_LIGHT, WHITE, TRANSPARENT }; struct SFMLRender { sf::RenderWindow $window; int $map_font_size; float $line_spacing; std::unordered_map $sprites; sf::Font $font; sf::Texture $font_texture; sf::Glyph $base_glyph; sf::Sprite $bg_sprite; sf::FloatRect $bg_bounds; Canvas& $canvas; Screen& $map_screen; Screen& $screen; sf::Text $ui_text; std::wstring_convert> $converter; sf::Color $default_fg; sf::Color $default_bg; ANSIParser $ansi; SFMLRender(Canvas &canvas, Screen &map_screen, Screen &screen); // disable copy SFMLRender(SFMLRender &other) = delete; sf::Color color(int val); sf::Color color(Value val); sf::Sprite &get_text_sprite(wchar_t tile); bool resize_map(int new_size, Point &view_port); void render_text(std::string &text, float x, float y); void draw_main_ui(); void draw_screen(bool clear=true, float map_off_x=0.0f, float map_off_y=0.0f); bool poll_event(sf::Event &event) { return $window.pollEvent(event); } void close() { return $window.close(); } bool is_open() { return $window.isOpen(); } int font_size() { return $map_font_size; } };