]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/transform.h
Initialize Transform's matrices to identity
[libs/game.git] / source / game / transform.h
index d6984993653d78f78c4d67f6ad31bbbc0dc5e359..b1766aeb993292d576acb3abf23e7be9ec68fcee 100644 (file)
@@ -13,19 +13,29 @@ struct TransformValues
        LinAl::Vector<float, 3> position;
        Geometry::Quaternion<float> rotation = Geometry::Quaternion<float>::one();
        LinAl::Vector<float, 3> scale = { 1.0f, 1.0f, 1.0f };
+
+       TransformValues() = default;
+       TransformValues(const LinAl::Vector<float, 3> &p): position(p) { }
+       TransformValues(const LinAl::Vector<float, 3> &p, const Geometry::Quaternion<float> &r,
+               const LinAl::Vector<float, 3> &s = LinAl::Vector<float, 3>(1.0f, 1.0f, 1.0f)):
+               position(p), rotation(r), scale(s)
+       { }
 };
 
 class Transform: public Component
 {
 private:
        TransformValues values;
-       LinAl::Matrix<float, 4, 4> local_matrix;
-       LinAl::Matrix<float, 4, 4> world_matrix;
+       LinAl::Matrix<float, 4, 4> local_matrix = LinAl::Matrix<float, 4, 4>::identity();
+       LinAl::Matrix<float, 4, 4> world_matrix = LinAl::Matrix<float, 4, 4>::identity();
 
 public:
        Transform(Handle<Entity>);
 
        void set_values(const TransformValues &);
+       void set_position(const LinAl::Vector<float, 3> &);
+       void set_rotation(const Geometry::Quaternion<float> &);
+       void set_scale(const LinAl::Vector<float, 3> &);
        const TransformValues &get_values() const { return values; }
        const LinAl::Vector<float, 3> &get_position() const { return values.position; }
        const Geometry::Quaternion<float> &get_rotation() const { return values.rotation; }