#ifdef _DEBUG #include "game/editor/editor_statusbar.hpp" #include // Para to_string #include #include "core/rendering/screen.hpp" // Para Screen #include "core/rendering/surface.hpp" // Para Surface #include "core/rendering/text.hpp" // Para Text #include "core/resources/resource_cache.hpp" // Para Resource::Cache #include "game/options.hpp" // Para Options::game #include "utils/utils.hpp" // Para toLower // Constructor EditorStatusBar::EditorStatusBar(std::string room_number) : surface_(std::make_shared(Options::game.width, SURFACE_HEIGHT)), surface_dest_{.x = 0, .y = Options::game.height - SURFACE_HEIGHT, .w = Options::game.width, .h = SURFACE_HEIGHT}, room_number_(std::move(room_number)) {} // Pinta la barra de estado en pantalla void EditorStatusBar::render() { surface_->render(nullptr, &surface_dest_); } // Actualiza la barra de estado void EditorStatusBar::update([[maybe_unused]] float delta_time) { fillTexture(); } void EditorStatusBar::setMouseTile(int tile_x, int tile_y) { mouse_tile_x_ = tile_x; mouse_tile_y_ = tile_y; } void EditorStatusBar::setLine2(const std::string& text) { line2_ = text; } void EditorStatusBar::setLine3(const std::string& text) { line3_ = text; } void EditorStatusBar::setLine4(const std::string& text) { line4_ = text; } void EditorStatusBar::setLine5(const std::string& text) { line5_ = text; } // Dibuja los elementos en la surface void EditorStatusBar::fillTexture() { auto previous_renderer = Screen::get()->getRendererSurface(); Screen::get()->setRendererSurface(surface_); surface_->clear(0); auto text = Resource::Cache::get()->getText("8bithud"); const Uint8 LABEL_COLOR = 11; const Uint8 VALUE_COLOR = 14; const Uint8 DETAIL_COLOR = 13; const Uint8 COORD_COLOR = 9; const int RIGHT_X = static_cast(Options::game.width) - LEFT_X; // Línea 1: Room number (izq) + line4 extra (centro) + tile coords + line5 drag info (der) text->writeColored(LEFT_X, LINE1_Y, toLower(room_number_), LABEL_COLOR); // Tile coords + drag info a la derecha const std::string TILE_X_STR = (mouse_tile_x_ < 10 ? "0" : "") + std::to_string(mouse_tile_x_); const std::string TILE_Y_STR = (mouse_tile_y_ < 10 ? "0" : "") + std::to_string(mouse_tile_y_); std::string right_part = TILE_X_STR + "," + TILE_Y_STR; if (!line5_.empty()) { right_part += " " + line5_; } if (!line4_.empty()) { right_part = toLower(line4_) + " " + right_part; } text->writeColored(RIGHT_X - text->length(right_part), LINE1_Y, right_part, COORD_COLOR); // Línea 2: Propiedades de room o info de enemigo if (!line2_.empty()) { text->writeColored(LEFT_X, LINE2_Y, toLower(line2_), DETAIL_COLOR); } // Línea 3: Conexiones+items o propiedades del enemigo if (!line3_.empty()) { text->writeColored(LEFT_X, LINE3_Y, toLower(line3_), VALUE_COLOR); } Screen::get()->setRendererSurface(previous_renderer); } #endif // _DEBUG