diff options
Diffstat (limited to 'scene/resources/color_ramp.h')
| -rw-r--r-- | scene/resources/color_ramp.h | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/scene/resources/color_ramp.h b/scene/resources/color_ramp.h index b6ca56dbf..78c88c327 100644 --- a/scene/resources/color_ramp.h +++ b/scene/resources/color_ramp.h @@ -31,17 +31,17 @@ #include "resource.h" -class ColorRamp: public Resource { - GDCLASS( ColorRamp, Resource ); - OBJ_SAVE_TYPE( ColorRamp ); +class ColorRamp : public Resource { + GDCLASS(ColorRamp, Resource); + OBJ_SAVE_TYPE(ColorRamp); public: struct Point { float offset; Color color; - bool operator<(const Point& p_ponit) const { - return offset<p_ponit.offset; + bool operator<(const Point &p_ponit) const { + return offset < p_ponit.offset; } }; @@ -56,47 +56,45 @@ public: ColorRamp(); virtual ~ColorRamp(); - void add_point(float p_offset, const Color& p_color); + void add_point(float p_offset, const Color &p_color); void remove_point(int p_index); - void set_points(Vector<Point>& points); - Vector<Point>& get_points(); + void set_points(Vector<Point> &points); + Vector<Point> &get_points(); void set_offset(int pos, const float offset); float get_offset(int pos) const; - void set_color(int pos, const Color& color); + void set_color(int pos, const Color &color); Color get_color(int pos) const; - void set_offsets(const Vector<float>& offsets); + void set_offsets(const Vector<float> &offsets); Vector<float> get_offsets() const; - void set_colors(const Vector<Color>& colors); + void set_colors(const Vector<Color> &colors); Vector<Color> get_colors() const; _FORCE_INLINE_ Color get_color_at_offset(float p_offset) { if (points.empty()) - return Color(0,0,0,1); + return Color(0, 0, 0, 1); - if(!is_sorted) - { + if (!is_sorted) { points.sort(); is_sorted = true; } //binary search int low = 0; - int high = points.size() -1; + int high = points.size() - 1; int middle; - while( low <= high ) - { - middle = ( low + high ) / 2; - Point& point = points[middle]; - if( point.offset > p_offset ) { + while (low <= high) { + middle = (low + high) / 2; + Point &point = points[middle]; + if (point.offset > p_offset) { high = middle - 1; //search low end of array - } else if ( point.offset < p_offset) { + } else if (point.offset < p_offset) { low = middle + 1; //search high end of array } else { return point.color; @@ -104,19 +102,18 @@ public: } //return interpolated value - if (points[middle].offset>p_offset) - { + if (points[middle].offset > p_offset) { middle--; } - int first=middle; - int second=middle+1; - if(second>=points.size()) - return points[points.size()-1].color; - if(first<0) + int first = middle; + int second = middle + 1; + if (second >= points.size()) + return points[points.size() - 1].color; + if (first < 0) return points[0].color; - Point& pointFirst = points[first]; - Point& pointSecond = points[second]; - return pointFirst.color.linear_interpolate(pointSecond.color, (p_offset-pointFirst.offset)/(pointSecond.offset - pointFirst.offset)); + Point &pointFirst = points[first]; + Point &pointSecond = points[second]; + return pointFirst.color.linear_interpolate(pointSecond.color, (p_offset - pointFirst.offset) / (pointSecond.offset - pointFirst.offset)); } int get_points_count() const; |
