diff options
Diffstat (limited to 'scene/resources/animation.h')
-rw-r--r-- | scene/resources/animation.h | 149 |
1 files changed, 71 insertions, 78 deletions
diff --git a/scene/resources/animation.h b/scene/resources/animation.h index b81ac4f1bf..57ab8b282f 100644 --- a/scene/resources/animation.h +++ b/scene/resources/animation.h @@ -35,12 +35,10 @@ */ class Animation : public Resource { - GDCLASS( Animation, Resource ); + GDCLASS(Animation, Resource); RES_BASE_EXTENSION("anm"); -public: - - +public: enum TrackType { TYPE_VALUE, ///< Set a value in a property, can be interpolated. TYPE_TRANSFORM, ///< Transform a node or a bone. @@ -61,7 +59,6 @@ public: }; private: - struct Track { TrackType type; @@ -69,7 +66,11 @@ private: bool loop_wrap; NodePath path; // path to something bool imported; - Track() { interpolation=INTERPOLATION_LINEAR; imported=false; loop_wrap=true;} + Track() { + interpolation = INTERPOLATION_LINEAR; + imported = false; + loop_wrap = true; + } virtual ~Track() {} }; @@ -77,18 +78,17 @@ private: float transition; float time; // time in secs - Key() { transition=1; } + Key() { transition = 1; } }; // transform key holds either Vector3 or Quaternion - template<class T> + template <class T> struct TKey : public Key { float time; T value; }; - struct TransformKey { Vector3 loc; @@ -100,9 +100,9 @@ private: struct TransformTrack : public Track { - Vector< TKey<TransformKey> > transforms; + Vector<TKey<TransformKey> > transforms; - TransformTrack() { type=TYPE_TRANSFORM; } + TransformTrack() { type = TYPE_TRANSFORM; } }; /* PROPERTY VALUE TRACK */ @@ -111,12 +111,14 @@ private: UpdateMode update_mode; bool update_on_seek; - Vector< TKey<Variant> > values; + Vector<TKey<Variant> > values; - ValueTrack() { type=TYPE_VALUE; update_mode=UPDATE_CONTINUOUS; } + ValueTrack() { + type = TYPE_VALUE; + update_mode = UPDATE_CONTINUOUS; + } }; - /* METHOD TRACK */ struct MethodKey : public Key { @@ -127,56 +129,55 @@ private: struct MethodTrack : public Track { - Vector< MethodKey > methods; - MethodTrack() { type=TYPE_METHOD; } + Vector<MethodKey> methods; + MethodTrack() { type = TYPE_METHOD; } }; - Vector<Track*> tracks; + Vector<Track *> tracks; /* template<class T> int _insert_pos(float p_time, T& p_keys);*/ - template<class T> - void _clear(T& p_keys); + template <class T> + void _clear(T &p_keys); - template<class T, class V> - int _insert(float p_time, T& p_keys, const V& p_value); + template <class T, class V> + int _insert(float p_time, T &p_keys, const V &p_value); - template<class K> - inline int _find( const Vector<K>& p_keys, float p_time) const; + template <class K> + inline int _find(const Vector<K> &p_keys, float p_time) const; - _FORCE_INLINE_ Animation::TransformKey _interpolate( const Animation::TransformKey& p_a, const Animation::TransformKey& p_b, float p_c) const; + _FORCE_INLINE_ Animation::TransformKey _interpolate(const Animation::TransformKey &p_a, const Animation::TransformKey &p_b, float p_c) const; - _FORCE_INLINE_ Vector3 _interpolate( const Vector3& p_a, const Vector3& p_b, float p_c) const; - _FORCE_INLINE_ Quat _interpolate( const Quat& p_a, const Quat& p_b, float p_c) const; - _FORCE_INLINE_ Variant _interpolate( const Variant& p_a, const Variant& p_b, float p_c) const; - _FORCE_INLINE_ float _interpolate( const float& p_a, const float& p_b, float p_c) const; + _FORCE_INLINE_ Vector3 _interpolate(const Vector3 &p_a, const Vector3 &p_b, float p_c) const; + _FORCE_INLINE_ Quat _interpolate(const Quat &p_a, const Quat &p_b, float p_c) const; + _FORCE_INLINE_ Variant _interpolate(const Variant &p_a, const Variant &p_b, float p_c) const; + _FORCE_INLINE_ float _interpolate(const float &p_a, const float &p_b, float p_c) const; - _FORCE_INLINE_ Animation::TransformKey _cubic_interpolate( const Animation::TransformKey& p_pre_a, const Animation::TransformKey& p_a, const Animation::TransformKey& p_b, const Animation::TransformKey& p_post_b,float p_c) const; - _FORCE_INLINE_ Vector3 _cubic_interpolate( const Vector3& p_pre_a,const Vector3& p_a, const Vector3& p_b,const Vector3& p_post_b, float p_c) const; - _FORCE_INLINE_ Quat _cubic_interpolate( const Quat& p_pre_a,const Quat& p_a, const Quat& p_b,const Quat& p_post_b, float p_c) const; - _FORCE_INLINE_ Variant _cubic_interpolate( const Variant& p_pre_a,const Variant& p_a, const Variant& p_b, const Variant& p_post_b,float p_c) const; - _FORCE_INLINE_ float _cubic_interpolate( const float& p_pre_a,const float& p_a, const float& p_b, const float& p_post_b, float p_c) const; + _FORCE_INLINE_ Animation::TransformKey _cubic_interpolate(const Animation::TransformKey &p_pre_a, const Animation::TransformKey &p_a, const Animation::TransformKey &p_b, const Animation::TransformKey &p_post_b, float p_c) const; + _FORCE_INLINE_ Vector3 _cubic_interpolate(const Vector3 &p_pre_a, const Vector3 &p_a, const Vector3 &p_b, const Vector3 &p_post_b, float p_c) const; + _FORCE_INLINE_ Quat _cubic_interpolate(const Quat &p_pre_a, const Quat &p_a, const Quat &p_b, const Quat &p_post_b, float p_c) const; + _FORCE_INLINE_ Variant _cubic_interpolate(const Variant &p_pre_a, const Variant &p_a, const Variant &p_b, const Variant &p_post_b, float p_c) const; + _FORCE_INLINE_ float _cubic_interpolate(const float &p_pre_a, const float &p_a, const float &p_b, const float &p_post_b, float p_c) const; - template<class T> - _FORCE_INLINE_ T _interpolate( const Vector< TKey<T> >& p_keys, float p_time, InterpolationType p_interp,bool p_loop_wrap,bool *p_ok) const; + template <class T> + _FORCE_INLINE_ T _interpolate(const Vector<TKey<T> > &p_keys, float p_time, InterpolationType p_interp, bool p_loop_wrap, bool *p_ok) const; - _FORCE_INLINE_ void _value_track_get_key_indices_in_range(const ValueTrack * vt, float from_time, float to_time,List<int> *p_indices) const; - _FORCE_INLINE_ void _method_track_get_key_indices_in_range(const MethodTrack * mt, float from_time, float to_time,List<int> *p_indices) const; + _FORCE_INLINE_ void _value_track_get_key_indices_in_range(const ValueTrack *vt, float from_time, float to_time, List<int> *p_indices) const; + _FORCE_INLINE_ void _method_track_get_key_indices_in_range(const MethodTrack *mt, float from_time, float to_time, List<int> *p_indices) const; float length; float step; bool loop; -// bind helpers + // bind helpers private: - Array _transform_track_interpolate(int p_track, float p_time) const { Vector3 loc; Quat rot; Vector3 scale; - transform_track_interpolate(p_track,p_time,&loc,&rot,&scale); + transform_track_interpolate(p_track, p_time, &loc, &rot, &scale); Array ret; ret.push_back(loc); ret.push_back(rot); @@ -187,10 +188,10 @@ private: PoolVector<int> _value_track_get_key_indices(int p_track, float p_time, float p_delta) const { List<int> idxs; - value_track_get_key_indices(p_track,p_time,p_delta,&idxs); + value_track_get_key_indices(p_track, p_time, p_delta, &idxs); PoolVector<int> idxr; - for (List<int>::Element *E=idxs.front();E;E=E->next()) { + for (List<int>::Element *E = idxs.front(); E; E = E->next()) { idxr.push_back(E->get()); } @@ -199,52 +200,49 @@ private: PoolVector<int> _method_track_get_key_indices(int p_track, float p_time, float p_delta) const { List<int> idxs; - method_track_get_key_indices(p_track,p_time,p_delta,&idxs); + method_track_get_key_indices(p_track, p_time, p_delta, &idxs); PoolVector<int> idxr; - for (List<int>::Element *E=idxs.front();E;E=E->next()) { + for (List<int>::Element *E = idxs.front(); E; E = E->next()) { idxr.push_back(E->get()); } return idxr; } - bool _transform_track_optimize_key(const TKey<TransformKey> &t0,const TKey<TransformKey> &t1, const TKey<TransformKey> &t2, float p_alowed_linear_err,float p_alowed_angular_err,float p_max_optimizable_angle,const Vector3& p_norm); - void _transform_track_optimize(int p_idx, float p_allowed_err=0.05, float p_alowed_angular_err=0.01,float p_max_optimizable_angle=Math_PI*0.125); + bool _transform_track_optimize_key(const TKey<TransformKey> &t0, const TKey<TransformKey> &t1, const TKey<TransformKey> &t2, float p_alowed_linear_err, float p_alowed_angular_err, float p_max_optimizable_angle, const Vector3 &p_norm); + void _transform_track_optimize(int p_idx, float p_allowed_err = 0.05, float p_alowed_angular_err = 0.01, float p_max_optimizable_angle = Math_PI * 0.125); protected: - - bool _set(const StringName& p_name, const Variant& p_value); - bool _get(const StringName& p_name,Variant &r_ret) const; - void _get_property_list( List<PropertyInfo> *p_list) const; + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; static void _bind_methods(); public: - - int add_track(TrackType p_type,int p_at_pos=-1); + int add_track(TrackType p_type, int p_at_pos = -1); void remove_track(int p_track); int get_track_count() const; TrackType track_get_type(int p_track) const; - void track_set_path(int p_track,const NodePath& p_path); + void track_set_path(int p_track, const NodePath &p_path); NodePath track_get_path(int p_track) const; - int find_track(const NodePath& p_path) const; + int find_track(const NodePath &p_path) const; // transform - void track_move_up(int p_track); void track_move_down(int p_track); - void track_set_imported(int p_track,bool p_imported); + void track_set_imported(int p_track, bool p_imported); bool track_is_imported(int p_track) const; - int transform_track_insert_key(int p_track, float p_time, const Vector3 p_loc, const Quat& p_rot=Quat(), const Vector3& p_scale=Vector3()); - void track_insert_key(int p_track, float p_time, const Variant& p_key, float p_transition=1); - void track_set_key_transition(int p_track, int p_key_idx,float p_transition); - void track_set_key_value(int p_track, int p_key_idx,const Variant& p_value); - int track_find_key(int p_track, float p_time, bool p_exact=false) const; + int transform_track_insert_key(int p_track, float p_time, const Vector3 p_loc, const Quat &p_rot = Quat(), const Vector3 &p_scale = Vector3()); + void track_insert_key(int p_track, float p_time, const Variant &p_key, float p_transition = 1); + void track_set_key_transition(int p_track, int p_key_idx, float p_transition); + void track_set_key_value(int p_track, int p_key_idx, const Variant &p_value); + int track_find_key(int p_track, float p_time, bool p_exact = false) const; void track_remove_key(int p_track, int p_idx); void track_remove_key_at_pos(int p_track, float p_pos); int track_get_key_count(int p_track) const; @@ -252,25 +250,23 @@ public: float track_get_key_time(int p_track, int p_key_idx) const; float track_get_key_transition(int p_track, int p_key_idx) const; - Error transform_track_get_key(int p_track, int p_key, Vector3* r_loc, Quat* r_rot, Vector3* r_scale) const; - void track_set_interpolation_type(int p_track,InterpolationType p_interp); + Error transform_track_get_key(int p_track, int p_key, Vector3 *r_loc, Quat *r_rot, Vector3 *r_scale) const; + void track_set_interpolation_type(int p_track, InterpolationType p_interp); InterpolationType track_get_interpolation_type(int p_track) const; - void track_set_interpolation_loop_wrap(int p_track,bool p_enable); + void track_set_interpolation_loop_wrap(int p_track, bool p_enable); bool track_get_interpolation_loop_wrap(int p_track) const; - Error transform_track_interpolate(int p_track, float p_time, Vector3 * r_loc, Quat *r_rot, Vector3 *r_scale) const; + Error transform_track_interpolate(int p_track, float p_time, Vector3 *r_loc, Quat *r_rot, Vector3 *r_scale) const; Variant value_track_interpolate(int p_track, float p_time) const; - void value_track_get_key_indices(int p_track, float p_time, float p_delta,List<int> *p_indices) const; + void value_track_get_key_indices(int p_track, float p_time, float p_delta, List<int> *p_indices) const; void value_track_set_update_mode(int p_track, UpdateMode p_mode); UpdateMode value_track_get_update_mode(int p_track) const; - - void method_track_get_key_indices(int p_track, float p_time, float p_delta,List<int> *p_indices) const; - Vector<Variant> method_track_get_params(int p_track,int p_key_idx) const; - StringName method_track_get_name(int p_track,int p_key_idx) const; - + void method_track_get_key_indices(int p_track, float p_time, float p_delta, List<int> *p_indices) const; + Vector<Variant> method_track_get_params(int p_track, int p_key_idx) const; + StringName method_track_get_name(int p_track, int p_key_idx) const; void set_length(float p_length); float get_length() const; @@ -283,17 +279,14 @@ public: void clear(); - void optimize(float p_allowed_linear_err=0.05,float p_allowed_angular_err=0.01,float p_max_optimizable_angle=Math_PI*0.125); + void optimize(float p_allowed_linear_err = 0.05, float p_allowed_angular_err = 0.01, float p_max_optimizable_angle = Math_PI * 0.125); Animation(); ~Animation(); - }; -VARIANT_ENUM_CAST( Animation::TrackType ); -VARIANT_ENUM_CAST( Animation::InterpolationType ); -VARIANT_ENUM_CAST( Animation::UpdateMode ); - - +VARIANT_ENUM_CAST(Animation::TrackType); +VARIANT_ENUM_CAST(Animation::InterpolationType); +VARIANT_ENUM_CAST(Animation::UpdateMode); #endif |