X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2Fviewport.cpp;h=cb446191ab8b0458769c21e0bd21916528af3fe4;hb=f6e33d9f79ff6a47c3efa3c9fb1206cc1d27ecde;hp=f9558d036865de4e3b388e5e22a96b1d1a8536d8;hpb=75172fd735e34082c34b47ae7c194445b53038d9;p=blank.git diff --git a/src/graphics/viewport.cpp b/src/graphics/viewport.cpp index f9558d0..cb44619 100644 --- a/src/graphics/viewport.cpp +++ b/src/graphics/viewport.cpp @@ -4,7 +4,7 @@ #include "Viewport.hpp" #include "../app/init.hpp" -#include "../model/geometry.hpp" +#include "../geometry/const.hpp" #include #include @@ -94,6 +94,7 @@ Viewport::Viewport() : cam() , canv() , cursor(1.0f) +, cam_offset(0.0f) , chunk_prog() , entity_prog() , sky_prog() @@ -102,7 +103,7 @@ Viewport::Viewport() glClearColor(0.0, 0.0, 0.0, 1.0); } -void Viewport::VSync(bool b) noexcept { +void Viewport::VSync(bool b) { if (SDL_GL_SetSwapInterval(b) != 0) { throw SDLError("SDL_GL_SetSwapInterval"); } @@ -165,20 +166,24 @@ void Viewport::ClearDepth() noexcept { } -void Viewport::SetCursor(const glm::vec3 &pos) { +glm::vec2 Viewport::GetPosition(const glm::vec2 &off, Gravity grav) const noexcept { + return align(grav, canv.Size(), off + canv.Offset()); +} + +void Viewport::SetCursor(const glm::vec3 &pos) noexcept { cursor[3].x = pos.x; cursor[3].y = pos.y; cursor[3].z = pos.z; } -void Viewport::SetCursor(const glm::vec3 &pos, Gravity grav) { - glm::vec2 p(align(grav, canv.Size(), glm::vec2(pos) + canv.Offset())); +void Viewport::SetCursor(const glm::vec3 &pos, Gravity grav) noexcept { + glm::vec2 p(GetPosition(glm::vec2(pos), grav)); cursor[3].x = p.x; cursor[3].y = p.y; cursor[3].z = pos.z; } -void Viewport::MoveCursor(const glm::vec3 &d) { +void Viewport::MoveCursor(const glm::vec3 &d) noexcept { cursor[3].x += d.x; cursor[3].y += d.y; cursor[3].z += d.z; @@ -259,9 +264,7 @@ BlendedSprite &Viewport::SpriteProgram() noexcept { void Viewport::WorldPosition(const glm::mat4 &t) noexcept { - const glm::vec3 offset(0.0f, 0.0f, 0.0f); - //const glm::vec3 offset(0.0f, 0.0f, -5.0f); - cam.View(glm::translate(glm::inverse(t), glm::vec3(t * glm::vec4(offset, 0.0f)))); + cam.View(glm::translate(glm::inverse(t), glm::vec3(t * glm::vec4(cam_offset, 0.0f)))); ChunkProgram().SetView(cam.View()); sky_prog.Activate(); SkyBoxProgram().SetView(cam.View());