fase 2 de zones
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
room:
|
||||
zone: neighborhood
|
||||
tileSetFile: standard.gif
|
||||
|
||||
# Conexiones de la habitación (null = sin conexión)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
room:
|
||||
zone: neighborhood
|
||||
tileSetFile: standard.gif
|
||||
|
||||
# Conexiones de la habitación (null = sin conexión)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
room:
|
||||
zone: neighborhood
|
||||
tileSetFile: standard.gif
|
||||
|
||||
# Conexiones de la habitación (null = sin conexión)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
room:
|
||||
zone: neighborhood
|
||||
tileSetFile: standard.gif
|
||||
|
||||
# Conexiones de la habitación (null = sin conexión)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
room:
|
||||
zone: neighborhood
|
||||
tileSetFile: standard.gif
|
||||
|
||||
# Conexiones de la habitación (null = sin conexión)
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "core/resources/resource_loader.hpp" // Para ResourceLoader
|
||||
#include "core/system/event_buffer.hpp" // Para EventBuffer
|
||||
#include "game/gameplay/cheevos.hpp" // Para Cheevos
|
||||
#include "game/gameplay/zone_manager.hpp" // Para ZoneManager
|
||||
#include "game/options.hpp" // Para Options, options, OptionsVideo
|
||||
#include "game/scene_manager.hpp" // Para SceneManager
|
||||
#include "game/scenes/game.hpp" // Para Game, GameMode
|
||||
@@ -163,6 +164,12 @@ Director::Director() {
|
||||
Debug::get()->loadFromFile();
|
||||
#endif
|
||||
|
||||
// ZoneManager debe inicializarse antes que Resource::Cache: el cache carga
|
||||
// las rooms en eager loading, y RoomLoader necesita consultar las zonas para
|
||||
// resolver tileSetFile/music. ZoneManager carga su yaml directamente del
|
||||
// filesystem (vía Resource::Helper::loadFile) así que no depende del cache.
|
||||
ZoneManager::init();
|
||||
|
||||
// Initialize resources (works for both release and development)
|
||||
#ifdef _DEBUG
|
||||
Resource::Cache::init(Debug::get()->getLazyLoading()
|
||||
@@ -238,6 +245,7 @@ Director::~Director() {
|
||||
RenderInfo::destroy();
|
||||
Notifier::destroy();
|
||||
Resource::Cache::destroy();
|
||||
ZoneManager::destroy();
|
||||
Resource::Helper::shutdownResourceSystem(); // Shutdown resource pack system
|
||||
Audio::destroy();
|
||||
Screen::destroy();
|
||||
|
||||
@@ -1214,7 +1214,7 @@ void MapEditor::updateStatusBarInfo() { // NOLINT(readability-function-cognitiv
|
||||
conv = "right";
|
||||
}
|
||||
|
||||
line2 = "conv:" + conv;
|
||||
line2 = "zone:" + room_data_.zone + " conv:" + conv;
|
||||
line3 = "u:" + conn(room_data_.upper_room) + " d:" + conn(room_data_.lower_room) +
|
||||
" l:" + conn(room_data_.left_room) + " r:" + conn(room_data_.right_room) +
|
||||
" itm:" + std::to_string(room_data_.item_color1) + "/" + std::to_string(room_data_.item_color2);
|
||||
|
||||
@@ -61,7 +61,9 @@ void Room::initializeRoom(const Data& room) {
|
||||
lower_room_ = room.lower_room;
|
||||
left_room_ = room.left_room;
|
||||
right_room_ = room.right_room;
|
||||
zone_ = room.zone;
|
||||
tile_set_file_ = room.tile_set_file;
|
||||
music_ = room.music;
|
||||
conveyor_belt_direction_ = room.conveyor_belt_direction;
|
||||
tile_map_ = room.tile_map; // Tilemap viene embebido en el YAML
|
||||
surface_ = Resource::Cache::get()->getSurface(room.tile_set_file);
|
||||
|
||||
@@ -44,7 +44,11 @@ class Room {
|
||||
std::string lower_room;
|
||||
std::string left_room;
|
||||
std::string right_room;
|
||||
std::string tile_set_file;
|
||||
std::string zone; // Nombre de la zona a la que pertenece
|
||||
std::string tile_set_file; // Resuelto: zona o override del yaml
|
||||
std::string music; // Resuelto: zona o override del yaml
|
||||
bool tile_set_overridden{false}; // True si el yaml tenía tileSetFile explícito
|
||||
bool music_overridden{false}; // True si el yaml tenía music explícito
|
||||
int conveyor_belt_direction{0};
|
||||
std::vector<int> tile_map;
|
||||
std::vector<int> collision_tile_map;
|
||||
@@ -62,6 +66,9 @@ class Room {
|
||||
// --- Funciones ---
|
||||
[[nodiscard]] auto getNumber() const -> const std::string& { return number_; }
|
||||
[[nodiscard]] auto getBGColor() const -> Uint8 { return bg_color_; }
|
||||
[[nodiscard]] auto getZone() const -> const std::string& { return zone_; }
|
||||
[[nodiscard]] auto getMusic() const -> const std::string& { return music_; }
|
||||
[[nodiscard]] auto getTileSetFile() const -> const std::string& { return tile_set_file_; }
|
||||
void renderMap();
|
||||
void renderEnemies();
|
||||
void renderPlatforms();
|
||||
@@ -83,7 +90,6 @@ class Room {
|
||||
void setConnection(Border border, const std::string& room_name);
|
||||
void setTileSet(const std::string& tile_set_file);
|
||||
void setConveyorBeltDirection(int direction);
|
||||
[[nodiscard]] auto getTileSetFile() const -> const std::string& { return tile_set_file_; }
|
||||
[[nodiscard]] auto getTileSetWidth() const -> int { return tile_set_width_; }
|
||||
#endif
|
||||
void update(float delta_time);
|
||||
@@ -125,7 +131,9 @@ class Room {
|
||||
std::string lower_room_;
|
||||
std::string left_room_;
|
||||
std::string right_room_;
|
||||
std::string zone_;
|
||||
std::string tile_set_file_;
|
||||
std::string music_;
|
||||
std::vector<int> tile_map_;
|
||||
int conveyor_belt_direction_{0};
|
||||
bool is_paused_{false};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "game/gameplay/item_tracker.hpp" // Para ItemTracker
|
||||
#include "game/gameplay/key_tracker.hpp" // Para KeyTracker
|
||||
#include "game/gameplay/room.hpp" // Para Room, RoomData
|
||||
#include "game/gameplay/zone_manager.hpp" // Para ZoneManager
|
||||
#include "game/gameplay/room_tracker.hpp" // Para RoomTracker
|
||||
#include "game/gameplay/scoreboard.hpp" // Para Scoreboard::Data, Scoreboard
|
||||
#include "game/options.hpp" // Para Options, options, Cheat, SectionState
|
||||
@@ -69,7 +68,7 @@ Game::Game(Mode mode)
|
||||
#endif
|
||||
|
||||
// Crea objetos e inicializa variables
|
||||
ZoneManager::init();
|
||||
// ZoneManager se inicializa en Director (antes que Resource::Cache, que carga rooms)
|
||||
ItemTracker::init();
|
||||
KeyTracker::init();
|
||||
DoorTracker::init();
|
||||
@@ -175,7 +174,7 @@ Game::~Game() {
|
||||
KeyTracker::destroy();
|
||||
DoorTracker::destroy();
|
||||
Inventory::destroy();
|
||||
ZoneManager::destroy();
|
||||
// ZoneManager lo destruye Director
|
||||
|
||||
if (Console::get() != nullptr) { Console::get()->on_toggle = nullptr; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user