#pragma once #include #include #include #include #include #include #include #include #include #include #include #include "map.hpp" #include "dinkyecs.hpp" #include "sound.hpp" using std::string; using ftxui::Canvas, ftxui::Component, ftxui::Screen; constexpr int MIN_FONT_SIZE = 20; constexpr int MAX_FONT_SIZE = 140; constexpr int GAME_MAP_X = 90; constexpr int GAME_MAP_Y = 90; constexpr int GAME_MAP_POS = 600; constexpr int SCREEN_X = 40; constexpr int SCREEN_Y = 30; constexpr int VIDEO_X = 1600; constexpr int VIDEO_Y = 900; 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 }; class GUI { Map $game_map; string $status_text = "NOT DEAD"; Component $document; Component $map_view; Canvas $canvas; sf::Font $font; sf::Text $ui_text; std::wstring_convert> $converter; sf::RenderWindow $window; Screen $screen; Screen $map_screen; DinkyECS::World $world; sf::Texture $font_texture; std::unordered_map $sprites; Point $view_port; int $map_font_size; sf::Glyph $base_glyph; float $line_spacing; public: GUI(); // disable copying GUI(GUI &gui) = delete; sf::Color color(Value val); sf::Color color(int val); void create_renderer(); void render_scene(); bool handle_events(); void draw_screen(bool clear=true, float map_off_x=0.0f, float map_off_y=0.0f); void shake(); void configure_world(); void run_systems(); void resize_map(int new_size); sf::Sprite &get_text_sprite(wchar_t tile); int main(); };