diff --git a/include/td/render/Camera.h b/include/td/render/Camera.h index a0d386b..a2689d7 100644 --- a/include/td/render/Camera.h +++ b/include/td/render/Camera.h @@ -35,6 +35,7 @@ class Camera { void UpdatePerspective(float a_AspectRatio); void SetCamPos(const Vec3f& a_NewPos); + const Vec3f& GetCamPos() const; }; } // namespace render diff --git a/include/td/render/renderer/WorldRenderer.h b/include/td/render/renderer/WorldRenderer.h index df409e5..8848eb2 100644 --- a/include/td/render/renderer/WorldRenderer.h +++ b/include/td/render/renderer/WorldRenderer.h @@ -17,6 +17,9 @@ class WorldRenderer : public Renderer { virtual ~WorldRenderer(); virtual void Render(float a_Lerp) override; + + private: + void UpdateControls(); }; } // namespace render diff --git a/src/td/render/Camera.cpp b/src/td/render/Camera.cpp index 260a467..49b2a42 100644 --- a/src/td/render/Camera.cpp +++ b/src/td/render/Camera.cpp @@ -1,3 +1,4 @@ +#include "td/Maths.h" #include #include @@ -24,5 +25,9 @@ void Camera::SetCamPos(const Vec3f& a_NewPos) { OnViewChange(); } +const Vec3f& Camera::GetCamPos() const { + return m_CamPos; +} + } // namespace render } // namespace td diff --git a/src/td/render/renderer/WorldRenderer.cpp b/src/td/render/renderer/WorldRenderer.cpp index 2769ea7..df57f0c 100644 --- a/src/td/render/renderer/WorldRenderer.cpp +++ b/src/td/render/renderer/WorldRenderer.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -13,7 +14,17 @@ WorldRenderer::WorldRenderer(Camera& a_Camera, const game::WorldPtr& a_World) : WorldRenderer::~WorldRenderer() {} +void WorldRenderer::UpdateControls() { + if (ImGui::IsMouseDown(ImGuiMouseButton_Left)) { + constexpr float sensitivity = 1.0f; + float delta = ImGui::GetIO().DeltaTime; + auto mouseDelta = ImGui::GetIO().MouseDelta; + m_Camera.SetCamPos(m_Camera.GetCamPos() + Vec3f{-mouseDelta.x * delta * sensitivity, 0, -mouseDelta.y * delta * sensitivity}); + } +} + void WorldRenderer::Render(float a_Lerp) { + UpdateControls(); m_Shader->Start(); Renderer::Render(*m_WorldVao); }