X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fhud.cpp;h=0f496c6d7ce074f59a4dd224043ba9f38c2af3c3;hb=e53a0e2e711a7d8bd9b0ddacd1360aa14370643f;hp=c43d7849fb3083acb73d44dc52ef4e2265e61483;hpb=f932e8c0273794bcd954c9f5b504bad6140f7cf4;p=blank.git diff --git a/src/hud.cpp b/src/hud.cpp index c43d784..0f496c6 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -1,6 +1,8 @@ #include "hud.hpp" +#include "block.hpp" #include "init.hpp" +#include "shader.hpp" #include "shape.hpp" #include @@ -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({ { -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();