fase 2 de zones

This commit is contained in:
2026-04-10 14:03:56 +02:00
parent 4b4bfdf314
commit 2cecfec5d5
11 changed files with 62 additions and 6 deletions

View File

@@ -5,6 +5,8 @@
#include "core/resources/resource_helper.hpp" // Para Resource::Helper
#include "external/fkyaml_node.hpp" // Para fkyaml::node
#include "game/gameplay/zone.hpp" // Para Zone::Data
#include "game/gameplay/zone_manager.hpp" // Para ZoneManager
#include "utils/defines.hpp" // Para Tile::SIZE
#include "utils/utils.hpp"
@@ -71,8 +73,40 @@ void RoomLoader::parseRoomConfig(const fkyaml::node& yaml, Room::Data& room, con
// Basic properties
// bgColor ya no se lee del YAML; bg_color queda siempre a 0
// --- Resolución de zona + overrides (tileSetFile, music) ---
// Obtener zona declarada (o caer al default si no existe)
std::string zone_name;
if (room_node.contains("zone")) {
zone_name = room_node["zone"].get_value<std::string>();
} else {
std::cerr << "Warning: room " << file_name << " has no 'zone' field, using default\n";
const Zone::Data* default_zone = ZoneManager::get()->getDefaultZone();
if (default_zone != nullptr) { zone_name = default_zone->name; }
}
room.zone = zone_name;
// Localizar la zona en el catálogo (fallback al default si no existe)
const Zone::Data* zone = ZoneManager::get()->getZone(zone_name);
if (zone == nullptr) {
std::cerr << "Warning: unknown zone '" << zone_name << "' in " << file_name << ", using default\n";
zone = ZoneManager::get()->getDefaultZone();
}
// tileSetFile: zona, override si está en el yaml
if (room_node.contains("tileSetFile")) {
room.tile_set_file = room_node["tileSetFile"].get_value<std::string>();
room.tile_set_overridden = true;
} else if (zone != nullptr) {
room.tile_set_file = zone->tile_set_file;
}
// music: zona, override si está en el yaml
if (room_node.contains("music")) {
room.music = room_node["music"].get_value<std::string>();
room.music_overridden = true;
} else if (zone != nullptr) {
room.music = zone->music;
}
// Room connections