collision map
This commit is contained in:
@@ -119,20 +119,12 @@ void RoomLoader::parseRoomConnections(const fkyaml::node& conn_node, Room::Data&
|
||||
: "0";
|
||||
}
|
||||
|
||||
// Parsea el tilemap de la habitación
|
||||
void RoomLoader::parseTilemap(const fkyaml::node& yaml, Room::Data& room, const std::string& file_name, bool verbose) { // NOLINT(readability-convert-member-functions-to-static)
|
||||
if (!yaml.contains("tilemap")) {
|
||||
std::cerr << "Warning: No tilemap found in " << file_name << '\n';
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& tilemap_node = yaml["tilemap"];
|
||||
|
||||
// Read 2D array
|
||||
// Lee un array 2D de enteros desde un nodo YAML
|
||||
static auto readTilemap2D(const fkyaml::node& node) -> std::vector<std::vector<int>> {
|
||||
std::vector<std::vector<int>> tilemap_2d;
|
||||
tilemap_2d.reserve(Map::HEIGHT);
|
||||
|
||||
for (const auto& row_node : tilemap_node) {
|
||||
for (const auto& row_node : node) {
|
||||
std::vector<int> row;
|
||||
row.reserve(Map::WIDTH);
|
||||
|
||||
@@ -143,11 +135,36 @@ void RoomLoader::parseTilemap(const fkyaml::node& yaml, Room::Data& room, const
|
||||
tilemap_2d.push_back(row);
|
||||
}
|
||||
|
||||
// Convert to 1D flat array
|
||||
room.tile_map = flattenTilemap(tilemap_2d);
|
||||
return tilemap_2d;
|
||||
}
|
||||
|
||||
// Parsea el tilemap de la habitación
|
||||
void RoomLoader::parseTilemap(const fkyaml::node& yaml, Room::Data& room, const std::string& file_name, bool verbose) { // NOLINT(readability-convert-member-functions-to-static)
|
||||
if (!yaml.contains("tilemap")) {
|
||||
std::cerr << "Warning: No tilemap found in " << file_name << '\n';
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& tilemap_node = yaml["tilemap"];
|
||||
|
||||
// Nuevo formato: tilemap.draw + tilemap.collision
|
||||
if (tilemap_node.contains("draw")) {
|
||||
room.tile_map = flattenTilemap(readTilemap2D(tilemap_node["draw"]));
|
||||
|
||||
if (tilemap_node.contains("collision")) {
|
||||
room.collision_tile_map = flattenTilemap(readTilemap2D(tilemap_node["collision"]));
|
||||
}
|
||||
} else {
|
||||
// Formato antiguo: tilemap es directamente el array 2D de dibujo
|
||||
room.tile_map = flattenTilemap(readTilemap2D(tilemap_node));
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
std::cout << "Loaded tilemap: " << room.tile_map.size() << " tiles\n";
|
||||
std::cout << "Loaded tilemap: " << room.tile_map.size() << " tiles";
|
||||
if (!room.collision_tile_map.empty()) {
|
||||
std::cout << " + collision: " << room.collision_tile_map.size() << " tiles";
|
||||
}
|
||||
std::cout << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user