]> git.localhorst.tv Git - blank.git/blobdiff - src/hud.cpp
minor optimizations in chunk
[blank.git] / src / hud.cpp
index c43d7849fb3083acb73d44dc52ef4e2265e61483..0f496c6d7ce074f59a4dd224043ba9f38c2af3c3 100644 (file)
@@ -1,6 +1,8 @@
 #include "hud.hpp"
 
+#include "block.hpp"
 #include "init.hpp"
+#include "shader.hpp"
 #include "shape.hpp"
 
 #include <glm/gtc/matrix_transform.hpp>
@@ -8,8 +10,9 @@
 
 namespace blank {
 
-HUD::HUD()
-: block()
+HUD::HUD(const BlockTypeRegistry &types)
+: types(types)
+, block()
 , block_buf()
 , block_transform(1.0f)
 , block_visible(false)
@@ -22,7 +25,7 @@ HUD::HUD()
        block_transform = glm::translate(block_transform, glm::vec3(50.0f, 50.0f, 0.0f));
        block_transform = glm::scale(block_transform, glm::vec3(50.0f));
        block_transform = glm::rotate(block_transform, 3.5f, glm::vec3(1.0f, 0.0f, 0.0f));
-       block_transform = glm::rotate(block_transform, 0.85f, glm::vec3(0.0f, 1.0f, 0.0f));
+       block_transform = glm::rotate(block_transform, 0.35f, glm::vec3(0.0f, 1.0f, 0.0f));
 
        crosshair.vertices = std::vector<glm::vec3>({
                { -10.0f,   0.0f, 0.0f }, { 10.0f,  0.0f, 0.0f },
@@ -36,27 +39,31 @@ HUD::HUD()
 }
 
 
-void HUD::Viewport(float width, float height) {
+void HUD::Viewport(float width, float height) noexcept {
        Viewport(0, 0, width, height);
 }
 
-void HUD::Viewport(float x, float y, float width, float height) {
+void HUD::Viewport(float x, float y, float width, float height) noexcept {
        projection = glm::ortho(x, width, height, y, near, far);
        crosshair_transform = glm::translate(glm::mat4(1.0f), glm::vec3(width * 0.5f, height * 0.5f, 0.0f));
 }
 
 
-void HUD::Display(const BlockType &type) {
+void HUD::Display(const Block &b) {
+       const BlockType &type = types.Get(b.type);
+
        block_buf.Clear();
-       type.FillModel(block_buf);
+       type.FillModel(block_buf, b.Transform());
        block.Update(block_buf);
        block_visible = type.visible;
 }
 
 
-void HUD::Render(DirectionalLighting &program) {
+void HUD::Render(DirectionalLighting &program) noexcept {
        if (block_visible) {
                program.SetLightDirection({ 1.0f, 3.0f, 5.0f });
+               // disable distance fog
+               program.SetFogDensity(0.0f);
                GLContext::ClearDepthBuffer();
                program.SetMVP(block_transform, view, projection);
                block.Draw();