summaryrefslogtreecommitdiff
path: root/src/minecraft.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xsrc/minecraft.cpp74
1 files changed, 13 insertions, 61 deletions
diff --git a/src/minecraft.cpp b/src/minecraft.cpp
index a11421d..2c7bb8f 100755
--- a/src/minecraft.cpp
+++ b/src/minecraft.cpp
@@ -5,7 +5,7 @@ using namespace std::chrono;
namespace app {
-Minecraft::Minecraft() : xeEngine{WIDTH, HEIGHT, "Minecraft Vulkan", "res/image/icon.png"} {};
+Minecraft::Minecraft() : engine{WIDTH, HEIGHT, "Minecraft Vulkan", "res/image/icon.png"} {};
Minecraft::~Minecraft() {}
@@ -13,83 +13,35 @@ void Minecraft::run() {
Chunk::load();
- auto viewerObject = xe::GameObject::createGameObject();
- viewerObject.transform.translation = {0.f, 40.f, 0.f};
- viewerObject.transform.rotation.y = glm::radians(45.f);
+ auto viewer = xe::GameObject::createGameObject();
+ viewer.transform.translation = {0.f, 40.f, 0.f};
+ viewer.transform.rotation.y = glm::radians(45.f);
- createGameObjects(viewerObject);
-
- ChunkRenderer renderer{Chunk::getTextures()};
+ World world {viewer, 10, 12345};
xe::Sound sound{"res/sound/when_the_world_ends.wav"};
sound.setLooping(true);
sound.play();
- PlayerController cameraController{xeEngine.getInput(), viewerObject};
+ PlayerController playerController{engine.getInput(), viewer};
- while (xeEngine.poll()) {
+ while (engine.poll()) {
- float frameTime = xeEngine.getFrameTime();
+ playerController.update(engine.getFrameTime());
- cameraController.update(frameTime);
- xeEngine.getCamera().setViewYXZ(viewerObject.transform.translation, viewerObject.transform.rotation);
+ world.reloadChunks();
- if(xeEngine.beginFrame()) {
- renderer.render(loadedChunks, xeEngine.getCamera());
- xeEngine.endFrame();
+ if(engine.beginFrame()) {
+ world.render(engine.getCamera());
+ engine.endFrame();
}
-
- reloadLoadedChunks(viewerObject);
}
- xeEngine.close();
+ engine.close();
Chunk::unload();
}
-void Minecraft::createGameObjects(xe::GameObject& viewer) {
- int width = 2*RENDER_DISTANCE+1;
- loadedChunks.clear();
- for(int32_t x = 0; x < width; x++) {
- for(int32_t z = 0; z < width; z++) {
- auto gameObject = xe::GameObject::createGameObject();
- gameObject.transform.translation = glm::vec3(0.f);
- loadedChunks.push_back(std::move(gameObject));
- }
- }
-}
-
-void Minecraft::reloadLoadedChunks(xe::GameObject& viewer) {
- viewX = static_cast<int>(floor(viewer.transform.translation.x / Chunk::CHUNK_SIZE.x));
- viewZ = static_cast<int>(floor(viewer.transform.translation.z / Chunk::CHUNK_SIZE.z));
- int width = 2*RENDER_DISTANCE+1;
- int minX = viewX - RENDER_DISTANCE;
- int minZ = viewZ - RENDER_DISTANCE;
- int maxX = viewX + RENDER_DISTANCE;
- int maxZ = viewZ + RENDER_DISTANCE;
- for(int32_t x = 0; x < width; x++) {
- for(int32_t z = 0; z < width; z++) {
- auto& gameObject = loadedChunks[x + z * width];
- int gridX = static_cast<int>(floor(gameObject.transform.translation.x / Chunk::CHUNK_SIZE.x));
- int gridZ = static_cast<int>(floor(gameObject.transform.translation.z / Chunk::CHUNK_SIZE.z));
- int newGridX = minX + x;
- int newGridZ = minZ + z;
- if(gridX < minX || gridZ < minZ || gridX > maxX || gridZ > maxZ)
- Chunk::deleteChunk(gridX, gridZ);
- Chunk* chunk = Chunk::getChunk(newGridX, newGridZ);
- if(chunk == nullptr) {
- chunk = Chunk::newChunk(newGridX, newGridZ, 12345);
- Chunk::generateAsync(chunk);
- }
- if(chunk->getMesh() == nullptr){
- Chunk::createMeshAsync(chunk);
- }
- gameObject.model = chunk->getMesh();
- gameObject.transform.translation = glm::vec3(newGridX * Chunk::CHUNK_SIZE.x, 0, newGridZ * Chunk::CHUNK_SIZE.z);
- }
- }
-}
-
} \ No newline at end of file