llevat soport per a colors amb nom
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
#include "core/resources/resource_helper.hpp" // Para Resource::Helper
|
||||
#include "external/fkyaml_node.hpp" // Para fkyaml::node
|
||||
#include "utils/defines.hpp" // Para Tile::SIZE
|
||||
#include "utils/utils.hpp" // Para stringToColor
|
||||
#include "utils/utils.hpp"
|
||||
|
||||
// Convierte room connection de YAML a formato interno
|
||||
auto RoomLoader::convertRoomConnection(const std::string& value) -> std::string { // NOLINT(readability-convert-member-functions-to-static)
|
||||
@@ -20,11 +20,11 @@ auto RoomLoader::convertRoomConnection(const std::string& value) -> std::string
|
||||
return value + ".yaml";
|
||||
}
|
||||
|
||||
// Lee un nodo de color tolerando tanto string ("red", "bright_blue") como entero (índice de paleta)
|
||||
static auto readColorNode(const fkyaml::node& node) -> std::string {
|
||||
if (node.is_string()) { return node.get_value<std::string>(); }
|
||||
if (node.is_integer()) { return std::to_string(node.get_value<int>()); }
|
||||
return "black";
|
||||
// Lee un nodo de color como Uint8 (acepta entero directo o string numérico)
|
||||
static auto readColorNode(const fkyaml::node& node) -> Uint8 {
|
||||
if (node.is_integer()) { return static_cast<Uint8>(node.get_value<int>()); }
|
||||
if (node.is_string()) { return static_cast<Uint8>(safeStoi(node.get_value<std::string>(), 0)); }
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Convierte string de autoSurface a int
|
||||
@@ -47,7 +47,7 @@ auto RoomLoader::convertAutoSurface(const fkyaml::node& node) -> int { // NOLIN
|
||||
// Convierte un tilemap 2D a vector 1D flat
|
||||
auto RoomLoader::flattenTilemap(const std::vector<std::vector<int>>& tilemap_2d) -> std::vector<int> { // NOLINT(readability-convert-member-functions-to-static, readability-named-parameter)
|
||||
std::vector<int> tilemap_flat;
|
||||
tilemap_flat.reserve(512); // 16 rows × 32 cols
|
||||
tilemap_flat.reserve(Map::WIDTH * Map::HEIGHT);
|
||||
|
||||
for (const auto& row : tilemap_2d) {
|
||||
for (int tile : row) {
|
||||
@@ -86,13 +86,13 @@ void RoomLoader::parseRoomConfig(const fkyaml::node& yaml, Room::Data& room, con
|
||||
}
|
||||
|
||||
// Item colors
|
||||
room.item_color1 = room_node.contains("itemColor1")
|
||||
? readColorNode(room_node["itemColor1"])
|
||||
: "yellow";
|
||||
if (room_node.contains("itemColor1")) {
|
||||
room.item_color1 = readColorNode(room_node["itemColor1"]);
|
||||
}
|
||||
|
||||
room.item_color2 = room_node.contains("itemColor2")
|
||||
? readColorNode(room_node["itemColor2"])
|
||||
: "magenta";
|
||||
if (room_node.contains("itemColor2")) {
|
||||
room.item_color2 = readColorNode(room_node["itemColor2"]);
|
||||
}
|
||||
|
||||
// Dirección de la cinta transportadora (left/none/right)
|
||||
room.conveyor_belt_direction = room_node.contains("conveyorBelt")
|
||||
@@ -130,11 +130,11 @@ void RoomLoader::parseTilemap(const fkyaml::node& yaml, Room::Data& room, const
|
||||
|
||||
// Read 2D array
|
||||
std::vector<std::vector<int>> tilemap_2d;
|
||||
tilemap_2d.reserve(16);
|
||||
tilemap_2d.reserve(Map::HEIGHT);
|
||||
|
||||
for (const auto& row_node : tilemap_node) {
|
||||
std::vector<int> row;
|
||||
row.reserve(32);
|
||||
row.reserve(Map::WIDTH);
|
||||
|
||||
for (const auto& tile_node : row_node) {
|
||||
row.push_back(tile_node.get_value<int>());
|
||||
@@ -225,9 +225,9 @@ auto RoomLoader::parseEnemyData(const fkyaml::node& enemy_node) -> Enemy::Data {
|
||||
}
|
||||
|
||||
// Color
|
||||
enemy.color = enemy_node.contains("color")
|
||||
? enemy_node["color"].get_value_or<std::string>("white")
|
||||
: "white";
|
||||
if (enemy_node.contains("color")) {
|
||||
enemy.color = readColorNode(enemy_node["color"]);
|
||||
}
|
||||
|
||||
// Optional fields
|
||||
enemy.flip = enemy_node.contains("flip")
|
||||
@@ -293,8 +293,8 @@ auto RoomLoader::parseItemData(const fkyaml::node& item_node, const Room::Data&
|
||||
: 0;
|
||||
|
||||
// Colors (assigned from room defaults)
|
||||
item.color1 = stringToColor(room.item_color1);
|
||||
item.color2 = stringToColor(room.item_color2);
|
||||
item.color1 = room.item_color1;
|
||||
item.color2 = room.item_color2;
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user