main.cpp 1.82 KB
Newer Older
1
#include "parser.h"
2
#include "node.h"
beder's avatar
beder committed
3
#include <fstream>
4
#include <iostream>
beder's avatar
beder committed
5

beder's avatar
beder committed
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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)
{
	YAML::Node::Iterator it = node.begin();
	*it >> v.x;
	++it;
	*it >> v.y;
	++it;
	*it >> v.z;
}

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"];
	for(YAML::Node::Iterator it=rooms.begin();it!=rooms.end();++it) {
		Room room;
		*it >> room;
		level.rooms.push_back(room);
	}
}

beder's avatar
beder committed
69
70
int main()
{
beder's avatar
beder committed
71
	std::ifstream fin("test.yaml");
72

73
74
75
76
77
78
	try {
		YAML::Parser parser(fin);
		if(!parser)
			return 0;

		YAML::Document doc;
79
		parser.GetNextDocument(doc);
80
81

		const YAML::Node& root = doc.GetRoot();
beder's avatar
beder committed
82
83
84
85
		Level level;
		root >> level;
		std::cout << level;
	} catch(YAML::Exception&) {
86
		std::cout << "Error parsing the yaml!\n";
87
	}
88

89
	getchar();
beder's avatar
beder committed
90
91
92

	return 0;
}