ajustos de qualitat, canvi de tecles, persistencia de opcions, etc
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user