Merge pull request #29959 from akien-mga/dont-reset-my-curves
Curve: Prevent forcing 1.0 min value to 0.99
This commit is contained in:
commit
10cf5ac0ff
2 changed files with 10 additions and 4 deletions
|
@ -51,6 +51,7 @@ Curve::Curve() {
|
||||||
_baked_cache_dirty = false;
|
_baked_cache_dirty = false;
|
||||||
_min_value = 0;
|
_min_value = 0;
|
||||||
_max_value = 1;
|
_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) {
|
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
|
#define MIN_Y_RANGE 0.01
|
||||||
|
|
||||||
void Curve::set_min_value(float p_min) {
|
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;
|
_min_value = _max_value - MIN_Y_RANGE;
|
||||||
else
|
} else {
|
||||||
|
_minmax_set_once |= 0b10; // first bit is "min set"
|
||||||
_min_value = p_min;
|
_min_value = p_min;
|
||||||
|
}
|
||||||
// Note: min and max are indicative values,
|
// Note: min and max are indicative values,
|
||||||
// it's still possible that existing points are out of range at this point.
|
// it's still possible that existing points are out of range at this point.
|
||||||
emit_signal(SIGNAL_RANGE_CHANGED);
|
emit_signal(SIGNAL_RANGE_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curve::set_max_value(float p_max) {
|
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;
|
_max_value = _min_value + MIN_Y_RANGE;
|
||||||
else
|
} else {
|
||||||
|
_minmax_set_once |= 0b01; // second bit is "max set"
|
||||||
_max_value = p_max;
|
_max_value = p_max;
|
||||||
|
}
|
||||||
emit_signal(SIGNAL_RANGE_CHANGED);
|
emit_signal(SIGNAL_RANGE_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,7 @@ private:
|
||||||
int _bake_resolution;
|
int _bake_resolution;
|
||||||
float _min_value;
|
float _min_value;
|
||||||
float _max_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)
|
VARIANT_ENUM_CAST(Curve::TangentMode)
|
||||||
|
|
Loading…
Reference in a new issue