#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 Core::Engine::genBubbleKeyPoints() { float random1 = this->distr(this->gen); float random2 = this->distr(this->gen); std::vector 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 Core::Engine::parse(std::string filename) { std::ifstream data(filename); std::string line; std::vector 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; }