#include "planet/Planet.h" #include "planet/PlanetFace.h" Planet::Planet(glm::vec3 position, float radius, PlanetNoiseParams &noiseParams) : m_position(position), m_radius(radius), m_noise(noiseParams.frequency, noiseParams.amplitude, noiseParams.lacunarity, noiseParams.persistence) { for (unsigned int a = 0; a <= 4; a++) { for (unsigned int b = 0; b <= 4; b++) { for (unsigned int c = 0; c <= 4; c++) { for (unsigned int d = 0; d <= 4; d++) { m_ibuffers[a][b][c][d] = new PlanetIndexBuffer(16, a, b, c, d); } } } } for (int i = 0; i < 6; i++) { m_faces[i] = new PlanetFace(this, i); } connectFaces(); } Planet::~Planet() { for (int i = 0; i < 6; i++) { delete m_faces[i]; } for (unsigned int a = 0; a <= 4; a++) { for (unsigned int b = 0; b <= 4; b++) { for (unsigned int c = 0; c <= 4; c++) { for (unsigned int d = 0; d <= 4; d++) { delete m_ibuffers[a][b][c][d]; m_ibuffers[a][b][c][d] = 0; } } } } } void Planet::draw(Camera* camera, Shader* shader) { for (int i = 0; i < 6; i++) { m_faces[i]->draw(camera, shader); } } void Planet::tick(Camera* camera, GLfloat dtime) { for (int i = 0; i < 6; i++) { m_faces[i]->tick(camera, dtime); } // m_faces[FACE_BACK]->tick(camera, dtime); } void Planet::connectFaces() { m_faces[FACE_FRONT]->connect(TOP, m_faces[FACE_TOP]); m_faces[FACE_FRONT]->connect(LEFT, m_faces[FACE_LEFT]); m_faces[FACE_FRONT]->connect(BOTTOM, m_faces[FACE_BOTTOM]); m_faces[FACE_LEFT]->connect(TOP, m_faces[FACE_TOP]); m_faces[FACE_LEFT]->connect(LEFT, m_faces[FACE_BACK]); m_faces[FACE_LEFT]->connect(BOTTOM, m_faces[FACE_BOTTOM]); m_faces[FACE_BACK]->connect(TOP, m_faces[FACE_TOP]); m_faces[FACE_BACK]->connect(LEFT, m_faces[FACE_RIGHT]); m_faces[FACE_BACK]->connect(BOTTOM, m_faces[FACE_BOTTOM]); m_faces[FACE_RIGHT]->connect(TOP, m_faces[FACE_TOP]); m_faces[FACE_RIGHT]->connect(LEFT, m_faces[FACE_FRONT]); m_faces[FACE_RIGHT]->connect(BOTTOM, m_faces[FACE_BOTTOM]); } glm::mat4 Planet::getTransformation() { glm::mat4 newMat = glm::mat4(1.0f); newMat = glm::translate(newMat, m_position); return newMat; } PlanetIndexBuffer* Planet::getIndexBuffer(const unsigned int detailTop, const unsigned int detailRight, const unsigned int detailBottom, const unsigned int detailLeft) { return m_ibuffers[detailTop][detailRight][detailBottom][detailLeft]; }