#ifndef BLANK_WORLD_HPP_
#define BLANK_WORLD_HPP_
+#include "controller.hpp"
#include "geometry.hpp"
#include "model.hpp"
+#include "noise.hpp"
+#include "shader.hpp"
#include "shape.hpp"
#include <list>
: id(-1), visible(v), shape(shape), color(color), outline_color(outline_color) { }
static const BlockType DEFAULT;
- static const CuboidShape DEFAULT_SHAPE;
+ static const NullShape DEFAULT_SHAPE;
void FillVBO(
pos.z >= 0 && pos.z < Depth();
}
static constexpr int ToIndex(const glm::vec3 &pos) {
- return pos.x + pos.y * Width() + pos.z * Width() * Height();
+ return int(pos.x) + int(pos.y) * Width() + int(pos.z) * Width() * Height();
}
static constexpr bool InBounds(int idx) {
return idx >= 0 && idx < Size();
}
static glm::vec3 ToCoords(int idx) {
return glm::vec3(
- idx % Width(),
- (idx / Width()) % Height(),
- idx / (Width() * Height())
+ 0.5f + idx % Width(),
+ 0.5f + (idx / Width()) % Height(),
+ 0.5f + idx / (Width() * Height())
);
}
public:
World();
- void Generate();
+ void Generate(const glm::tvec3<int> &from, const glm::tvec3<int> &to);
bool Intersection(
const Ray &,
glm::vec3 *normal = nullptr);
BlockTypeRegistry &BlockTypes() { return blockType; }
- std::list<Chunk> &LoadedChunks() { return chunks; }
+ std::list<Chunk> &LoadedChunks() { return loaded; }
+
+ FPSController &Controller() { return player; }
Chunk &Next(const Chunk &, const glm::vec3 &dir);
+ void Update(int dt);
+
+ void Render(DirectionalLighting &);
+
private:
- Chunk &Generate(const glm::vec3 &);
+ void Generate(Chunk &);
private:
BlockTypeRegistry blockType;
StairShape stairShape;
CuboidShape slabShape;
- std::list<Chunk> chunks;
+ SimplexNoise blockNoise;
+ SimplexNoise colorNoise;
+
+ FPSController player;
+
+ std::list<Chunk> loaded;
+ std::list<Chunk> to_generate;
};