diff --git a/ChangeLog.md b/ChangeLog.md index db55478ac..b5c69575d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -315,6 +315,7 @@ Nazara Development Kit: - ⚠ ConstraintComponent2D has been reworked to handle entity destruction and remove constraints at will - Fixed crash when pressing up/down key with no history in the console - (Rich)TextAreaWidget text style is now alterable +- Added CameraComponent::SetProjectionScale # 0.4: diff --git a/SDK/include/NDK/Components/CameraComponent.hpp b/SDK/include/NDK/Components/CameraComponent.hpp index 92fab2e0e..cf835704a 100644 --- a/SDK/include/NDK/Components/CameraComponent.hpp +++ b/SDK/include/NDK/Components/CameraComponent.hpp @@ -43,6 +43,7 @@ namespace Ndk const Nz::Frustumf& GetFrustum() const override; inline unsigned int GetLayer() const; const Nz::Matrix4f& GetProjectionMatrix() const override; + inline const Nz::Vector3f& GetProjectionScale() const; Nz::ProjectionType GetProjectionType() const override; inline const Nz::Vector2f& GetSize() const; const Nz::RenderTarget* GetTarget() const override; @@ -54,6 +55,7 @@ namespace Ndk inline void SetFOV(float fov); void SetLayer(unsigned int layer); + inline void SetProjectionScale(const Nz::Vector3f& scale); inline void SetProjectionType(Nz::ProjectionType projection); inline void SetSize(const Nz::Vector2f& size); inline void SetSize(float width, float height); @@ -99,6 +101,7 @@ namespace Ndk mutable Nz::Recti m_viewport; const Nz::RenderTarget* m_target; Nz::Vector2f m_size; + Nz::Vector3f m_projectionScale; mutable bool m_frustumUpdated; mutable bool m_projectionMatrixUpdated; mutable bool m_viewMatrixUpdated; diff --git a/SDK/include/NDK/Components/CameraComponent.inl b/SDK/include/NDK/Components/CameraComponent.inl index df6d5a2b3..c8b9226f2 100644 --- a/SDK/include/NDK/Components/CameraComponent.inl +++ b/SDK/include/NDK/Components/CameraComponent.inl @@ -17,6 +17,7 @@ namespace Ndk m_targetRegion(0.f, 0.f, 1.f, 1.f), m_target(nullptr), m_size(0.f), + m_projectionScale(1.f, 1.f, 1.f), m_frustumUpdated(false), m_projectionMatrixUpdated(false), m_viewMatrixUpdated(false), @@ -43,6 +44,7 @@ namespace Ndk m_targetRegion(camera.m_targetRegion), m_target(nullptr), m_size(camera.m_size), + m_projectionScale(camera.m_projectionScale), m_frustumUpdated(false), m_projectionMatrixUpdated(false), m_viewMatrixUpdated(false), @@ -115,11 +117,19 @@ namespace Ndk return m_layer; } + /*! + * \brief Gets the projection scale of the camera + * \return Projection scale + */ + const Nz::Vector3f& CameraComponent::GetProjectionScale() const + { + return m_projectionScale; + } + /*! * \brief Gets the size of the camera * \return Size of the camera */ - inline const Nz::Vector2f & CameraComponent::GetSize() const { return m_size; diff --git a/SDK/src/NDK/Components/CameraComponent.cpp b/SDK/src/NDK/Components/CameraComponent.cpp index a688a0ca5..31dde3ae2 100644 --- a/SDK/src/NDK/Components/CameraComponent.cpp +++ b/SDK/src/NDK/Components/CameraComponent.cpp @@ -154,11 +154,10 @@ namespace Ndk } /*! - * \brief Sets the layer of the camera in case of multiples fields + * \brief Sets the layer of the camera in case of multiples layers * * \param layer Layer of the camera */ - void CameraComponent::SetLayer(unsigned int layer) { m_layer = layer; @@ -166,10 +165,21 @@ namespace Ndk m_entity->Invalidate(); // Invalidate the entity to make it passes through RenderSystem validation } + /*! + * \brief Sets the camera projection scale + * + * \param scale New projection scale + */ + inline void CameraComponent::SetProjectionScale(const Nz::Vector3f& scale) + { + m_projectionScale = scale; + + InvalidateProjectionMatrix(); + } + /*! * \brief Operation to perform when component is attached to an entity */ - void CameraComponent::OnAttached() { if (m_entity->HasComponent()) @@ -304,6 +314,8 @@ namespace Ndk break; } + m_projectionMatrix *= Nz::Matrix4f::Scale(m_projectionScale); + m_projectionMatrixUpdated = true; }