Procházet zdrojové kódy

Added is_inside_tree() check in both Timer and Tween

Tween now throws error and doesnt even execute.
shaderbeast před 6 roky
rodič
revize
5e337b31eb
3 změnil soubory, kde provedl 7 přidání a 4 odebrání
  1. 3 1
      scene/animation/tween.cpp
  2. 1 3
      scene/gui/control.cpp
  3. 3 0
      scene/main/timer.cpp

+ 3 - 1
scene/animation/tween.cpp

@@ -783,10 +783,12 @@ float Tween::get_speed_scale() const {
 }
 
 bool Tween::start() {
+
+	ERR_FAIL_COND_V_MSG(!is_inside_tree(), false, "Tween was not added to the SceneTree!");
+
 	// Are there any pending updates?
 	if (pending_update != 0) {
 		// Start the tweens after deferring
-		call_deferred("start");
 		return true;
 	}
 

+ 1 - 3
scene/gui/control.cpp

@@ -2149,9 +2149,7 @@ bool Control::has_focus() const {
 
 void Control::grab_focus() {
 
-	if (!is_inside_tree()) {
-		ERR_FAIL_COND(!is_inside_tree());
-	}
+	ERR_FAIL_COND(!is_inside_tree());
 
 	if (data.focus_mode == FOCUS_NONE) {
 		WARN_PRINT("This control can't grab focus. Use set_focus_mode() to allow a control to get focus.");

+ 3 - 0
scene/main/timer.cpp

@@ -107,6 +107,9 @@ bool Timer::has_autostart() const {
 }
 
 void Timer::start(float p_time) {
+
+	ERR_FAIL_COND_MSG(!is_inside_tree(), "Timer was not added to the SceneTree!");
+
 	if (p_time > 0) {
 		set_wait_time(p_time);
 	}