67 lines
1.4 KiB
C++
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);
|
|
}
|