]> git.localhorst.tv Git - blank.git/blob - src/hud.cpp
c43d7849fb3083acb73d44dc52ef4e2265e61483
[blank.git] / src / hud.cpp
1 #include "hud.hpp"
2
3 #include "init.hpp"
4 #include "shape.hpp"
5
6 #include <glm/gtc/matrix_transform.hpp>
7
8
9 namespace blank {
10
11 HUD::HUD()
12 : block()
13 , block_buf()
14 , block_transform(1.0f)
15 , block_visible(false)
16 , crosshair()
17 , crosshair_transform(1.0f)
18 , near(100.0f)
19 , far(-100.0f)
20 , projection(glm::ortho(0.0f, 1.0f, 1.0f, 0.0f, near, far))
21 , view(glm::translate(glm::mat4(1.0f), glm::vec3(-0.5f, -0.5f, 0))) {
22         block_transform = glm::translate(block_transform, glm::vec3(50.0f, 50.0f, 0.0f));
23         block_transform = glm::scale(block_transform, glm::vec3(50.0f));
24         block_transform = glm::rotate(block_transform, 3.5f, glm::vec3(1.0f, 0.0f, 0.0f));
25         block_transform = glm::rotate(block_transform, 0.85f, glm::vec3(0.0f, 1.0f, 0.0f));
26
27         crosshair.vertices = std::vector<glm::vec3>({
28                 { -10.0f,   0.0f, 0.0f }, { 10.0f,  0.0f, 0.0f },
29                 {   0.0f, -10.0f, 0.0f }, {  0.0f, 10.0f, 0.0f },
30         });
31         crosshair.indices = std::vector<OutlineModel::Index>({
32                 0, 1, 2, 3
33         });
34         crosshair.colors.resize(4, { 10.0f, 10.0f, 10.0f });
35         crosshair.Invalidate();
36 }
37
38
39 void HUD::Viewport(float width, float height) {
40         Viewport(0, 0, width, height);
41 }
42
43 void HUD::Viewport(float x, float y, float width, float height) {
44         projection = glm::ortho(x, width, height, y, near, far);
45         crosshair_transform = glm::translate(glm::mat4(1.0f), glm::vec3(width * 0.5f, height * 0.5f, 0.0f));
46 }
47
48
49 void HUD::Display(const BlockType &type) {
50         block_buf.Clear();
51         type.FillModel(block_buf);
52         block.Update(block_buf);
53         block_visible = type.visible;
54 }
55
56
57 void HUD::Render(DirectionalLighting &program) {
58         if (block_visible) {
59                 program.SetLightDirection({ 1.0f, 3.0f, 5.0f });
60                 GLContext::ClearDepthBuffer();
61                 program.SetMVP(block_transform, view, projection);
62                 block.Draw();
63                 program.SetM(crosshair_transform);
64                 crosshair.Draw();
65         }
66 }
67
68 }