]> git.tdb.fi Git - libs/gl.git/blobdiff - source/keyframe.cpp
Support for armature-based animation
[libs/gl.git] / source / keyframe.cpp
index 429d893c1afa513fd351913d66833cfd7c9ccc3f..e0d35ad80c7546a74f00754657a283a5e4583520 100644 (file)
@@ -1,4 +1,8 @@
+#include <msp/datafile/collection.h>
 #include "keyframe.h"
+#include "pose.h"
+
+using namespace std;
 
 namespace Msp {
 namespace GL {
@@ -8,15 +12,48 @@ void KeyFrame::set_matrix(const Matrix &m)
        matrix = m;
 }
 
+void KeyFrame::set_pose(const Pose &p)
+{
+       pose = &p;
+       pose.keep();
+}
+
+
 KeyFrame::Loader::Loader(KeyFrame &k):
-       DataFile::ObjectLoader<KeyFrame>(k)
+       DataFile::CollectionObjectLoader<KeyFrame>(k, 0)
 {
+       init();
+}
+
+KeyFrame::Loader::Loader(KeyFrame &k, Collection &c):
+       DataFile::CollectionObjectLoader<KeyFrame>(k, &c)
+{
+       init();
+}
+
+void KeyFrame::Loader::init()
+{
+       add("pose", &Loader::pose);
+       add("pose", &Loader::pose_inline);
        add("position", &Loader::position);
        add("rotation", &Loader::rotation);
        add("scaling", &Loader::scaling_uniform);
        add("scaling", &Loader::scaling);
 }
 
+void KeyFrame::Loader::pose(const string &n)
+{
+       obj.pose = &get_collection().get<Pose>(n);
+       obj.pose.keep();
+}
+
+void KeyFrame::Loader::pose_inline()
+{
+       RefPtr<Pose> p = new Pose;
+       load_sub(*p, get_collection());
+       obj.pose = p;
+}
+
 void KeyFrame::Loader::position(float x, float y, float z)
 {
        obj.matrix.translate(x, y, z);