]> git.tdb.fi Git - libs/gl.git/blobdiff - source/keyframe.cpp
Keep track of which components have been set in Transform
[libs/gl.git] / source / keyframe.cpp
index dd4adf16611efb7c2c05312d0428d949de7c6df5..856b85d6c20a15503d1a386458f8e393d0ff7409 100644 (file)
@@ -14,9 +14,20 @@ KeyFrame::KeyFrame()
 KeyFrame::~KeyFrame()
 { }
 
+void KeyFrame::set_transform(const Transform &t)
+{
+       transform = t;
+}
+
 void KeyFrame::set_matrix(const Matrix &m)
 {
-       matrix = m;
+       transform = Transform::from_matrix(m);
+}
+
+void KeyFrame::set_uniform(const string &n, const AnimatedUniform &u)
+{
+       uniforms.erase(n);
+       uniforms.insert(UniformMap::value_type(n, u));
 }
 
 void KeyFrame::set_pose(const Pose &p)
@@ -52,11 +63,14 @@ void KeyFrame::Loader::init()
 {
        add("pose", &Loader::pose);
        add("pose", &Loader::pose_inline);
+       add("transform", &Loader::transform);
+       add("uniforms", &Loader::uniforms);
+
+       // Deprecated; use the transform statement instead
        add("position", &Loader::position);
        add("rotation", &Loader::rotation);
        add("scaling", &Loader::scaling_uniform);
        add("scaling", &Loader::scaling);
-       add("uniforms", &Loader::uniforms);
 }
 
 void KeyFrame::Loader::pose(const string &n)
@@ -74,22 +88,27 @@ void KeyFrame::Loader::pose_inline()
 
 void KeyFrame::Loader::position(float x, float y, float z)
 {
-       obj.matrix.translate(x, y, z);
+       obj.transform.set_position(Vector3(x, y, z));
 }
 
 void KeyFrame::Loader::rotation(float a, float x, float y, float z)
 {
-       obj.matrix.rotate_deg(a, x, y, z);
+       obj.transform.set_rotation(Transform::Angle::from_degrees(a), Vector3(x, y, z));
 }
 
 void KeyFrame::Loader::scaling_uniform(float s)
 {
-       obj.matrix.scale(s);
+       obj.transform.set_scale(s);
 }
 
 void KeyFrame::Loader::scaling(float x, float y, float z)
 {
-       obj.matrix.scale(x, y, z);
+       obj.transform.set_scale(Vector3(x, y, z));
+}
+
+void KeyFrame::Loader::transform()
+{
+       load_sub(obj.transform);
 }
 
 void KeyFrame::Loader::uniforms()