1 #include <msp/datafile/collection.h>
2 #include <msp/fs/utils.h>
11 void KeyFrame::set_transform(const Transform &t)
16 void KeyFrame::set_matrix(const Matrix &m)
18 transform = Transform::from_matrix(m);
21 void KeyFrame::set_uniform(const string &n, const AnimatedUniform &u)
24 uniforms.insert(UniformMap::value_type(n, u));
27 void KeyFrame::set_pose(const Pose &p)
33 KeyFrame::AnimatedUniform::AnimatedUniform(unsigned s, float v0, float v1, float v2, float v3):
43 KeyFrame::Loader::Loader(KeyFrame &k, Collection *c):
44 DataFile::CollectionObjectLoader<KeyFrame>(k, c)
46 add("pose", &Loader::pose);
47 add("pose", &Loader::pose_inline);
48 add("transform", &Loader::transform);
49 add("uniforms", &Loader::uniforms);
51 // Deprecated; use the transform statement instead
52 add("position", &Loader::position);
53 add("rotation", &Loader::rotation);
54 add("scaling", &Loader::scaling_uniform);
55 add("scaling", &Loader::scaling);
58 void KeyFrame::Loader::set_inline_base_name(const string &n)
63 void KeyFrame::Loader::pose(const string &n)
65 obj.pose = &get_collection().get<Pose>(n);
68 void KeyFrame::Loader::pose_inline()
70 RefPtr<Pose> p = new Pose;
71 load_sub(*p, get_collection());
72 get_collection().add((inline_base_name.empty() ? FS::basename(get_source()) : inline_base_name)+".pose", p.get());
73 obj.pose = p.release();
76 void KeyFrame::Loader::position(float x, float y, float z)
78 obj.transform.set_position(Vector3(x, y, z));
81 void KeyFrame::Loader::rotation(float a, float x, float y, float z)
83 obj.transform.set_rotation(Transform::Angle::from_degrees(a), Vector3(x, y, z));
86 void KeyFrame::Loader::scaling_uniform(float s)
88 obj.transform.set_scale(s);
91 void KeyFrame::Loader::scaling(float x, float y, float z)
93 obj.transform.set_scale(Vector3(x, y, z));
96 void KeyFrame::Loader::transform()
98 load_sub(obj.transform);
101 void KeyFrame::Loader::uniforms()
103 UniformsLoader ldr(obj);
108 KeyFrame::UniformsLoader::UniformsLoader(KeyFrame &k):
109 DataFile::ObjectLoader<KeyFrame>(k)
111 add("uniform", &UniformsLoader::uniform1f);
112 add("uniform", &UniformsLoader::uniform2f);
113 add("uniform", &UniformsLoader::uniform3f);
114 add("uniform", &UniformsLoader::uniform4f);
117 add("uniform1f", &UniformsLoader::uniform1f);
118 add("uniform2f", &UniformsLoader::uniform2f);
119 add("uniform3f", &UniformsLoader::uniform3f);
120 add("uniform4f", &UniformsLoader::uniform4f);
123 void KeyFrame::UniformsLoader::uniform1f(const string &n, float v)
125 obj.uniforms.insert(UniformMap::value_type(n, AnimatedUniform(1, v)));
128 void KeyFrame::UniformsLoader::uniform2f(const string &n, float v0, float v1)
130 obj.uniforms.insert(UniformMap::value_type(n, AnimatedUniform(2, v0, v1)));
133 void KeyFrame::UniformsLoader::uniform3f(const string &n, float v0, float v1, float v2)
135 obj.uniforms.insert(UniformMap::value_type(n, AnimatedUniform(3, v0, v1, v2)));
138 void KeyFrame::UniformsLoader::uniform4f(const string &n, float v0, float v1, float v2, float v3)
140 obj.uniforms.insert(UniformMap::value_type(n, AnimatedUniform(4, v0, v1, v2, v3)));