fase 2 de zones
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
room:
|
room:
|
||||||
|
zone: neighborhood
|
||||||
tileSetFile: standard.gif
|
tileSetFile: standard.gif
|
||||||
|
|
||||||
# Conexiones de la habitación (null = sin conexión)
|
# Conexiones de la habitación (null = sin conexión)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
room:
|
room:
|
||||||
|
zone: neighborhood
|
||||||
tileSetFile: standard.gif
|
tileSetFile: standard.gif
|
||||||
|
|
||||||
# Conexiones de la habitación (null = sin conexión)
|
# Conexiones de la habitación (null = sin conexión)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
room:
|
room:
|
||||||
|
zone: neighborhood
|
||||||
tileSetFile: standard.gif
|
tileSetFile: standard.gif
|
||||||
|
|
||||||
# Conexiones de la habitación (null = sin conexión)
|
# Conexiones de la habitación (null = sin conexión)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
room:
|
room:
|
||||||
|
zone: neighborhood
|
||||||
tileSetFile: standard.gif
|
tileSetFile: standard.gif
|
||||||
|
|
||||||
# Conexiones de la habitación (null = sin conexión)
|
# Conexiones de la habitación (null = sin conexión)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
room:
|
room:
|
||||||
|
zone: neighborhood
|
||||||
tileSetFile: standard.gif
|
tileSetFile: standard.gif
|
||||||
|
|
||||||
# Conexiones de la habitación (null = sin conexión)
|
# Conexiones de la habitación (null = sin conexión)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "core/resources/resource_loader.hpp" // Para ResourceLoader
|
#include "core/resources/resource_loader.hpp" // Para ResourceLoader
|
||||||
#include "core/system/event_buffer.hpp" // Para EventBuffer
|
#include "core/system/event_buffer.hpp" // Para EventBuffer
|
||||||
#include "game/gameplay/cheevos.hpp" // Para Cheevos
|
#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/options.hpp" // Para Options, options, OptionsVideo
|
||||||
#include "game/scene_manager.hpp" // Para SceneManager
|
#include "game/scene_manager.hpp" // Para SceneManager
|
||||||
#include "game/scenes/game.hpp" // Para Game, GameMode
|
#include "game/scenes/game.hpp" // Para Game, GameMode
|
||||||
@@ -163,6 +164,12 @@ Director::Director() {
|
|||||||
Debug::get()->loadFromFile();
|
Debug::get()->loadFromFile();
|
||||||
#endif
|
#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)
|
// Initialize resources (works for both release and development)
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
Resource::Cache::init(Debug::get()->getLazyLoading()
|
Resource::Cache::init(Debug::get()->getLazyLoading()
|
||||||
@@ -238,6 +245,7 @@ Director::~Director() {
|
|||||||
RenderInfo::destroy();
|
RenderInfo::destroy();
|
||||||
Notifier::destroy();
|
Notifier::destroy();
|
||||||
Resource::Cache::destroy();
|
Resource::Cache::destroy();
|
||||||
|
ZoneManager::destroy();
|
||||||
Resource::Helper::shutdownResourceSystem(); // Shutdown resource pack system
|
Resource::Helper::shutdownResourceSystem(); // Shutdown resource pack system
|
||||||
Audio::destroy();
|
Audio::destroy();
|
||||||
Screen::destroy();
|
Screen::destroy();
|
||||||
|
|||||||
@@ -1214,7 +1214,7 @@ void MapEditor::updateStatusBarInfo() { // NOLINT(readability-function-cognitiv
|
|||||||
conv = "right";
|
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) +
|
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) +
|
" 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);
|
" 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;
|
lower_room_ = room.lower_room;
|
||||||
left_room_ = room.left_room;
|
left_room_ = room.left_room;
|
||||||
right_room_ = room.right_room;
|
right_room_ = room.right_room;
|
||||||
|
zone_ = room.zone;
|
||||||
tile_set_file_ = room.tile_set_file;
|
tile_set_file_ = room.tile_set_file;
|
||||||
|
music_ = room.music;
|
||||||
conveyor_belt_direction_ = room.conveyor_belt_direction;
|
conveyor_belt_direction_ = room.conveyor_belt_direction;
|
||||||
tile_map_ = room.tile_map; // Tilemap viene embebido en el YAML
|
tile_map_ = room.tile_map; // Tilemap viene embebido en el YAML
|
||||||
surface_ = Resource::Cache::get()->getSurface(room.tile_set_file);
|
surface_ = Resource::Cache::get()->getSurface(room.tile_set_file);
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ class Room {
|
|||||||
std::string lower_room;
|
std::string lower_room;
|
||||||
std::string left_room;
|
std::string left_room;
|
||||||
std::string right_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};
|
int conveyor_belt_direction{0};
|
||||||
std::vector<int> tile_map;
|
std::vector<int> tile_map;
|
||||||
std::vector<int> collision_tile_map;
|
std::vector<int> collision_tile_map;
|
||||||
@@ -62,6 +66,9 @@ class Room {
|
|||||||
// --- Funciones ---
|
// --- Funciones ---
|
||||||
[[nodiscard]] auto getNumber() const -> const std::string& { return number_; }
|
[[nodiscard]] auto getNumber() const -> const std::string& { return number_; }
|
||||||
[[nodiscard]] auto getBGColor() const -> Uint8 { return bg_color_; }
|
[[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 renderMap();
|
||||||
void renderEnemies();
|
void renderEnemies();
|
||||||
void renderPlatforms();
|
void renderPlatforms();
|
||||||
@@ -83,7 +90,6 @@ class Room {
|
|||||||
void setConnection(Border border, const std::string& room_name);
|
void setConnection(Border border, const std::string& room_name);
|
||||||
void setTileSet(const std::string& tile_set_file);
|
void setTileSet(const std::string& tile_set_file);
|
||||||
void setConveyorBeltDirection(int direction);
|
void setConveyorBeltDirection(int direction);
|
||||||
[[nodiscard]] auto getTileSetFile() const -> const std::string& { return tile_set_file_; }
|
|
||||||
[[nodiscard]] auto getTileSetWidth() const -> int { return tile_set_width_; }
|
[[nodiscard]] auto getTileSetWidth() const -> int { return tile_set_width_; }
|
||||||
#endif
|
#endif
|
||||||
void update(float delta_time);
|
void update(float delta_time);
|
||||||
@@ -125,7 +131,9 @@ class Room {
|
|||||||
std::string lower_room_;
|
std::string lower_room_;
|
||||||
std::string left_room_;
|
std::string left_room_;
|
||||||
std::string right_room_;
|
std::string right_room_;
|
||||||
|
std::string zone_;
|
||||||
std::string tile_set_file_;
|
std::string tile_set_file_;
|
||||||
|
std::string music_;
|
||||||
std::vector<int> tile_map_;
|
std::vector<int> tile_map_;
|
||||||
int conveyor_belt_direction_{0};
|
int conveyor_belt_direction_{0};
|
||||||
bool is_paused_{false};
|
bool is_paused_{false};
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include "core/resources/resource_helper.hpp" // Para Resource::Helper
|
#include "core/resources/resource_helper.hpp" // Para Resource::Helper
|
||||||
#include "external/fkyaml_node.hpp" // Para fkyaml::node
|
#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/defines.hpp" // Para Tile::SIZE
|
||||||
#include "utils/utils.hpp"
|
#include "utils/utils.hpp"
|
||||||
|
|
||||||
@@ -71,8 +73,40 @@ void RoomLoader::parseRoomConfig(const fkyaml::node& yaml, Room::Data& room, con
|
|||||||
|
|
||||||
// Basic properties
|
// Basic properties
|
||||||
// bgColor ya no se lee del YAML; bg_color queda siempre a 0
|
// 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")) {
|
if (room_node.contains("tileSetFile")) {
|
||||||
room.tile_set_file = room_node["tileSetFile"].get_value<std::string>();
|
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
|
// Room connections
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
#include "game/gameplay/item_tracker.hpp" // Para ItemTracker
|
#include "game/gameplay/item_tracker.hpp" // Para ItemTracker
|
||||||
#include "game/gameplay/key_tracker.hpp" // Para KeyTracker
|
#include "game/gameplay/key_tracker.hpp" // Para KeyTracker
|
||||||
#include "game/gameplay/room.hpp" // Para Room, RoomData
|
#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/room_tracker.hpp" // Para RoomTracker
|
||||||
#include "game/gameplay/scoreboard.hpp" // Para Scoreboard::Data, Scoreboard
|
#include "game/gameplay/scoreboard.hpp" // Para Scoreboard::Data, Scoreboard
|
||||||
#include "game/options.hpp" // Para Options, options, Cheat, SectionState
|
#include "game/options.hpp" // Para Options, options, Cheat, SectionState
|
||||||
@@ -69,7 +68,7 @@ Game::Game(Mode mode)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Crea objetos e inicializa variables
|
// Crea objetos e inicializa variables
|
||||||
ZoneManager::init();
|
// ZoneManager se inicializa en Director (antes que Resource::Cache, que carga rooms)
|
||||||
ItemTracker::init();
|
ItemTracker::init();
|
||||||
KeyTracker::init();
|
KeyTracker::init();
|
||||||
DoorTracker::init();
|
DoorTracker::init();
|
||||||
@@ -175,7 +174,7 @@ Game::~Game() {
|
|||||||
KeyTracker::destroy();
|
KeyTracker::destroy();
|
||||||
DoorTracker::destroy();
|
DoorTracker::destroy();
|
||||||
Inventory::destroy();
|
Inventory::destroy();
|
||||||
ZoneManager::destroy();
|
// ZoneManager lo destruye Director
|
||||||
|
|
||||||
if (Console::get() != nullptr) { Console::get()->on_toggle = nullptr; }
|
if (Console::get() != nullptr) { Console::get()->on_toggle = nullptr; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user