79 lines
1.7 KiB
C++
79 lines
1.7 KiB
C++
#ifndef __PLANETFACE_H__
|
|
#define __PLANETFACE_H__
|
|
|
|
#include "util/Common.h"
|
|
#include "planet/Chunk.h"
|
|
#include "Shader.h"
|
|
#include "Camera.h"
|
|
|
|
#define ASYNC_NUM_CHUNKS_PER_FRAME 8
|
|
|
|
enum Face {
|
|
FACE_BOTTOM, FACE_TOP,
|
|
FACE_LEFT, FACE_RIGHT,
|
|
FACE_FRONT, FACE_BACK
|
|
};
|
|
|
|
class Planet;
|
|
class PlanetFace;
|
|
|
|
// PlanetFace Chunk Manager
|
|
class ChunkManager
|
|
{
|
|
public:
|
|
ChunkManager(PlanetFace* face, GLuint chunkCount);
|
|
~ChunkManager();
|
|
|
|
void update(Camera* camera, GLfloat dtime);
|
|
Chunk* getChunk(int x, int y, int z);
|
|
|
|
void render(Camera* camera, Shader* shader);
|
|
private:
|
|
void updateUnload();
|
|
void updateLoad();
|
|
void updateGenerate();
|
|
void updateRebuild();
|
|
void updateFlags();
|
|
void updateVisibility(Camera* camera);
|
|
void updateRender(Camera* camera);
|
|
|
|
std::vector<Chunk*> m_chunks;
|
|
std::vector<Chunk*> m_chunksVisible;
|
|
|
|
// Queues
|
|
std::vector<Chunk*> m_chunkUnloadQueue;
|
|
std::vector<Chunk*> m_chunkLoadQueue;
|
|
std::vector<Chunk*> m_chunkGenerateQueue;
|
|
std::vector<Chunk*> m_chunkRebuildQueue;
|
|
std::vector<Chunk*> m_chunkRenderQueue;
|
|
std::vector<Chunk*> m_chunkFlagsQueue;
|
|
|
|
PlanetFace* m_face;
|
|
|
|
int m_chunksLoaded = 0;
|
|
bool m_forceVisibilityUpdate;
|
|
};
|
|
|
|
class PlanetFace
|
|
{
|
|
public:
|
|
PlanetFace(Planet* planet, const unsigned int face = Face::FACE_BOTTOM);
|
|
~PlanetFace();
|
|
|
|
void tick(Camera* camera, GLfloat dtime);
|
|
void draw(Camera* camera, Shader* shader);
|
|
|
|
inline Planet* getPlanet() const { return m_planet; }
|
|
|
|
inline const glm::vec3 getPosition() const { return m_planet->getPosition() + m_pos; }
|
|
private:
|
|
Planet* m_planet;
|
|
unsigned int m_face;
|
|
|
|
glm::vec3 m_normal;
|
|
glm::vec3 m_pos;
|
|
|
|
ChunkManager* m_chunks;
|
|
};
|
|
#endif // __PLANETFACE_H__
|