#pragma once #ifdef _DEBUG #include #include // Para shared_ptr, unique_ptr #include // Para string #include "game/entities/enemy.hpp" // Para Enemy::Data #include "game/entities/item.hpp" // Para Item::Data #include "game/entities/player.hpp" // Para Player::SpawnData #include "game/gameplay/room.hpp" // Para Room::Data #include "game/gameplay/scoreboard.hpp" // Para Scoreboard::Data #include "game/options.hpp" // Para Options::Cheat class EditorStatusBar; class MapEditor { public: static void init(); // [SINGLETON] Crea el objeto static void destroy(); // [SINGLETON] Destruye el objeto static auto get() -> MapEditor*; // [SINGLETON] Obtiene el objeto void enter(std::shared_ptr room, std::shared_ptr player, const std::string& room_path, std::shared_ptr scoreboard_data); void exit(); [[nodiscard]] auto isActive() const -> bool { return active_; } void update(float delta_time); void render(); void handleEvent(const SDL_Event& event); private: static MapEditor* instance_; // [SINGLETON] Objeto privado MapEditor(); // Constructor ~MapEditor(); // Destructor void updateMousePosition(); // Convierte coordenadas de ventana a coordenadas de juego y tile // Estado del editor bool active_{false}; // Copia mutable de los datos de la habitación (para edición futura) Room::Data room_data_; Player::SpawnData player_spawn_; std::string room_path_; // Referencias a objetos vivos (para rendering) std::shared_ptr room_; std::shared_ptr player_; std::shared_ptr scoreboard_data_; // Barra de estado del editor std::unique_ptr statusbar_; // Estado del ratón en coordenadas de juego float mouse_game_x_{0.0F}; float mouse_game_y_{0.0F}; int mouse_tile_x_{0}; int mouse_tile_y_{0}; // Estado previo de invencibilidad (para restaurar al salir) Options::Cheat::State invincible_before_editor_{Options::Cheat::State::DISABLED}; }; #endif // _DEBUG