Antkeeper  0.0.1
spring-arm-component.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef ANTKEEPER_GAME_SPRING_ARM_COMPONENT_HPP
21 #define ANTKEEPER_GAME_SPRING_ARM_COMPONENT_HPP
22 
23 #include <engine/entity/id.hpp>
24 #include <engine/math/vector.hpp>
26 #include <engine/math/angles.hpp>
28 
33 {
35  entity::id parent_eid{entt::null};
36 
39 
42 
45 
48 
50  math::dvec3 min_angles{-math::half_pi<double>, -std::numeric_limits<double>::infinity(), -std::numeric_limits<double>::infinity()};
51 
53  math::dvec3 max_angles{math::half_pi<double>, std::numeric_limits<double>::infinity(), std::numeric_limits<double>::infinity()};
54 
56 
59 
61  // physics::numeric_spring<double, double> arm_length_spring;
62 
63 
64 
65 
67  double far_focal_plane_height{50.0};
68 
70  double near_hfov{math::radians(90.0)};
71 
73  double far_hfov{math::radians(45.0)};
74 
76  double zoom{};
77 
79  double hfov{};
80 
82  double vfov{};
83 
86 
88  double focal_distance{};
89 
92 
95 };
96 
97 #endif // ANTKEEPER_GAME_SPRING_ARM_COMPONENT_HPP
Numeric spring.
Definition: spring.hpp:61
entt::entity id
Entity ID type.
Definition: id.hpp:28
constexpr T radians(T degrees) noexcept
Converts an angle given in degrees to radians.
Definition: angles.hpp:48
Quaternion composed of a real scalar part and imaginary vector part.
Definition: quaternion.hpp:39
static constexpr quaternion identity() noexcept
Returns a rotation identity quaternion.
Definition: quaternion.hpp:200
n-dimensional vector.
Definition: vector.hpp:44
Attaches a camera to an entity using springs.
double near_hfov
Horizontal FoV at maximum zoom.
double far_hfov
Horizontal FoV at minimum zoom.
double focal_plane_height
Height of the view frustum at the focal distance.
math::dquat camera_rotation
Attached camera rotation.
double hfov
Horizontal FoV of the camera, in radians.
physics::numeric_spring< math::dvec3, double > focal_point_spring
double focal_distance
Distance to the focal plane.
double zoom
Zoom factor, on [0, 1].
math::dvec3 min_angles
Minimum pitch, yaw, and roll angles, in radians.
double far_focal_plane_height
Arm length spring.
double focal_plane_width
Width of the view frustum at the focal distance.
math::dvec3 max_angles
Maximum pitch, yaw, and roll angles, in radians.
math::dquat up_rotation
Local up rotation quaternion.
double vfov
Vertical FoV of the camera, in radians.
physics::numeric_spring< math::dvec3, double > angles_spring
Pitch, yaw, and roll angles spring.
math::dvec3 angular_velocities
Pitch, yaw, and roll velocities, in radians per second.
entity::id parent_eid
ID of the entity to which the spring arm is attached.
math::dvec3 focal_point_offset
Position of the focal point, relative to the subject.
double near_focal_plane_height
Height of the view frustum at the near clipping distance.