diff options
-rw-r--r-- | src/GameState.cpp | 1 | ||||
-rw-r--r-- | src/GameState.hpp | 1 | ||||
-rw-r--r-- | src/RendererWorld.cpp | 22 |
3 files changed, 24 insertions, 0 deletions
diff --git a/src/GameState.cpp b/src/GameState.cpp index 180db98..28e8007 100644 --- a/src/GameState.cpp +++ b/src/GameState.cpp @@ -39,6 +39,7 @@ void GameState::Update(float deltaTime) { RaycastResult raycast = world.Raycast(player->pos + player->EyeOffset, direction); selectedBlock = raycast.isHit ? raycast.hitBlock : Vector(0,0,0); distanceToSelectedBlock = raycast.isHit ? (player->pos - raycast.hitPos).GetLength() : 0.0f; + raycastHit = raycast.hitPos; } } diff --git a/src/GameState.hpp b/src/GameState.hpp index 5d3d36a..fac9923 100644 --- a/src/GameState.hpp +++ b/src/GameState.hpp @@ -63,4 +63,5 @@ public: Vector selectedBlock; float distanceToSelectedBlock; + VectorF raycastHit; }; diff --git a/src/RendererWorld.cpp b/src/RendererWorld.cpp index 895661f..8390de7 100644 --- a/src/RendererWorld.cpp +++ b/src/RendererWorld.cpp @@ -268,6 +268,28 @@ void RendererWorld::Render(RenderState & renderState) { glCheckError(); } + //Render raycast hit + bool renderHit = false; + if (renderHit) { + VectorF hit = gs->raycastHit; + glLineWidth(2.0f); + { + glm::mat4 model; + model = glm::translate(model, hit.glm()); + model = glm::scale(model,glm::vec3(0.3f,0.3f,0.3f)); + glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); + if (selectedBlock == Vector()) + glUniform3f(colorLoc,0.7,0.0,0.0); + else + glUniform3f(colorLoc, 0.0, 0.0, 0.7); + glCheckError(); + glDrawArrays(GL_LINE_STRIP, 0, 36); + } + glLineWidth(1.0f); + glCheckError(); + } + + //Render sections renderState.SetActiveShader(blockShader->Program); projectionLoc = glGetUniformLocation(blockShader->Program, "projection"); |