Time::TimeDelta current_time;
float start_slope;
float end_slope;
+ int slopes_set;
public:
Loader(Animation &);
void init();
virtual void finish();
+ void check_slopes_and_control(bool, bool);
+ void add_kf(const KeyFrame *, bool, bool);
void load_kf(const std::string &, bool);
void load_kf_inline(bool);
{
protected:
CurveTarget target;
+ int component;
- Curve(CurveTarget);
+ Curve(CurveTarget, int);
public:
virtual ~Curve() { }
class ValueCurve: public Curve
{
public:
- typedef typename Interpolate::SplineKnot<float, N> Knot;
+ typedef typename Interpolate::SplineKnot<double, N> Knot;
private:
- Interpolate::Spline<float, 3, N> spline;
+ Interpolate::Spline<double, 3, N> spline;
public:
- ValueCurve(CurveTarget, const std::vector<Knot> &);
+ ValueCurve(CurveTarget, int, const std::vector<Knot> &);
virtual void apply(float, Matrix &) const;
virtual void apply(float, KeyFrame::AnimatedUniform &) const;
};
+ struct ExtractComponent
+ {
+ typedef bool (*Extract)(const KeyFrame &, Vector3 &);
+
+ Extract extract;
+ unsigned index;
+ Transform::ComponentMask mask;
+
+ ExtractComponent(Extract e, unsigned i, Transform::ComponentMask m): extract(e), index(i), mask(m) { }
+
+ bool operator()(const KeyFrame &, float &) const;
+ };
+
template<unsigned N>
struct ExtractUniform
{
bool looping;
std::vector<UniformInfo> uniforms;
std::vector<Curve *> curves;
+ unsigned uniform_curve_offset;
public:
Animation();
const std::string &get_uniform_name(unsigned) const;
void add_keyframe(const Time::TimeDelta &, const KeyFrame &);
- void add_keyframe(const Time::TimeDelta &, const KeyFrame &, float);
- void add_keyframe(const Time::TimeDelta &, const KeyFrame &, float, float);
+ void add_keyframe_owned(const Time::TimeDelta &, const KeyFrame *);
+ DEPRECATED void add_keyframe(const Time::TimeDelta &, const KeyFrame &, float);
+ DEPRECATED void add_keyframe(const Time::TimeDelta &, const KeyFrame &, float, float);
void add_control_keyframe(const KeyFrame &);
+ void add_control_keyframe_owned(const KeyFrame *);
private:
- void add_keyframe(const Time::TimeDelta &, const RefPtr<const KeyFrame> &, bool);
+ void add_keyframe(const Time::TimeDelta &, const KeyFrame *, float, float, bool);
+ void add_keyframe(const Time::TimeDelta &, const KeyFrame *, bool, bool);
void prepare_keyframe(TimedKeyFrame &);
void create_curves();
+ void create_curve(CurveTarget, Transform::ComponentMask, ExtractComponent::Extract);
template<unsigned N, typename T>
- void create_curve(CurveTarget target, const T &);
+ void create_curve(CurveTarget target, int, const T &);
static bool extract_position(const KeyFrame &, Vector3 &);
static bool extract_euler(const KeyFrame &, Vector3 &);
static bool extract_scale(const KeyFrame &, Vector3 &);
const Msp::Time::TimeDelta &get_duration() const;
void set_looping(bool);
+ bool is_looping() const { return looping; }
};
} // namespace GL