diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-07-26 10:31:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-26 10:31:05 +0200 |
commit | 39168f125e7774129125721a99c0b9a4604ba2ab (patch) | |
tree | e110c677106bd98948ba93d76bc3f9c32eb90e74 | |
parent | f2ced43a43178713b57b7840afb0fe1bb432a22a (diff) | |
parent | 7b107cb1805350b7e1214a1dd58b4fea55613f57 (diff) |
Merge pull request #19464 from bojidar-bg/19448-fix-subproperty-handling
Fix bug in animationplayer editor not using subproperties properly
-rw-r--r-- | editor/animation_track_editor.cpp | 58 | ||||
-rw-r--r-- | scene/animation/animation_player.cpp | 6 |
2 files changed, 24 insertions, 40 deletions
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index ffa179b093..4c4830ad7a 100644 --- a/editor/animation_track_editor.cpp +++ b/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++) { diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index b6988c08db..2782354432 100644 --- a/scene/animation/animation_player.cpp +++ b/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]; |