Pārlūkot izejas kodu

Merge pull request #19464 from bojidar-bg/19448-fix-subproperty-handling

Fix bug in animationplayer editor not using subproperties properly
Rémi Verschelde 7 gadi atpakaļ
vecāks
revīzija
39168f125e
2 mainītis faili ar 24 papildinājumiem un 40 dzēšanām
  1. 23 35
      editor/animation_track_editor.cpp
  2. 1 5
      scene/animation/animation_player.cpp

+ 23 - 35
editor/animation_track_editor.cpp

@@ -3014,12 +3014,12 @@ PropertyInfo AnimationTrackEditor::_find_hint_for_track(int p_idx, NodePath &r_b
 	if (res.is_valid()) {
 		property_info_base = res;
 		if (r_current_val) {
-			*r_current_val = res->get(leftover_path[leftover_path.size() - 1]);
+			*r_current_val = res->get_indexed(leftover_path);
 		}
 	} else if (node) {
 		property_info_base = node;
 		if (r_current_val) {
-			*r_current_val = node->get(leftover_path[leftover_path.size() - 1]);
+			*r_current_val = node->get_indexed(leftover_path);
 		}
 	}
 
@@ -3053,31 +3053,31 @@ static Vector<String> _get_bezier_subindices_for_type(Variant::Type p_type, bool
 			subindices.push_back("");
 		} break;
 		case Variant::VECTOR2: {
-			subindices.push_back(".x");
-			subindices.push_back(".y");
+			subindices.push_back(":x");
+			subindices.push_back(":y");
 		} break;
 		case Variant::VECTOR3: {
-			subindices.push_back(".x");
-			subindices.push_back(".y");
-			subindices.push_back(".z");
+			subindices.push_back(":x");
+			subindices.push_back(":y");
+			subindices.push_back(":z");
 		} break;
 		case Variant::QUAT: {
-			subindices.push_back(".x");
-			subindices.push_back(".y");
-			subindices.push_back(".z");
-			subindices.push_back(".w");
+			subindices.push_back(":x");
+			subindices.push_back(":y");
+			subindices.push_back(":z");
+			subindices.push_back(":w");
 		} break;
 		case Variant::COLOR: {
-			subindices.push_back(".r");
-			subindices.push_back(".g");
-			subindices.push_back(".b");
-			subindices.push_back(".a");
+			subindices.push_back(":r");
+			subindices.push_back(":g");
+			subindices.push_back(":b");
+			subindices.push_back(":a");
 		} break;
 		case Variant::PLANE: {
-			subindices.push_back(".x");
-			subindices.push_back(".y");
-			subindices.push_back(".z");
-			subindices.push_back(".d");
+			subindices.push_back(":x");
+			subindices.push_back(":y");
+			subindices.push_back(":z");
+			subindices.push_back(":d");
 		} break;
 		default: {
 			if (r_valid) {
@@ -3288,31 +3288,19 @@ void AnimationTrackEditor::_update_tracks() {
 
 			if (root && root->has_node_and_resource(path)) {
 				RES res;
+				NodePath base_path;
 				Vector<StringName> leftover_path;
 				Node *node = root->get_node_and_resource(path, res, leftover_path, true);
+				PropertyInfo pinfo = _find_hint_for_track(i, base_path);
 
 				Object *object = node;
 				if (res.is_valid()) {
 					object = res.ptr();
-				} else {
-					object = node;
 				}
 
 				if (object && !leftover_path.empty()) {
-					//not a property (value track?)
-					PropertyInfo pinfo;
-					pinfo.name = leftover_path[leftover_path.size() - 1];
-					//now let's see if we can get more info about it
-
-					List<PropertyInfo> plist;
-					object->get_property_list(&plist);
-
-					for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) {
-
-						if (E->get().name == leftover_path[leftover_path.size() - 1]) {
-							pinfo = E->get();
-							break;
-						}
+					if (pinfo.name.empty()) {
+						pinfo.name = leftover_path[leftover_path.size() - 1];
 					}
 
 					for (int j = 0; j < track_edit_plugins.size(); j++) {

+ 1 - 5
scene/animation/animation_player.cpp

@@ -331,11 +331,7 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim) {
 			if (!p_anim->node_cache[i]->bezier_anim.has(a->track_get_path(i).get_concatenated_subnames())) {
 
 				TrackNodeCache::BezierAnim ba;
-				String path = leftover_path[leftover_path.size() - 1];
-				Vector<String> index = path.split(".");
-				for (int j = 0; j < index.size(); j++) {
-					ba.bezier_property.push_back(index[j]);
-				}
+				ba.bezier_property = leftover_path;
 				ba.object = resource.is_valid() ? (Object *)resource.ptr() : (Object *)child;
 				ba.owner = p_anim->node_cache[i];