2 #include <mof/Color.hpp>
6 #include <mof/streams.hpp>
18 typedef typename KeyFrameAnimation<T>::KeyFrame key_frame;
20 typename Manipulator<T>::ptr parse(lua_State* l, size_t offset) const
22 std::vector<typename KeyFrameAnimation<T>::KeyFrame> v;
25 while (lua_next(l, offset) != 0) {
26 if (lua_isnumber(l, -2)) {
27 v.push_back(pop_key_frame(l));
29 else if (lua_isstring(l, -2)) {
32 lua_pop(l, 1);// pop the value
39 key_frame pop_key_frame(lua_State* l) const
44 typename Manipulator<T>::ptr make_manip(const std::vector<key_frame>& v) const
50 seq_parser<Color4f>::key_frame seq_parser<Color4f>::pop_key_frame(lua_State* l) const
52 FrameNumber frame = lua_tointeger(l, -2);
56 for (; lua_next(l, -2) && index < 4; ++index) {
57 values[index] = lua_tonumber(l, -1);
61 return key_frame(frame, Color4f(values[0], values[1], values[2], values[3]));// ARGB
63 else if (index == 3) {
64 return key_frame(frame, Color4f(values[0], values[1], values[2]));// RGB
66 else throw std::runtime_error("too few color parameters");
69 Manipulator<Color4f>::ptr seq_parser<Color4f>::make_manip(const std::vector<seq_parser<Color4f>::key_frame>& v) const
71 return makeKeyFrameAnimationHandler<Color4f>(v.front(), v.back());
76 seq_parser<Vector2D>::key_frame seq_parser<Vector2D>::pop_key_frame(lua_State* l) const
78 FrameNumber frame = lua_tointeger(l, -2);
82 for (; lua_next(l, -2) && index < 2; ++index) {
83 values[index] = lua_tonumber(l, -1);
87 return key_frame(frame, Vector2D(static_cast<float>(values[0]), static_cast<float>(values[1])));
89 else throw std::runtime_error("too few position2D parameters");
92 Manipulator<Vector2D>::ptr seq_parser<Vector2D>::make_manip(const std::vector<seq_parser<Vector2D>::key_frame>& v) const
94 return makeKeyFrameAnimationHandler<Vector2D>(v.front(), v.back());
99 seq_parser<Vector3D>::key_frame seq_parser<Vector3D>::pop_key_frame(lua_State* l) const
101 FrameNumber frame = lua_tointeger(l, -2);
105 for (; lua_next(l, -2) && index < 3; ++index) {
106 values[index] = static_cast<float>(lua_tonumber(l, -1));
110 return key_frame(frame, Vector3D(values[0], values[1], values[2]));
112 else throw std::runtime_error("too few position3D parameters");
115 Manipulator<Vector3D>::ptr seq_parser<Vector3D>::make_manip(const std::vector<seq_parser<Vector3D>::key_frame>& v) const
117 return makeKeyFrameAnimationHandler<Vector3D>(v.front(), v.back());