X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2Fui.cpp;h=ee26989a80187c5600dfaab2be12cff71873eeed;hb=1bc6f085c53cdeaa08e2c00e821d4e2e25cae1c8;hp=88190e643d57b05f6bf9dba6e9db9b617ea8bfdd;hpb=37a1465a83e4ac4363ed0d8e0fa1ce5055dd2db4;p=blank.git diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index 88190e6..ee26989 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -4,9 +4,8 @@ #include "../app/Assets.hpp" #include "../app/FrameCounter.hpp" #include "../app/init.hpp" -#include "../graphics/BlendedSprite.hpp" -#include "../graphics/DirectionalLighting.hpp" #include "../graphics/Font.hpp" +#include "../graphics/Viewport.hpp" #include "../model/shapes.hpp" #include "../world/World.hpp" @@ -29,14 +28,8 @@ HUD::HUD(const BlockTypeRegistry &types, const Font &font) , block_label() , label_sprite() , label_transform(1.0f) -, label_color{0xFF, 0xFF, 0xFF, 0xFF} , block_visible(false) -, crosshair() -, crosshair_transform(1.0f) -, near(100.0f) -, far(-100.0f) -, projection(glm::ortho(0.0f, 1.0f, 1.0f, 0.0f, near, far)) -, view(1.0f) { +, crosshair() { 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)); @@ -54,16 +47,6 @@ HUD::HUD(const BlockTypeRegistry &types, const Font &font) } -void HUD::Viewport(float width, float height) noexcept { - Viewport(0, 0, width, 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::vec3(width * 0.5f, height * 0.5f, 0.0f)); -} - - void HUD::Display(const Block &b) { const BlockType &type = types.Get(b.type); @@ -71,7 +54,7 @@ void HUD::Display(const Block &b) { type.FillModel(block_buf, b.Transform()); block.Update(block_buf); - font.Render(type.label.c_str(), label_color, block_label); + font.Render(type.label.c_str(), block_label); glm::vec2 size(font.TextSize(type.label.c_str())); label_sprite.LoadRect(size.x, size.y); label_transform = glm::translate(glm::vec3( @@ -84,25 +67,28 @@ void HUD::Display(const Block &b) { } -void HUD::Render(DirectionalLighting &world_prog, BlendedSprite &sprite_prog) noexcept { - world_prog.Activate(); +void HUD::Render(Viewport &viewport) noexcept { + viewport.ClearDepth(); + + DirectionalLighting &world_prog = viewport.HUDProgram(); world_prog.SetLightDirection({ 1.0f, 3.0f, 5.0f }); // disable distance fog world_prog.SetFogDensity(0.0f); - GLContext::ClearDepthBuffer(); - GLContext::EnableInvertBlending(); - world_prog.SetMVP(crosshair_transform, view, projection); + viewport.EnableInvertBlending(); + world_prog.SetM(viewport.CenterTransform()); crosshair.Draw(); if (block_visible) { - GLContext::DisableBlending(); + viewport.DisableBlending(); world_prog.SetM(block_transform); block.Draw(); - sprite_prog.Activate(); - sprite_prog.SetMVP(label_transform, view, projection); + BlendedSprite &sprite_prog = viewport.SpriteProgram(); + sprite_prog.SetM(label_transform); sprite_prog.SetTexture(block_label); + sprite_prog.SetFG(glm::vec4(1.0f)); + sprite_prog.SetBG(glm::vec4(0.5f)); label_sprite.Draw(); } } @@ -128,7 +114,7 @@ Interface::Interface( , counter_tex() , counter_sprite() , counter_transform(1.0f) -, counter_color{0xFF, 0xFF, 0xFF, 0xFF} +, counter_x(935.0f) , config(config) , place_timer(256) , remove_timer(256) @@ -136,7 +122,6 @@ Interface::Interface( , selection(1) , fwd(0) , rev(0) { - hud.Viewport(960, 600); hud.Display(selection); } @@ -310,11 +295,11 @@ void Interface::UpdateCounter() { std::stringstream s; s << std::setprecision(3) << counter.AvgRunning() << "ms"; std::string text = s.str(); - font.Render(text.c_str(), counter_color, counter_tex); + font.Render(text.c_str(), counter_tex); glm::vec2 size(font.TextSize(text.c_str())); counter_sprite.LoadRect(size.x, size.y); counter_transform = glm::translate(glm::vec3( - 400.0f - size.x, + counter_x - size.x, 25.0f, 0.75f )); @@ -402,10 +387,9 @@ void Interface::SelectPrevious() { hud.Display(selection); } -void Interface::Handle(const SDL_WindowEvent &event) noexcept { - if (event.event == SDL_WINDOWEVENT_RESIZED) { - hud.Viewport(event.data1, event.data2); - } + +void Interface::Resize(const Viewport &viewport) { + counter_x = viewport.Width() - 25.0f; } @@ -448,23 +432,23 @@ void Interface::CheckAim() { } -void Interface::Render(DirectionalLighting &world_prog, BlendedSprite &sprite_prog) noexcept { +void Interface::Render(Viewport &viewport) noexcept { if (config.visual_disabled) return; if (aim_chunk) { - world_prog.Activate(); + DirectionalLighting &world_prog = viewport.EntityProgram(); world_prog.SetM(outline_transform); outline.Draw(); } if (show_counter) { - sprite_prog.Activate(); + BlendedSprite &sprite_prog = viewport.SpriteProgram(); sprite_prog.SetM(counter_transform); sprite_prog.SetTexture(counter_tex); counter_sprite.Draw(); } - hud.Render(world_prog, sprite_prog); + hud.Render(viewport); } }