diff options
Diffstat (limited to 'scene/resources/curve.h')
-rw-r--r-- | scene/resources/curve.h | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/scene/resources/curve.h b/scene/resources/curve.h index 63b9a07f07..83a4357bfb 100644 --- a/scene/resources/curve.h +++ b/scene/resources/curve.h @@ -89,24 +89,39 @@ public: static const int MIN_X = 0.f; static const int MAX_X = 1.f; -#ifdef TOOLS_ENABLED - bool _disable_set_data; -#endif + static const char *SIGNAL_RANGE_CHANGED; + + enum TangentMode { + TANGENT_FREE = 0, + TANGENT_LINEAR, + TANGENT_MODE_COUNT + }; struct Point { Vector2 pos; real_t left_tangent; real_t right_tangent; + TangentMode left_mode; + TangentMode right_mode; Point() { left_tangent = 0; right_tangent = 0; + left_mode = TANGENT_FREE; + right_mode = TANGENT_FREE; } - Point(Vector2 p, real_t left = 0, real_t right = 0) { - pos = p; - left_tangent = left; - right_tangent = right; + Point(Vector2 p_pos, + real_t p_left = 0, + real_t p_right = 0, + TangentMode p_left_mode = TANGENT_FREE, + TangentMode p_right_mode = TANGENT_FREE) { + + pos = p_pos; + left_tangent = p_left; + right_tangent = p_right; + left_mode = p_left_mode; + right_mode = p_right_mode; } }; @@ -114,7 +129,12 @@ public: int get_point_count() const { return _points.size(); } - int add_point(Vector2 p_pos, real_t left_tangent = 0, real_t right_tangent = 0); + int add_point(Vector2 p_pos, + real_t left_tangent = 0, + real_t right_tangent = 0, + TangentMode left_mode = TANGENT_FREE, + TangentMode right_mode = TANGENT_FREE); + void remove_point(int p_index); void clear_points(); @@ -124,6 +144,14 @@ public: int set_point_offset(int p_index, float offset); Vector2 get_point_pos(int p_index) const; + Point get_point(int p_index) const; + + float get_min_value() const { return _min_value; } + void set_min_value(float p_min); + + float get_max_value() const { return _max_value; } + void set_max_value(float p_max); + real_t interpolate(real_t offset) const; real_t interpolate_local_nocheck(int index, real_t local_offset) const; @@ -131,8 +159,15 @@ public: void set_point_left_tangent(int i, real_t tangent); void set_point_right_tangent(int i, real_t tangent); + void set_point_left_mode(int i, TangentMode p_mode); + void set_point_right_mode(int i, TangentMode p_mode); + real_t get_point_left_tangent(int i) const; real_t get_point_right_tangent(int i) const; + TangentMode get_point_left_mode(int i) const; + TangentMode get_point_right_mode(int i) const; + + void update_auto_tangents(int i); Array get_data() const; void set_data(Array input); @@ -152,8 +187,12 @@ private: bool _baked_cache_dirty; Vector<real_t> _baked_cache; int _bake_resolution; + float _min_value; + float _max_value; }; +VARIANT_ENUM_CAST(Curve::TangentMode) + class Curve2D : public Resource { GDCLASS(Curve2D, Resource); |