Antkeeper  0.0.1
commands.cpp
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 
26 #include <limits>
27 
28 namespace command {
29 
30 void translate(entity::registry& registry, entity::id eid, const math::fvec3& translation)
31 {
32  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
33  if (transform)
34  {
36  (
37  eid,
38  [&translation](auto& transform)
39  {
40  transform.local.translation += translation;
41  }
42  );
43  }
44 }
45 
47 {
48  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
49  if (transform)
50  {
52  (
53  eid,
54  [angle, &axis](auto& transform)
55  {
56  transform.local.rotation = math::normalize(math::angle_axis(angle, axis) * transform.local.rotation);
57  }
58  );
59  }
60 }
61 
63 {
64  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
65  if (transform)
66  {
68  (
69  eid,
70  [&position](auto& transform)
71  {
72  transform.local.translation = position;
73  }
74  );
75  }
76 }
77 
79 {
80  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
81  if (transform)
82  {
84  (
85  eid,
86  [&position](auto& transform)
87  {
88  transform.local.translation = position;
89  }
90  );
91  }
92 }
93 
95 {
96  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
97  if (transform)
98  {
100  (
101  eid,
102  [&scale](auto& transform)
103  {
104  transform.local.scale = scale;
105  }
106  );
107  }
108 }
109 
111 {
112  const ::transform_component* transform_component = registry.try_get<::transform_component>(eid);
114  {
116  (
117  eid,
118  [&other_transform = transform](auto& transform)
119  {
120  transform.local = other_transform;
121  }
122  );
123  }
124 }
125 
126 void place(entity::registry& registry, entity::id eid, entity::id celestial_body_id, double altitude, double latitude, double longitude)
127 {
128 
129 }
130 
131 void assign_render_layers(entity::registry& registry, entity::id eid, std::uint8_t layer_mask)
132 {
133  const ::scene_component* component = registry.try_get<::scene_component>(eid);
134  if (component)
135  {
137  (
138  eid,
139  [layer_mask](auto& component)
140  {
141  component.layer_mask = layer_mask;
142  }
143  );
144  }
145 }
146 
148 {
149  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
150  if (transform)
151  {
152  return transform->local;
153  }
154 
156 }
157 
159 {
160  const ::transform_component* transform = registry.try_get<::transform_component>(eid);
161  if (transform)
162  {
163  return transform->world;
164  }
165 
167 }
168 
169 } // namespace command
170 
Commands which operate on entity::id components.
Definition: commands.cpp:28
void translate(entity::registry &registry, entity::id eid, const math::fvec3 &translation)
Definition: commands.cpp:30
math::transform< float > get_world_transform(entity::registry &registry, entity::id eid)
Definition: commands.cpp:158
void set_transform(entity::registry &registry, entity::id eid, const math::transform< float > &transform)
Definition: commands.cpp:110
void warp_to(entity::registry &registry, entity::id eid, const math::fvec3 &position)
Definition: commands.cpp:78
void place(entity::registry &registry, entity::id eid, entity::id celestial_body_id, double altitude, double latitude, double longitude)
Definition: commands.cpp:126
void move_to(entity::registry &registry, entity::id eid, const math::fvec3 &position)
Definition: commands.cpp:62
void assign_render_layers(entity::registry &registry, entity::id eid, std::uint8_t layer_mask)
Definition: commands.cpp:131
void set_scale(entity::registry &registry, entity::id eid, const math::fvec3 &scale)
Definition: commands.cpp:94
math::transform< float > get_local_transform(entity::registry &registry, entity::id eid)
Definition: commands.cpp:147
void rotate(entity::registry &registry, entity::id eid, float angle, const math::fvec3 &axis)
Definition: commands.cpp:46
entt::registry registry
Component registry type.
Definition: registry.hpp:28
entt::entity id
Entity ID type.
Definition: id.hpp:28
T angle(const vector< T, N > &from, const vector< T, N > &to)
Calculates the angle between two direction vectors.
Definition: vector.hpp:1030
quaternion< T > normalize(const quaternion< T > &q)
Normalizes a quaternion.
Definition: quaternion.hpp:679
quaternion< T > angle_axis(T angle, const vec3< T > &axis)
Creates a rotation from an angle and axis.
Definition: quaternion.hpp:685
constexpr mat4< T > scale(const vec3< T > &v)
Constructs a scale matrix.
static constexpr transform identity() noexcept
Returns an identity transform.
Definition: transform.hpp:107
n-dimensional vector.
Definition: vector.hpp:44
math::transform< float > world
math::transform< float > local