guardat dels canvis en la habitacio

This commit is contained in:
2026-04-02 11:10:03 +02:00
parent b31346830f
commit a6fae7b001
10 changed files with 796 additions and 65 deletions

View File

@@ -7,6 +7,7 @@
#include <memory> // Para shared_ptr, unique_ptr
#include <string> // Para string
#include "external/fkyaml_node.hpp" // Para fkyaml::node
#include "game/entities/enemy.hpp" // Para Enemy::Data
#include "game/entities/item.hpp" // Para Item::Data
#include "game/entities/player.hpp" // Para Player::SpawnData
@@ -29,6 +30,7 @@ class MapEditor {
void update(float delta_time);
void render();
void handleEvent(const SDL_Event& event);
auto revert() -> std::string; // Revierte todos los cambios al estado original
private:
static MapEditor* instance_; // [SINGLETON] Objeto privado
@@ -59,8 +61,9 @@ class MapEditor {
void renderBoundaryMarker(float x, float y, Uint8 color); // Dibuja un marcador de boundary en una posición
void renderSelectionHighlight(); // Dibuja highlight del elemento seleccionado/arrastrado
void handleMouseDown(float game_x, float game_y); // Procesa click del ratón (hit test + inicio de drag)
void handleMouseUp(); // Procesa soltar el ratón (commit del drag)
void handleMouseUp(); // Procesa soltar el ratón (commit del drag + autosave)
void updateDrag(); // Actualiza la posición snapped durante el drag
void autosave(); // Guarda los cambios puntuales al YAML
static auto snapToGrid(float value) -> float; // Alinea un valor a la cuadrícula de 8x8
static auto pointInRect(float px, float py, const SDL_FRect& rect) -> bool; // Hit test punto en rectángulo
@@ -68,10 +71,14 @@ class MapEditor {
bool active_{false};
DragState drag_;
// 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_;
// Datos de la habitación
Room::Data room_data_; // Copia mutable (para boundaries y edición)
std::string room_path_; // Nombre del fichero (ej: "06.yaml")
std::string file_path_; // Ruta completa del fichero en disco
// YAML: nodo vivo (se edita parcialmente) y backup para revert
fkyaml::node yaml_; // Nodo YAML actual (editado parcialmente)
fkyaml::node yaml_backup_; // Backup del YAML original al entrar
// Referencias a objetos vivos (para rendering)
std::shared_ptr<Room> room_;