87 lines
2.1 KiB
C++
87 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#define CAMERA typeid(Camera).name()
|
|
|
|
#include "interfaces/IShader.hpp"
|
|
#include "Matrix4x4.hpp"
|
|
#include "Vector2.hpp"
|
|
#include "Vector3.hpp"
|
|
#include "interfaces/IRenderTarget.hpp"
|
|
#include "elements/BehaviourScript.hpp"
|
|
|
|
namespace TSE
|
|
{
|
|
enum ProjectionType
|
|
{
|
|
Orthographic = 1,
|
|
Perspective = 2,
|
|
};
|
|
|
|
class ICameraHelper
|
|
{
|
|
public:
|
|
inline virtual void OnRenderTargetChanged(float width, float height) {};
|
|
};
|
|
|
|
class Camera : public IResizeNotifiable, public BehaviourScript
|
|
{
|
|
private:
|
|
float RenderScale = 32;
|
|
IRenderTarget* rt = nullptr;
|
|
ProjectionType projection = ProjectionType::Orthographic;
|
|
Matrix4x4* projectionMatrix = nullptr;
|
|
Matrix4x4 viewMatrix;
|
|
|
|
float nearClippingPlane = 0;
|
|
float farClippingPlane = 100;
|
|
|
|
//perspective
|
|
float fov = 60;
|
|
|
|
Vector2 lastRtSize = {0, 0};
|
|
|
|
public:
|
|
static ICameraHelper* helper;
|
|
static Camera* mainCamera;
|
|
|
|
// Getter
|
|
float GetRenderScale() const;
|
|
ProjectionType GetProjection() const;
|
|
float GetNearClippingPlane() const;
|
|
float GetFarClippingPlane() const;
|
|
float GetFov() const;
|
|
|
|
// Setter
|
|
Vector3 SceenPositionToGamePosition(Vector2 screenPos);
|
|
void SetRenderScale(float v);
|
|
void SetProjection(ProjectionType v);
|
|
void SetNearClippingPlane(float v);
|
|
void SetFarClippingPlane(float v);
|
|
void SetFov(float v);
|
|
|
|
Camera();
|
|
~Camera();
|
|
void OnResize(float width, float height, IResizable* wnd) override;
|
|
void SetRenderTarget(IRenderTarget* target);
|
|
IRenderTarget* GetRenderTarget();
|
|
|
|
void RecalculateProjMatrix();
|
|
|
|
void OnUpdate() override;
|
|
void Start() override;
|
|
|
|
void PreDraw(IShader* shader);
|
|
|
|
void PostDraw();
|
|
|
|
void Bind();
|
|
void Unbind();
|
|
void UpdateRenderTarget();
|
|
|
|
inline const char* GetName() override
|
|
{
|
|
return "Camera";
|
|
}
|
|
};
|
|
} // namespace TSE
|