GRK_Project/cw 9/Engine.cpp
2023-02-09 14:18:46 +01:00

93 lines
2.1 KiB
C++

#include "Engine.h"
void Core::Engine::initRandomGenerator(std::default_random_engine gen, std::uniform_int_distribution<> distr) {
this->gen = gen;
this->distr = distr;
}
std::vector<glm::vec3> Core::Engine::genBubbleKeyPoints() {
float random1 = this->distr(this->gen);
float random2 = this->distr(this->gen);
std::vector<glm::vec3> bubbleKeyPoints({
glm::vec3(random1 , -this->skyboxVerticeParameter, random2),
glm::vec3(random1 , this->skyboxVerticeParameter, random2)
}
);
return bubbleKeyPoints;
};
void Core::Engine::generateBubbleArray() {
for (int i = 0; i < 300; i++) {
this->bubbleArray[i] = this->genBubbleKeyPoints();
}
}
void Core::Engine::generateObjectArray() {
std::uniform_int_distribution<> distr(-64, 64);
for (int i = 0; i < 200; i++) {
int random1 = distr(this->gen);
int random2 = distr(this->gen);
float height = -this->skyboxVerticeParameter + this->terrain.heightTable[abs(random1)][abs(random2)] + 15;
this->objectArray[i] = glm::vec3(random1, height, random2) * glm::vec3(3, 1, 3);
}
}
void Core::Engine::generateObjectSize() {
std::uniform_real_distribution<> distr(0.1f, 0.25f);
for (int i = 0; i < 200; i++) {
float random = distr(this->gen);
objectSize.push_back(random);
}
}
void Core::Engine::generateObjectRotation() {
std::uniform_real_distribution<> distr(0.0f, 360.0f);
for (int i = 0; i < 200; i++) {
float random = distr(this->gen);
objectRotation.push_back(random);
}
}
void Core::Engine::initBubbles() {
this->generateBubbleArray();
}
std::vector<glm::vec3> Core::Engine::parse(std::string filename) {
std::ifstream data(filename);
std::string line;
std::vector<glm::vec3> result;
while (std::getline(data, line))
{
std::stringstream lineStream(line);
std::string cell;
glm::vec3 row;
int i = 0;
while (std::getline(lineStream, cell, ','))
{
switch (i % 3) {
case 0:
row.x = std::stof(cell);
break;
case 1:
row.y = std::stof(cell);
break;
case 2:
row.z = std::stof(cell);
break;
default:
break;
}
i += 1;
}
result.push_back(row);
}
return result;
}