--- /dev/null
+#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