voxspatium/src/planet/PlanetFace.cpp

67 lines
1.4 KiB
C++

#include "planet/PlanetFace.h"
#include "planet/Planet.h"
PlanetFace::PlanetFace(Planet* planet, const unsigned int face) :
m_planet(planet), m_face(face)
{
// Set face normal depending on face
switch (m_face) {
case Face::FACE_BOTTOM:
m_normal = glm::vec3(0.0f, -1.0f, 0.0f);
break;
case Face::FACE_TOP:
m_normal = glm::vec3(0.0f, 1.0f, 0.0f);
break;
case Face::FACE_LEFT:
m_normal = glm::vec3(-1.0f, 0.0f, 0.0f);
break;
case Face::FACE_RIGHT:
m_normal = glm::vec3(1.0f, 0.0f, 0.0f);
break;
case Face::FACE_FRONT:
m_normal = glm::vec3(0.0f, 0.0f, -1.0f);
break;
case Face::FACE_BACK:
m_normal = glm::vec3(0.0f, 0.0f, 1.0f);
break;
}
// Create chunks
for(int i=0;i<CHUNKS_W;i++)
{
for(int j=0;j<CHUNKS_H;j++)
{
for(int k=0;k<CHUNKS_D;k++)
{
m_chunks[i][j][k] = new Chunk(planet, this, x + i * CHUNK_N, j * CHUNK_N, z + k * CHUNK_N);
}
}
}
}
PlanetFace::~PlanetFace()
{
// Delete chunks
for(int i=0;i<CHUNKS_W;i++)
for(int j=0;j<CHUNKS_H;j++)
for(int k=0;k<CHUNKS_D;k++)
if(m_chunks[i][j][k])
m_chunks[i][j][k]->destroyChunk();
}
void PlanetFace::draw(Camera* camera)
{
for(int i=0;i<CHUNKS_W;i++)
for(int j=0;j<CHUNKS_H;j++)
for(int k=0;k<CHUNKS_D;k++)
m_chunks[i][j][k]->draw(camera);
}
void PlanetFace::tick(GLfloat dtime)
{
for(int i=0;i<CHUNKS_W;i++)
for(int j=0;j<CHUNKS_H;j++)
for(int k=0;k<CHUNKS_D;k++)
m_chunks[i][j][k]->tick(dtime);
}