|
@@ -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);
|