Переглянути джерело

Merge pull request #15160 from volzhs/tween-follow-2.1

Fix Tween follow not working [2.1]
Rémi Verschelde 7 роки тому
батько
коміт
116b0e5328
1 змінених файлів з 39 додано та 45 видалено
  1. 39 45
      scene/animation/tween.cpp

+ 39 - 45
scene/animation/tween.cpp

@@ -557,56 +557,50 @@ void Tween::_tween_process(float p_delta) {
 			data.finish = true;
 		}
 
-		switch (data.type) {
-			case INTER_PROPERTY:
-			case INTER_METHOD: {
-				Variant result = _run_equation(data);
-				emit_signal("tween_step", object, data.key, data.elapsed, result);
-				_apply_tween_value(data, result);
-				if (data.finish)
-					_apply_tween_value(data, data.final_val);
-			} break;
-
-			case INTER_CALLBACK:
-				if (data.finish) {
-					if (data.call_deferred) {
-
-						switch (data.args) {
-							case 0:
-								object->call_deferred(data.key);
-								break;
-							case 1:
-								object->call_deferred(data.key, data.arg[0]);
-								break;
-							case 2:
-								object->call_deferred(data.key, data.arg[0], data.arg[1]);
-								break;
-							case 3:
-								object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2]);
-								break;
-							case 4:
-								object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3]);
-								break;
-							case 5:
-								object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3], data.arg[4]);
-								break;
-						}
-					} else {
-						Variant::CallError error;
-						Variant *arg[5] = {
-							&data.arg[0],
-							&data.arg[1],
-							&data.arg[2],
-							&data.arg[3],
-							&data.arg[4],
-						};
-						object->call(data.key, (const Variant **)arg, data.args, error);
+		if (data.type == INTER_CALLBACK) {
+			if (data.finish) {
+				if (data.call_deferred) {
+
+					switch (data.args) {
+						case 0:
+							object->call_deferred(data.key);
+							break;
+						case 1:
+							object->call_deferred(data.key, data.arg[0]);
+							break;
+						case 2:
+							object->call_deferred(data.key, data.arg[0], data.arg[1]);
+							break;
+						case 3:
+							object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2]);
+							break;
+						case 4:
+							object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3]);
+							break;
+						case 5:
+							object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3], data.arg[4]);
+							break;
 					}
+				} else {
+					Variant::CallError error;
+					Variant *arg[5] = {
+						&data.arg[0],
+						&data.arg[1],
+						&data.arg[2],
+						&data.arg[3],
+						&data.arg[4],
+					};
+					object->call(data.key, (const Variant **)arg, data.args, error);
 				}
-				break;
+			}
+		} else {
+			Variant result = _run_equation(data);
+			emit_signal("tween_step", object, data.key, data.elapsed, result);
+			_apply_tween_value(data, result);
 		}
 
 		if (data.finish) {
+			_apply_tween_value(data, data.final_val);
 			emit_signal("tween_complete", object, data.key);
 			// not repeat mode, remove completed action
 			if (!repeat)