ajustos de qualitat, canvi de tecles, persistencia de opcions, etc

This commit is contained in:
2026-04-11 09:16:39 +02:00
parent 3b052ca3a0
commit 49f6ed41e6
19 changed files with 149 additions and 157 deletions

View File

@@ -198,6 +198,17 @@ void Room::setTileSet(const std::string& tile_set_file) {
bg_color_);
tilemap_renderer_->initialize(collision_map_->getCollisionTileMap());
}
// Cambia el color de fondo en vivo (para editor)
void Room::setBgColor(Uint8 bg_color) {
bg_color_ = bg_color;
tilemap_renderer_ = std::make_unique<TilemapRenderer>(
tile_map_,
tile_set_width_,
surface_,
bg_color_);
tilemap_renderer_->initialize(collision_map_->getCollisionTileMap());
}
#endif
// Actualiza las variables y objetos de la habitación

View File

@@ -47,6 +47,7 @@ class Room {
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
bool bg_color_overridden{false}; // True si el yaml tenía bgColor explícito
std::vector<int> tile_map;
std::vector<int> collision_tile_map;
std::vector<Enemy::Data> enemies;
@@ -85,6 +86,7 @@ class Room {
void setCollisionTile(int index, int value);
void setConnection(Border border, const std::string& room_name);
void setTileSet(const std::string& tile_set_file);
void setBgColor(Uint8 bg_color);
[[nodiscard]] auto getTileSetWidth() const -> int { return tile_set_width_; }
#endif
void update(float delta_time);

View File

@@ -136,6 +136,14 @@ void RoomFormat::parseRoomConfig(const fkyaml::node& yaml, Room::Data& room, con
room.music = zone->music;
}
// bgColor: zona, override si está en el yaml
if (room_node.contains("bgColor")) {
room.bg_color = readColorNode(room_node["bgColor"]);
room.bg_color_overridden = true;
} else if (zone != nullptr) {
room.bg_color = zone->bg_color;
}
// Room connections
if (room_node.contains("connections")) {
parseRoomConnections(room_node["connections"], room);
@@ -508,15 +516,17 @@ auto RoomFormat::loadFromString(const std::string& yaml_content, const std::stri
auto RoomFormat::createDefault() -> Room::Data {
Room::Data data;
// Zona por defecto (resuelve tile_set_file y music desde ZoneManager)
// Zona por defecto (resuelve tile_set_file, music y bg_color desde ZoneManager)
const Zone::Data* zone = ZoneManager::get()->getDefaultZone();
if (zone != nullptr) {
data.zone = zone->name;
data.tile_set_file = zone->tile_set_file;
data.music = zone->music;
data.bg_color = zone->bg_color;
}
data.tile_set_overridden = false;
data.music_overridden = false;
data.bg_color_overridden = false;
// Conexiones a cero
data.upper_room = "0";
@@ -559,6 +569,11 @@ auto RoomFormat::buildContent(const Room::Data& room_data) -> std::string { //
out << " music: " << room_data.music << "\n";
}
// bgColor solo si es override explícito del valor heredado de la zona
if (room_data.bg_color_overridden) {
out << " bgColor: " << static_cast<int>(room_data.bg_color) << "\n";
}
// Conexiones
out << "\n";
out << " # Conexiones de la habitación (null = sin conexión)\n";

View File

@@ -1,5 +1,7 @@
#pragma once
#include <SDL3/SDL.h>
#include <string> // Para string
/**
@@ -17,6 +19,7 @@ namespace Zone {
std::string name; // Nombre único de la zona (ej. "neighborhood", "cave")
std::string tile_set_file; // Fichero de tileset por defecto (ej. "neighborhood.gif")
std::string music; // Pista de música por defecto (ej. "574070_KUVO_Farewell_to_school.ogg")
Uint8 bg_color{0}; // Color de fondo por defecto (índice de paleta)
};
} // namespace Zone

View File

@@ -57,6 +57,9 @@ void ZoneManager::loadFromFile(const std::string& file_path) {
if (zone_node.contains("music")) {
zone.music = zone_node["music"].get_value<std::string>();
}
if (zone_node.contains("bgColor")) {
zone.bg_color = static_cast<Uint8>(zone_node["bgColor"].get_value<int>());
}
if (zone.name.empty()) {
std::cerr << "ZoneManager: skipping zone without name\n";