60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
#include "Terrain.h"
|
|
|
|
Terrain::Terrain() : renderer(nullptr) {
|
|
// Create chunk
|
|
TerrainInfo ti;
|
|
ti.xRange[0] = 0;
|
|
ti.xRange[1] = 16;
|
|
ti.yRange[0] = 0;
|
|
ti.yRange[1] = 16;
|
|
ti.zRange[0] = 0;
|
|
ti.zRange[1] = 16;
|
|
ti.frequency = 0.2f;
|
|
ti.seed = 0;
|
|
|
|
chunks.push_back(Chunk(fnGenerator, ti));
|
|
|
|
// Create models for chunk renderer to use.
|
|
models = {
|
|
new Model(ROOT_DIR "data/game-models/1/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/2/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/3/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/4/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/5/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/6/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/7/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/8/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/9/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/10/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/11/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/12/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/13/MetalFloor.obj"),
|
|
new Model(ROOT_DIR "data/game-models/14/MetalFloor.obj"),
|
|
};
|
|
// Resize models to fit in coordinate system.
|
|
for (int i = 0; i < models.size(); i++) {
|
|
models.at(i)->resize(glm::vec3(0.5f));
|
|
}
|
|
|
|
// Create chunk renderer.
|
|
renderer = new MarchingCubeChunkRenderer(this->chunks, models);
|
|
}
|
|
|
|
Terrain::~Terrain() {
|
|
// Since we created our renderer member in our constructer and defined it in
|
|
// the header file it has to be a nullptr before being updated to the created
|
|
// object, which means it's lifecycle needs to be managed by this class.
|
|
delete renderer;
|
|
// Creating models here for OpenGL purposes means that we can't duplicate the
|
|
// data, so we need to delete them after creating them as pointers.
|
|
for (int i = 0; i < models.size(); i++) {
|
|
delete models.at(i);
|
|
}
|
|
}
|
|
|
|
void Terrain::draw(ShaderLoader &shader) {
|
|
if (renderer != nullptr)
|
|
renderer->draw(shader);
|
|
else
|
|
error.warn("Terrain attempted to draw with no chunk renderer!");
|
|
}
|