RoomSaver ja no reventa els yamals
This commit is contained in:
@@ -109,15 +109,13 @@ auto MapEditor::revert() -> std::string {
|
||||
if (!active_) { return "Editor not active"; }
|
||||
if (file_path_.empty()) { return "Error: No file path"; }
|
||||
|
||||
// Restaurar el YAML al backup original
|
||||
// Restaurar el YAML original y reescribir el fichero
|
||||
yaml_ = yaml_backup_;
|
||||
RoomSaver::saveYAML(file_path_, yaml_);
|
||||
|
||||
// Recargar room_data_ desde el backup
|
||||
auto room_data_ptr = Resource::Cache::get()->getRoom(room_path_);
|
||||
if (room_data_ptr) {
|
||||
room_data_ = *room_data_ptr;
|
||||
}
|
||||
RoomSaver::saveYAML(file_path_, yaml_, room_data_);
|
||||
|
||||
// Resetear los sprites vivos a las posiciones originales
|
||||
room_->resetEnemyPositions(room_data_.enemies);
|
||||
@@ -131,10 +129,19 @@ auto MapEditor::revert() -> std::string {
|
||||
return "Reverted to original";
|
||||
}
|
||||
|
||||
// Auto-guarda los cambios puntuales al YAML tras soltar una entidad
|
||||
// Auto-guarda al YAML tras soltar una entidad
|
||||
void MapEditor::autosave() {
|
||||
if (file_path_.empty()) { return; }
|
||||
RoomSaver::saveYAML(file_path_, yaml_);
|
||||
|
||||
// Sincronizar posiciones de items desde los sprites vivos a room_data_
|
||||
auto* item_mgr = room_->getItemManager();
|
||||
for (int i = 0; i < item_mgr->getCount() && i < static_cast<int>(room_data_.items.size()); ++i) {
|
||||
SDL_FPoint pos = item_mgr->getItem(i)->getPos();
|
||||
room_data_.items[i].x = pos.x;
|
||||
room_data_.items[i].y = pos.y;
|
||||
}
|
||||
|
||||
RoomSaver::saveYAML(file_path_, yaml_, room_data_);
|
||||
}
|
||||
|
||||
// Actualiza el editor
|
||||
@@ -298,7 +305,6 @@ void MapEditor::handleMouseUp() {
|
||||
room_data_.enemies[IDX].x = drag_.snap_x;
|
||||
room_data_.enemies[IDX].y = drag_.snap_y;
|
||||
room_->getEnemyManager()->getEnemy(IDX)->resetToInitialPosition(room_data_.enemies[IDX]);
|
||||
RoomSaver::updateEnemyPosition(yaml_, IDX, drag_.snap_x, drag_.snap_y);
|
||||
changed = true;
|
||||
}
|
||||
break;
|
||||
@@ -307,7 +313,6 @@ void MapEditor::handleMouseUp() {
|
||||
if (IDX >= 0 && IDX < static_cast<int>(room_data_.enemies.size())) {
|
||||
room_data_.enemies[IDX].x1 = SNAP_X;
|
||||
room_data_.enemies[IDX].y1 = SNAP_Y;
|
||||
RoomSaver::updateEnemyBound1(yaml_, IDX, SNAP_X, SNAP_Y);
|
||||
changed = true;
|
||||
}
|
||||
break;
|
||||
@@ -316,7 +321,6 @@ void MapEditor::handleMouseUp() {
|
||||
if (IDX >= 0 && IDX < static_cast<int>(room_data_.enemies.size())) {
|
||||
room_data_.enemies[IDX].x2 = SNAP_X;
|
||||
room_data_.enemies[IDX].y2 = SNAP_Y;
|
||||
RoomSaver::updateEnemyBound2(yaml_, IDX, SNAP_X, SNAP_Y);
|
||||
changed = true;
|
||||
}
|
||||
break;
|
||||
@@ -324,7 +328,6 @@ void MapEditor::handleMouseUp() {
|
||||
case DragTarget::ITEM:
|
||||
if (IDX >= 0 && IDX < room_->getItemManager()->getCount()) {
|
||||
room_->getItemManager()->getItem(IDX)->setPosition(drag_.snap_x, drag_.snap_y);
|
||||
RoomSaver::updateItemPosition(yaml_, IDX, drag_.snap_x, drag_.snap_y);
|
||||
changed = true;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user