-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscene_graph.h
More file actions
141 lines (110 loc) · 1.76 KB
/
Copy pathscene_graph.h
File metadata and controls
141 lines (110 loc) · 1.76 KB
1
2
3
4
5
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#pragma once
#include <cstdint>
#include <string>
#include <unordered_set>
#include <memory>
#include<glm/glm.hpp>
#ifdef USE_CEREAL
#include<cereal/types/memory.hpp>
#include<cereal/types/unordered_set.hpp>
#endif
struct Color
{
Color() = default;
Color(float r, float g, float b)
: r(r)
, g(g)
, b(b)
{}
float r{ 0.0f };
float g{ 0.0f };
float b{ 0.0f };
float a{ 0.0f };
};
class Object
{
public:
Object(std::string name)
: m_name(name)
{
}
std::string m_name;
uint64_t m_guid;
#ifdef USE_CEREAL
template<class Archive>
void load(Archive &ar)
{
ar(cereal::make_nvp("name", m_name));
}
template<class Archive>
void save(Archive &ar) const
{
ar(cereal::make_nvp("name", m_name));
}
#endif
};
class Node : public Object
{
public:
Node(std::string name)
: Object(name)
{
}
std::weak_ptr<Node> m_parent;
std::unordered_set<std::shared_ptr<Node>> m_children;
glm::mat4x4 m_local_transform;
};
class LightNode : public Node
{
public:
Color m_color;
};
class MeshNode : public Node
{
public:
std::string m_meshname;
};
class Actor : public Node
{
public:
Actor(std::string name)
: Node(name)
{
}
#ifdef USE_CEREAL
template<class Archive>
void load(Archive &ar)
{
ar(cereal::base_class<Object>(this));
}
template<class Archive>
void save(Archive &ar) const
{
ar(cereal::base_class<Object>(this));
}
#endif
};
class World : public Object
{
public:
World(std::string name)
: Object(name)
{
}
std::unordered_set<std::shared_ptr<Actor>> m_actors;
#ifdef USE_CEREAL
template<class Archive>
void save(Archive &ar) const
{
ar(cereal::make_nvp("object", cereal::base_class<Object>(this)));
for (auto actor : m_actors)
{
ar(*actor);
}
}
template<class Archive>
void load(Archive &ar)
{
}
#endif
};