diff options
Diffstat (limited to 'src/minecraft.cpp')
-rwxr-xr-x | src/minecraft.cpp | 74 |
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 |