]> git.tdb.fi Git - libs/game.git/blob - source/game/transform.cpp
Add setters for the individual parts of Transform
[libs/game.git] / source / game / transform.cpp
1 #include "transform.h"
2 #include <msp/geometry/affinetransform.h>
3
4 namespace Msp::Game {
5
6 Transform::Transform(Handle<Entity> e):
7         Component(e)
8 { }
9
10 void Transform::set_values(const TransformValues &v)
11 {
12         values = v;
13 }
14
15 void Transform::set_position(const LinAl::Vector<float, 3> &p)
16 {
17         values.position = p;
18 }
19
20 void Transform::set_rotation(const Geometry::Quaternion<float> &r)
21 {
22         values.rotation = normalize(r);
23 }
24
25 void Transform::set_scale(const LinAl::Vector<float, 3> &s)
26 {
27         values.scale = s;
28 }
29
30 void Transform::update_world_matrix(const Transform *parent)
31 {
32         using Affine = Geometry::AffineTransform<float, 3>;
33
34         local_matrix = Affine::translation(values.position)*
35                 Affine::rotation(values.rotation)*Affine::scaling(values.scale);
36         if(parent)
37                 world_matrix = parent->get_world_matrix()*local_matrix;
38         else
39                 world_matrix = local_matrix;
40 }
41
42 } // namespace Msp::Game