mirror of
https://github.com/godotengine/godot.git
synced 2024-11-27 14:42:48 +00:00
Fixed dragging curve points
This commit is contained in:
parent
8abace0f79
commit
6042b24745
@ -54,6 +54,7 @@ void Curve::set_point_count(int p_count) {
|
||||
if (_points.size() >= p_count) {
|
||||
_points.resize(p_count);
|
||||
mark_dirty();
|
||||
notify_property_list_changed();
|
||||
} else {
|
||||
for (int i = p_count - _points.size(); i > 0; i--) {
|
||||
add_point(Vector2());
|
||||
@ -61,7 +62,7 @@ void Curve::set_point_count(int p_count) {
|
||||
}
|
||||
}
|
||||
|
||||
int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) {
|
||||
int Curve::_add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) {
|
||||
// Add a point and preserve order
|
||||
|
||||
// Curve bounds is in 0..1
|
||||
@ -112,6 +113,13 @@ int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_t
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) {
|
||||
int ret = _add_point(p_position, p_left_tangent, p_right_tangent, p_left_mode, p_right_mode);
|
||||
notify_property_list_changed();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Curve::get_index(real_t p_offset) const {
|
||||
// Lower-bound float binary search
|
||||
|
||||
@ -217,15 +225,21 @@ Curve::TangentMode Curve::get_point_right_mode(int p_index) const {
|
||||
return _points[p_index].right_mode;
|
||||
}
|
||||
|
||||
void Curve::remove_point(int p_index) {
|
||||
void Curve::_remove_point(int p_index) {
|
||||
ERR_FAIL_INDEX(p_index, _points.size());
|
||||
_points.remove_at(p_index);
|
||||
mark_dirty();
|
||||
}
|
||||
|
||||
void Curve::remove_point(int p_index) {
|
||||
_remove_point(p_index);
|
||||
notify_property_list_changed();
|
||||
}
|
||||
|
||||
void Curve::clear_points() {
|
||||
_points.clear();
|
||||
mark_dirty();
|
||||
notify_property_list_changed();
|
||||
}
|
||||
|
||||
void Curve::set_point_value(int p_index, real_t p_position) {
|
||||
@ -238,8 +252,8 @@ void Curve::set_point_value(int p_index, real_t p_position) {
|
||||
int Curve::set_point_offset(int p_index, real_t p_offset) {
|
||||
ERR_FAIL_INDEX_V(p_index, _points.size(), -1);
|
||||
Point p = _points[p_index];
|
||||
remove_point(p_index);
|
||||
int i = add_point(Vector2(p_offset, p.position.y));
|
||||
_remove_point(p_index);
|
||||
int i = _add_point(Vector2(p_offset, p.position.y));
|
||||
_points.write[i].left_tangent = p.left_tangent;
|
||||
_points.write[i].right_tangent = p.right_tangent;
|
||||
_points.write[i].left_mode = p.left_mode;
|
||||
@ -370,7 +384,6 @@ real_t Curve::interpolate_local_nocheck(int p_index, real_t p_local_offset) cons
|
||||
void Curve::mark_dirty() {
|
||||
_baked_cache_dirty = true;
|
||||
emit_signal(CoreStringNames::get_singleton()->changed);
|
||||
notify_property_list_changed();
|
||||
}
|
||||
|
||||
Array Curve::get_data() const {
|
||||
@ -429,6 +442,7 @@ void Curve::set_data(const Array p_input) {
|
||||
}
|
||||
|
||||
mark_dirty();
|
||||
notify_property_list_changed();
|
||||
}
|
||||
|
||||
void Curve::bake() {
|
||||
|
@ -83,7 +83,6 @@ public:
|
||||
real_t right_tangent = 0,
|
||||
TangentMode left_mode = TANGENT_FREE,
|
||||
TangentMode right_mode = TANGENT_FREE);
|
||||
|
||||
void remove_point(int p_index);
|
||||
void clear_points();
|
||||
|
||||
@ -137,6 +136,12 @@ protected:
|
||||
|
||||
private:
|
||||
void mark_dirty();
|
||||
int _add_point(Vector2 p_position,
|
||||
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);
|
||||
|
||||
Vector<Point> _points;
|
||||
bool _baked_cache_dirty = false;
|
||||
|
Loading…
Reference in New Issue
Block a user