2008-06-30 23:57:58 +00:00
|
|
|
#include "parser.h"
|
2008-07-02 01:22:39 +00:00
|
|
|
#include "node.h"
|
2008-06-30 06:51:22 +00:00
|
|
|
#include <fstream>
|
2008-06-30 23:57:58 +00:00
|
|
|
#include <iostream>
|
2008-06-25 22:45:08 +00:00
|
|
|
|
2008-07-02 05:00:32 +00:00
|
|
|
struct Vec3 {
|
|
|
|
float x, y, z;
|
|
|
|
|
|
|
|
friend std::ostream& operator << (std::ostream& out, const Vec3& v) {
|
|
|
|
out << v.x << " " << v.y << " " << v.z;
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
void operator >> (const YAML::Node& node, Vec3& v)
|
|
|
|
{
|
2008-07-02 21:41:54 +00:00
|
|
|
node[0] >> v.x;
|
|
|
|
node[1] >> v.y;
|
|
|
|
node[2] >> v.z;
|
2008-07-02 05:00:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
struct Room {
|
|
|
|
std::string name;
|
|
|
|
Vec3 pos, size;
|
|
|
|
float height;
|
|
|
|
|
|
|
|
friend std::ostream& operator << (std::ostream& out, const Room& room) {
|
|
|
|
out << "Name: " << room.name << std::endl;
|
|
|
|
out << "Pos: " << room.pos << std::endl;
|
|
|
|
out << "Size: " << room.size << std::endl;
|
|
|
|
out << "Height: " << room.height << std::endl;
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
void operator >> (const YAML::Node& node, Room& room)
|
|
|
|
{
|
|
|
|
node["name"] >> room.name;
|
|
|
|
node["pos"] >> room.pos;
|
|
|
|
node["size"] >> room.size;
|
|
|
|
node["height"] >> room.height;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Level {
|
|
|
|
std::vector <Room> rooms;
|
|
|
|
|
|
|
|
friend std::ostream& operator << (std::ostream& out, const Level& level) {
|
|
|
|
for(unsigned i=0;i<level.rooms.size();i++) {
|
|
|
|
out << level.rooms[i];
|
|
|
|
out << "---------------------------------------\n";
|
|
|
|
}
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
void operator >> (const YAML::Node& node, Level& level)
|
|
|
|
{
|
|
|
|
const YAML::Node& rooms = node["rooms"];
|
2008-07-02 21:41:54 +00:00
|
|
|
for(unsigned i=0;i<rooms.size();i++) {
|
2008-07-02 05:00:32 +00:00
|
|
|
Room room;
|
2008-07-02 21:41:54 +00:00
|
|
|
rooms[i] >> room;
|
2008-07-02 05:00:32 +00:00
|
|
|
level.rooms.push_back(room);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-06-25 22:45:08 +00:00
|
|
|
int main()
|
|
|
|
{
|
2008-06-30 06:51:22 +00:00
|
|
|
std::ifstream fin("test.yaml");
|
2008-06-30 23:57:58 +00:00
|
|
|
|
2008-07-02 01:22:39 +00:00
|
|
|
try {
|
|
|
|
YAML::Parser parser(fin);
|
|
|
|
if(!parser)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
YAML::Document doc;
|
2008-07-01 06:28:10 +00:00
|
|
|
parser.GetNextDocument(doc);
|
2008-07-02 01:22:39 +00:00
|
|
|
|
2008-07-02 05:00:32 +00:00
|
|
|
Level level;
|
2008-07-02 21:41:54 +00:00
|
|
|
doc.GetRoot() >> level;
|
2008-07-02 05:00:32 +00:00
|
|
|
std::cout << level;
|
|
|
|
} catch(YAML::Exception&) {
|
2008-07-02 01:22:39 +00:00
|
|
|
std::cout << "Error parsing the yaml!\n";
|
2008-07-01 06:28:10 +00:00
|
|
|
}
|
2008-07-02 01:22:39 +00:00
|
|
|
|
2008-06-30 23:57:58 +00:00
|
|
|
getchar();
|
2008-06-25 22:45:08 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|