/* * Copyright (C) 2022,2024 Riyyi * * SPDX-License-Identifier: MIT */ #pragma once #include //std::shared_ptr #include // 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 { public: CameraSystem(s); virtual ~CameraSystem(); void update(); /** * @brief Return a pair from the camera component: { projection, view } */ std::pair projectionView(); void setRegistry(std::shared_ptr registry) { m_registry = registry; }; private: void updateOrthographic(TransformComponent& transform, CameraComponent& camera); void updatePerspective(TransformComponent& transform, CameraComponent& camera); std::shared_ptr m_registry; }; } // namespace Inferno