]> git.tdb.fi Git - libs/gl.git/blobdiff - source/keyframe.h
Add getter for Animation::looping
[libs/gl.git] / source / keyframe.h
index 6a8c5a447e60ab8c5f0575f47854e9019e145090..5b748add113c5432c0d3c5836e6fceaf4db8b590 100644 (file)
@@ -4,6 +4,7 @@
 #include <msp/core/refptr.h>
 #include <msp/datafile/objectloader.h>
 #include "matrix.h"
+#include "transform.h"
 
 namespace Msp {
 namespace GL {
@@ -30,19 +31,48 @@ public:
                void rotation(float, float, float, float);
                void scaling_uniform(float);
                void scaling(float, float, float);
+               void transform();
+               void uniforms();
        };
 
+       class UniformsLoader: public DataFile::ObjectLoader<KeyFrame>
+       {
+       public:
+               UniformsLoader(KeyFrame &);
+
+       private:
+               void uniform1f(const std::string &, float);
+               void uniform2f(const std::string &, float, float);
+               void uniform3f(const std::string &, float, float, float);
+               void uniform4f(const std::string &, float, float, float, float);
+       };
+
+       struct AnimatedUniform
+       {
+               unsigned size;
+               float values[4];
+
+               AnimatedUniform(unsigned, float, float = 0.0f, float = 0.0f, float = 0.0f);
+       };
+
+       typedef std::map<std::string, AnimatedUniform> UniformMap;
+
 private:
-       Matrix matrix;
+       Transform transform;
+       UniformMap uniforms;
        RefPtr<const Pose> pose;
 
 public:
        KeyFrame();
        ~KeyFrame();
 
+       void set_transform(const Transform &);
        void set_matrix(const Matrix &);
+       void set_uniform(const std::string &, const AnimatedUniform &);
        void set_pose(const Pose &);
-       const Matrix &get_matrix() const { return matrix; }
+       const Transform &get_transform() const { return transform; }
+       Matrix get_matrix() const { return transform.to_matrix(); }
+       const UniformMap &get_uniforms() const { return uniforms; }
        const Pose *get_pose() const { return pose.get(); }
 };