You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.0 KiB
45 lines
1.0 KiB
/* |
|
* Copyright (C) 2022,2024 Riyyi |
|
* |
|
* SPDX-License-Identifier: MIT |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include <memory> //std::shared_ptr |
|
#include <utility> // std::pair |
|
|
|
#include "entt/entity/registry.hpp" // entt::entity, entt::registry |
|
#include "glm/ext/matrix_float4x4.hpp" // glm::mat4 |
|
#include "ruc/singleton.h" |
|
|
|
#define NEAR_PLANE 0.1f |
|
#define FAR_PLANE 100.0f |
|
|
|
namespace Inferno { |
|
|
|
struct TransformComponent; |
|
struct CameraComponent; |
|
|
|
class CameraSystem final : public ruc::Singleton<CameraSystem> { |
|
public: |
|
CameraSystem(s); |
|
virtual ~CameraSystem(); |
|
|
|
void update(); |
|
|
|
/** |
|
* @brief Return a pair from the camera component: { projection, view } |
|
*/ |
|
std::pair<glm::mat4, glm::mat4> projectionView(); |
|
|
|
void setRegistry(std::shared_ptr<entt::registry> registry) { m_registry = registry; }; |
|
|
|
private: |
|
void updateOrthographic(TransformComponent& transform, CameraComponent& camera); |
|
void updatePerspective(TransformComponent& transform, CameraComponent& camera); |
|
|
|
std::shared_ptr<entt::registry> m_registry; |
|
}; |
|
|
|
} // namespace Inferno
|
|
|