summaryrefslogtreecommitdiff
path: root/src/world.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/world.cpp')
-rw-r--r--src/world.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/world.cpp b/src/world.cpp
index 485615d..d11e4bc 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -6,7 +6,7 @@ World::World(xe::GameObject& viewer, int renderDistance, int worldSeed)
: viewer{viewer},
renderDistance{renderDistance},
worldSeed{worldSeed},
- chunkRenderer{Chunk::getTextures()} {
+ skinnedRenderer{Chunk::getTextures()} {
reloadChunks(renderDistance);
}
@@ -92,7 +92,26 @@ void World::updateChunkMeshs() {
void World::render(xe::Camera& camera) {
camera.setViewYXZ(viewer.transform.translation, viewer.transform.rotation);
- chunkRenderer.render(loadedChunks, camera);
+ // World::Ray ray = raycast(7, 100);
+ skinnedRenderer.render(loadedChunks, camera);
+}
+
+World::Ray World::raycast(float distance, int steps) {
+
+ glm::vec3 position = glm::vec3(viewer.transform.translation);
+
+ float pitch = viewer.transform.rotation.x;
+ float yaw = viewer.transform.rotation.y;
+ float clamp = 1-fabs(sin(-pitch));
+ const glm::vec3 step = glm::normalize(glm::vec3(sin(yaw)*clamp, sin(-pitch), cos(yaw)*clamp)) * (distance/steps);
+
+ for(int i = 0; i < steps; i++) {
+ position += step;
+ int hit = Chunk::getGlobalBlock(position.x, position.y, position.z);
+ if(hit == AIR) continue;
+ return World::Ray{position, hit};
+ }
+ return World::Ray{position, INVALID};
}
} \ No newline at end of file