#pragma once #include #include #include #include #include #include #include #include #include #include #include #include "map.hpp" #include "dinkyecs.hpp" #include "components.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 }; struct ActionLog { std::deque messages; void log(std::string msg) { messages.push_front(msg); if(messages.size() > 20) { messages.pop_back(); } } }; class GUI { 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; sf::Texture $font_texture; std::unordered_map $sprites; Point $view_port; int $map_font_size; sf::Glyph $base_glyph; float $line_spacing; SoundManager $sounds; ActionLog $log; DinkyECS::World& $world; Map& $game_map; public: GUI(DinkyECS::World& world, Map& game_map); // disable copying GUI(GUI &gui) = delete; sf::Color color(Value val); sf::Color color(int val); void create_renderer(); void render_scene(); bool handle_ui_events(); void handle_world_events(); void draw_screen(bool clear=true, float map_off_x=0.0f, float map_off_y=0.0f); void shake(); void run_systems(); void resize_map(int new_size); sf::Sprite &get_text_sprite(wchar_t tile); int main(); };