diff options
| -rw-r--r-- | scene/resources/curve.cpp | 13 | ||||
| -rw-r--r-- | scene/resources/curve.h | 1 | 
2 files changed, 10 insertions, 4 deletions
diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index 950518aa6e..cb710dde43 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -51,6 +51,7 @@ Curve::Curve() {  	_baked_cache_dirty = false;  	_min_value = 0;  	_max_value = 1; +	_minmax_set_once = 0b00;  }  int Curve::add_point(Vector2 p_pos, real_t left_tangent, real_t right_tangent, TangentMode left_mode, TangentMode right_mode) { @@ -282,20 +283,24 @@ void Curve::update_auto_tangents(int i) {  #define MIN_Y_RANGE 0.01  void Curve::set_min_value(float p_min) { -	if (p_min > _max_value - MIN_Y_RANGE) +	if (_minmax_set_once & 0b11 && p_min > _max_value - MIN_Y_RANGE) {  		_min_value = _max_value - MIN_Y_RANGE; -	else +	} else { +		_minmax_set_once |= 0b10; // first bit is "min set"  		_min_value = p_min; +	}  	// Note: min and max are indicative values,  	// it's still possible that existing points are out of range at this point.  	emit_signal(SIGNAL_RANGE_CHANGED);  }  void Curve::set_max_value(float p_max) { -	if (p_max < _min_value + MIN_Y_RANGE) +	if (_minmax_set_once & 0b11 && p_max < _min_value + MIN_Y_RANGE) {  		_max_value = _min_value + MIN_Y_RANGE; -	else +	} else { +		_minmax_set_once |= 0b01; // second bit is "max set"  		_max_value = p_max; +	}  	emit_signal(SIGNAL_RANGE_CHANGED);  } diff --git a/scene/resources/curve.h b/scene/resources/curve.h index bb12baca48..b677097e86 100644 --- a/scene/resources/curve.h +++ b/scene/resources/curve.h @@ -143,6 +143,7 @@ private:  	int _bake_resolution;  	float _min_value;  	float _max_value; +	int _minmax_set_once; // Encodes whether min and max have been set a first time, first bit for min and second for max.  };  VARIANT_ENUM_CAST(Curve::TangentMode)  |