From 1260cb0bfb0450c3cf1323dc083e569dff70d438 Mon Sep 17 00:00:00 2001 From: kobewi Date: Tue, 13 Dec 2022 22:37:41 +0100 Subject: [PATCH] Improve empty Tween error message --- scene/animation/tween.cpp | 20 +++++++++++++++++++- scene/animation/tween.h | 2 ++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index be8c23844fc..39d17933684 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -280,7 +280,16 @@ bool Tween::step(double p_delta) { } if (!started) { - ERR_FAIL_COND_V_MSG(tweeners.is_empty(), false, "Tween started, but has no Tweeners."); + if (tweeners.is_empty()) { + String tween_id; + Node *node = get_bound_node(); + if (node) { + tween_id = vformat("Tween (bound to %s)", node->is_inside_tree() ? (String)node->get_path() : (String)node->get_name()); + } else { + tween_id = to_string(); + } + ERR_FAIL_V_MSG(false, tween_id + ": started with no Tweeners."); + } current_step = 0; loops_done = 0; total_time = 0; @@ -393,6 +402,15 @@ Variant Tween::interpolate_variant(Variant p_initial_val, Variant p_delta_val, d return ret; } +String Tween::to_string() { + String ret = Object::to_string(); + Node *node = get_bound_node(); + if (node) { + ret += vformat(" (bound to %s)", node->get_name()); + } + return ret; +} + void Tween::_bind_methods() { ClassDB::bind_method(D_METHOD("tween_property", "object", "property", "final_val", "duration"), &Tween::tween_property); ClassDB::bind_method(D_METHOD("tween_interval", "time"), &Tween::tween_interval); diff --git a/scene/animation/tween.h b/scene/animation/tween.h index 08911d66235..58217db5353 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -130,6 +130,8 @@ protected: static void _bind_methods(); public: + virtual String to_string() override; + Ref tween_property(Object *p_target, NodePath p_property, Variant p_to, double p_duration); Ref tween_interval(double p_time); Ref tween_callback(Callable p_callback);