treballant en sistema de portes i claus
This commit is contained in:
@@ -382,6 +382,86 @@ void RoomLoader::parsePlatforms(const fkyaml::node& yaml, Room::Data& room, bool
|
||||
}
|
||||
}
|
||||
|
||||
// Parsea los datos de una llave individual
|
||||
auto RoomLoader::parseKeyData(const fkyaml::node& key_node) -> Key::Data { // NOLINT(readability-convert-member-functions-to-static)
|
||||
Key::Data key;
|
||||
|
||||
if (key_node.contains("animation")) {
|
||||
key.animation_path = key_node["animation"].get_value<std::string>();
|
||||
}
|
||||
if (key_node.contains("id")) {
|
||||
key.id = key_node["id"].get_value<std::string>();
|
||||
}
|
||||
if (key_node.contains("position")) {
|
||||
const auto& pos = key_node["position"];
|
||||
if (pos.contains("x")) {
|
||||
key.x = pos["x"].get_value<float>() * Tile::SIZE;
|
||||
}
|
||||
if (pos.contains("y")) {
|
||||
key.y = pos["y"].get_value<float>() * Tile::SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
// Parsea la lista de llaves de la habitación
|
||||
void RoomLoader::parseKeys(const fkyaml::node& yaml, Room::Data& room, bool verbose) { // NOLINT(readability-convert-member-functions-to-static)
|
||||
if (!yaml.contains("keys") || yaml["keys"].is_null()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& keys_node = yaml["keys"];
|
||||
|
||||
for (const auto& key_node : keys_node) {
|
||||
room.keys.push_back(parseKeyData(key_node));
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
std::cout << "Loaded " << room.keys.size() << " keys\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Parsea los datos de una puerta individual
|
||||
auto RoomLoader::parseDoorData(const fkyaml::node& door_node) -> Door::Data { // NOLINT(readability-convert-member-functions-to-static)
|
||||
Door::Data door;
|
||||
|
||||
if (door_node.contains("animation")) {
|
||||
door.animation_path = door_node["animation"].get_value<std::string>();
|
||||
}
|
||||
if (door_node.contains("id")) {
|
||||
door.id = door_node["id"].get_value<std::string>();
|
||||
}
|
||||
if (door_node.contains("position")) {
|
||||
const auto& pos = door_node["position"];
|
||||
if (pos.contains("x")) {
|
||||
door.x = pos["x"].get_value<float>() * Tile::SIZE;
|
||||
}
|
||||
if (pos.contains("y")) {
|
||||
door.y = pos["y"].get_value<float>() * Tile::SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
return door;
|
||||
}
|
||||
|
||||
// Parsea la lista de puertas de la habitación
|
||||
void RoomLoader::parseDoors(const fkyaml::node& yaml, Room::Data& room, bool verbose) { // NOLINT(readability-convert-member-functions-to-static)
|
||||
if (!yaml.contains("doors") || yaml["doors"].is_null()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& doors_node = yaml["doors"];
|
||||
|
||||
for (const auto& door_node : doors_node) {
|
||||
room.doors.push_back(parseDoorData(door_node));
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
std::cout << "Loaded " << room.doors.size() << " doors\n";
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
// Carga una habitación desde un string YAML (para el editor de mapas, evita el resource pack)
|
||||
auto RoomLoader::loadFromString(const std::string& yaml_content, const std::string& file_name) -> Room::Data {
|
||||
@@ -393,6 +473,8 @@ auto RoomLoader::loadFromString(const std::string& yaml_content, const std::stri
|
||||
parseEnemies(yaml, room, false);
|
||||
parseItems(yaml, room, false);
|
||||
parsePlatforms(yaml, room, false);
|
||||
parseKeys(yaml, room, false);
|
||||
parseDoors(yaml, room, false);
|
||||
} catch (const fkyaml::exception& e) {
|
||||
std::cerr << "YAML parsing error in " << file_name << ": " << e.what() << '\n';
|
||||
} catch (const std::exception& e) {
|
||||
@@ -428,6 +510,8 @@ auto RoomLoader::loadYAML(const std::string& file_path, bool verbose) -> Room::D
|
||||
parseEnemies(yaml, room, verbose);
|
||||
parseItems(yaml, room, verbose);
|
||||
parsePlatforms(yaml, room, verbose);
|
||||
parseKeys(yaml, room, verbose);
|
||||
parseDoors(yaml, room, verbose);
|
||||
|
||||
if (verbose) {
|
||||
std::cout << "Room loaded successfully: " << FILE_NAME << '\n';
|
||||
|
||||
Reference in New Issue
Block a user