#ifdef _DEBUG #include "game/editor/editor_statusbar.hpp" #include // Para to_string #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/defines.hpp" // Para Tile::SIZE #include "utils/utils.hpp" // Para stringToColor // Constructor EditorStatusBar::EditorStatusBar(const std::string& room_number, const std::string& room_name) : room_number_(room_number), room_name_(room_name) { const float SURFACE_WIDTH = Options::game.width; constexpr float SURFACE_HEIGHT = 6.0F * Tile::SIZE; // 48 pixels, igual que el scoreboard surface_ = std::make_shared(SURFACE_WIDTH, SURFACE_HEIGHT); surface_dest_ = {.x = 0, .y = Options::game.height - SURFACE_HEIGHT, .w = SURFACE_WIDTH, .h = SURFACE_HEIGHT}; } // 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(); } // Establece las coordenadas del ratón en tiles void EditorStatusBar::setMouseTile(int tile_x, int tile_y) { mouse_tile_x_ = tile_x; mouse_tile_y_ = tile_y; } // Establece la información de la entidad seleccionada void EditorStatusBar::setSelectionInfo(const std::string& info) { selection_info_ = info; } // Establece el detalle adicional void EditorStatusBar::setSelectionDetail(const std::string& detail) { selection_detail_ = detail; } // Dibuja los elementos en la surface void EditorStatusBar::fillTexture() { auto previous_renderer = Screen::get()->getRendererSurface(); Screen::get()->setRendererSurface(surface_); surface_->clear(stringToColor("black")); auto text = Resource::Cache::get()->getText("8bithud"); const Uint8 LABEL_COLOR = stringToColor("bright_cyan"); const Uint8 VALUE_COLOR = stringToColor("white"); // Línea 1: Número y nombre de la habitación const std::string ROOM_TEXT = toLower(room_number_ + " " + room_name_); text->writeColored(LEFT_X, LINE1_Y, ROOM_TEXT, LABEL_COLOR); // Línea 2: Coordenadas del ratón en tiles 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_); text->writeColored(LEFT_X, LINE2_Y, toLower("tile:"), LABEL_COLOR); text->writeColored(LEFT_X + 30, LINE2_Y, TILE_X_STR + "," + TILE_Y_STR, VALUE_COLOR); // Línea 2 (continuación): info de selección o indicador de modo editor if (!selection_info_.empty()) { text->writeColored(LEFT_X + 60, LINE2_Y, toLower(selection_info_), stringToColor("bright_yellow")); } else { text->writeColored(176, LINE2_Y, toLower("editor"), stringToColor("bright_green")); } // Línea 3: detalle de la selección (propiedades del enemigo) if (!selection_detail_.empty()) { text->writeColored(LEFT_X, LINE3_Y, toLower(selection_detail_), stringToColor("bright_white")); } Screen::get()->setRendererSurface(previous_renderer); } #endif // _DEBUG