Add a configuration warning to [Oriented]PathFollow

Will update OrientedPathFollows' configuration_warnings if the parent Path changes
This commit is contained in:
Florian Jung 2018-10-17 14:45:51 +02:00 committed by Florian Jung
parent 1dbb6e4554
commit d67c7487f2
2 changed files with 43 additions and 0 deletions

View file

@ -43,6 +43,16 @@ void Path::_curve_changed() {
if (is_inside_tree()) {
emit_signal("curve_changed");
}
// update the configuration warnings of all children of type OrientedPathFollows
if (is_inside_tree()) {
for (int i = 0; i < get_child_count(); i++) {
OrientedPathFollow *child = Object::cast_to<OrientedPathFollow>(get_child(i));
if (child) {
child->update_configuration_warning();
}
}
}
}
void Path::set_curve(const Ref<Curve3D> &p_curve) {
@ -207,6 +217,18 @@ void PathFollow::_validate_property(PropertyInfo &property) const {
}
}
String PathFollow::get_configuration_warning() const {
if (!is_visible_in_tree() || !is_inside_tree())
return String();
if (!Object::cast_to<Path>(get_parent())) {
return TTR("PathFollow only works when set as a child of a Path node.");
}
return String();
}
void PathFollow::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_offset", "offset"), &PathFollow::set_offset);
@ -444,6 +466,23 @@ void OrientedPathFollow::_validate_property(PropertyInfo &property) const {
}
}
String OrientedPathFollow::get_configuration_warning() const {
if (!is_visible_in_tree() || !is_inside_tree())
return String();
if (!Object::cast_to<Path>(get_parent())) {
return TTR("OrientedPathFollow only works when set as a child of a Path node.");
} else {
Path *path = Object::cast_to<Path>(get_parent());
if (path->get_curve().is_valid() && !path->get_curve()->is_up_vector_enabled()) {
return TTR("OrientedPathFollow requires up vectors enabled in its parent Path.");
}
}
return String();
}
void OrientedPathFollow::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_offset", "offset"), &OrientedPathFollow::set_offset);

View file

@ -106,6 +106,8 @@ public:
void set_cubic_interpolation(bool p_enable);
bool get_cubic_interpolation() const;
String get_configuration_warning() const;
PathFollow();
};
@ -151,6 +153,8 @@ public:
void set_cubic_interpolation(bool p_enable);
bool get_cubic_interpolation() const;
String get_configuration_warning() const;
OrientedPathFollow();
};