Bridges-C++ 3.5.0-dev2-1-ge3e57bf
Bridges(C++ API)
Scene.h
Go to the documentation of this file.
1#ifndef SCENE_H
2
3#define SCENE_H
4
5#include <string>
6#include <list>
7#include <unordered_map>
8
9#include "Camera.h"
10#include "TerrainMesh.h"
11#include "DataStructure.h"
12
13namespace bridges {
14 class Scene: public DataStructure {
15
16 private:
17 std::unordered_map<string, TerrainMesh> terrains;
18 Camera camera;
19
20 public:
22 float pos[] = {0., 0., 0.};
23 Scene("fps", 90, pos);
24 }
25
26 Scene(std::string type, int fov, float position[3]) {
27 camera.setType(type);
28 camera.setFov(fov);
29 camera.setPosition(position);
30 }
31
35 virtual const string getDStype() const override {
36 return "Scene";
37 }
38
42 void setCamera (Camera& c) {
43 camera = c;
44 }
45
50 return camera;
51 }
52
56 void add(TerrainMesh terrain) {
57 terrains[terrain.getName()] = terrain;
58 }
59
63 TerrainMesh& get(string mesh_name) {
64 return terrains[mesh_name];
65 }
66
70 // void remove(TerrainMesh scene_object) {
71 // terrains.remove(scene_object);
72 // }
73
74 virtual const string getDataStructureRepresentation() const
75 override {
76
77 std::string scene_json = OPEN_CURLY;
78 float pos[3];
79 // add camera
80 camera.getPosition(pos);
81 scene_json +=
82 QUOTE + "camera" + QUOTE + COLON +
84 QUOTE + "name" + QUOTE + COLON +
85 QUOTE + camera.getType() + QUOTE + COMMA +
86 QUOTE + "fov" + QUOTE + COLON +
87 QUOTE + std::to_string(camera.getFov()) + QUOTE + COMMA +
88 QUOTE + "position" + QUOTE + COLON +
89 OPEN_BOX +
90 std::to_string(pos[0]) + COMMA +
91 std::to_string(pos[1]) + COMMA +
92 std::to_string(pos[2]) +
93 CLOSE_BOX +
95
96 // add lights
97 scene_json += QUOTE + "lights" + QUOTE + COLON +
99
100 // add terrain meshes
101 scene_json +=
102 QUOTE + "meshes" + QUOTE + COLON + OPEN_BOX;
103 for (auto t : terrains) {
104 // get vertices of this mesh
105 TerrainMesh tr = t.second;
106 vector<float> verts = tr.getVertices();
107 vector<float> colors = tr.getColors();
108 scene_json += OPEN_CURLY +
109 QUOTE + "name" + QUOTE + COLON + QUOTE + tr.getName() + QUOTE + COMMA +
110 QUOTE + "type" + QUOTE + COLON + QUOTE + tr.getType() + QUOTE + COMMA +
111 QUOTE + "rows" + QUOTE + COLON + QUOTE + std::to_string(tr.getRows()) + QUOTE + COMMA +
112 QUOTE + "cols" + QUOTE + COLON + QUOTE + std::to_string(tr.getCols()) + QUOTE + COMMA +
113
114 // terrain vertices
115 QUOTE + "vertices" + QUOTE + COLON;
116
117 scene_json += OPEN_BOX; //vertices start
118 // list vertices one row at a time
119 int k = 0;
120 for (int i = 0; i < tr.getRows(); i++) {
121 scene_json += OPEN_BOX; // row start
122 for (int j = 0; j < tr.getCols(); j++) {
123 scene_json += std::to_string(verts[k++]) + COMMA;
124 }
125 // remove the last comma
126 scene_json.erase(scene_json.size() - 1);
127 scene_json += CLOSE_BOX + COMMA; // row end
128 }
129 // remove the last comma
130 scene_json.erase(scene_json.size() - 1);
131 scene_json += CLOSE_BOX + COMMA; //end of vertices
132 // terrain colors
133 scene_json += QUOTE + "colors" + QUOTE + COLON;
134 scene_json += OPEN_BOX; //colors start
135
136 // list colors one row at a time
137 k = 0;
138 for (int i = 0; i < tr.getRows(); i++) {
139 scene_json += OPEN_BOX; // row start
140 for (int j = 0; j < tr.getCols(); j++) {
141 string col_str = std::to_string(colors[k])
142 + COMMA + std::to_string(colors[k + 1])
143 + COMMA + std::to_string(colors[k + 2])
144 + COMMA + std::to_string(colors[k + 3]);
145 scene_json += OPEN_BOX + col_str + CLOSE_BOX +
146 COMMA;
147 k += 4;
148 }
149 // remove the last comma
150 scene_json.erase(scene_json.size() - 1);
151 scene_json += CLOSE_BOX + COMMA; // row (colors) end
152 }
153 // remove the last comma
154 scene_json.erase(scene_json.size() - 1);
155 scene_json += CLOSE_BOX + CLOSE_CURLY + CLOSE_BOX + CLOSE_CURLY;
156 }
157 return scene_json;
158 }
159 };
160}
161#endif
Definition: Camera.h:9
void setType(string t)
Definition: Camera.h:40
int getFov() const
Definition: Camera.h:44
string getType() const
Definition: Camera.h:36
void setPosition(float p[3])
Definition: Camera.h:52
void getPosition(float *p) const
Definition: Camera.h:55
void setFov(int f)
Definition: Camera.h:48
Definition: Scene.h:14
TerrainMesh & get(string mesh_name)
add function for TerrainMesh objects
Definition: Scene.h:63
Scene()
Definition: Scene.h:21
Scene(std::string type, int fov, float position[3])
Definition: Scene.h:26
void setCamera(Camera &c)
add function for Camera objects
Definition: Scene.h:42
virtual const string getDataStructureRepresentation() const override
remove function for TerrainMesh objects
Definition: Scene.h:74
void add(TerrainMesh terrain)
add function for TerrainMesh objects
Definition: Scene.h:56
Camera getCamera()
get the current camera
Definition: Scene.h:49
virtual const string getDStype() const override
Get data structure type.
Definition: Scene.h:35
Definition: TerrainMesh.h:10
int getRows()
Definition: TerrainMesh.h:51
string getName()
Definition: TerrainMesh.h:39
int getCols()
Definition: TerrainMesh.h:59
string getType()
Definition: TerrainMesh.h:47
vector< float > & getVertices()
Definition: TerrainMesh.h:75
vector< float > & getColors()
Definition: TerrainMesh.h:67
This is the superclass of all data structure types in BRIDGES.
Definition: DataStructure.h:74
these methods convert byte arrays in to base64 codes and are used in BRIDGES to represent the color a...
Definition: alltypes.h:4
const string COLON
Definition: DataStructure.h:52
const string OPEN_BOX
Definition: DataStructure.h:55
const string COMMA
Definition: DataStructure.h:51
const string OPEN_CURLY
Definition: DataStructure.h:53
const string CLOSE_BOX
Definition: DataStructure.h:56
const string CLOSE_CURLY
Definition: DataStructure.h:54
const string QUOTE
Definition: DataStructure.h:50