]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/transform.cpp
Add a transform component and propagation system
[libs/game.git] / source / game / transform.cpp
diff --git a/source/game/transform.cpp b/source/game/transform.cpp
new file mode 100644 (file)
index 0000000..6af24c0
--- /dev/null
@@ -0,0 +1,27 @@
+#include "transform.h"
+#include <msp/geometry/affinetransform.h>
+
+namespace Msp::Game {
+
+Transform::Transform(Handle<Entity> e):
+       Component(e)
+{ }
+
+void Transform::set_values(const TransformValues &v)
+{
+       values = v;
+}
+
+void Transform::update_world_matrix(const Transform *parent)
+{
+       using Affine = Geometry::AffineTransform<float, 3>;
+
+       local_matrix = Affine::translation(values.position)*
+               Affine::rotation(values.rotation)*Affine::scaling(values.scale);
+       if(parent)
+               world_matrix = parent->get_world_matrix()*local_matrix;
+       else
+               world_matrix = local_matrix;
+}
+
+} // namespace Msp::Game