diff options
author | Juan Linietsky <reduzio@gmail.com> | 2014-12-02 14:02:41 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2014-12-02 14:02:41 -0300 |
commit | e361e8539c889d3ca66e77ebb5d0ceb61d17f49d (patch) | |
tree | e34bb70d58e8d023df34c3e6744b5cdfa866ef7d /tools/collada/collada.cpp | |
parent | 9d5a2cb8470d538fa33f9f7b4d6cdd5390b3b70b (diff) | |
download | redot-engine-e361e8539c889d3ca66e77ebb5d0ceb61d17f49d.tar.gz |
-Ability to ask for documents/pictures/etc system dirs.
-Fixes to animationplayer
-fixes to collada importer
Diffstat (limited to 'tools/collada/collada.cpp')
-rw-r--r-- | tools/collada/collada.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/tools/collada/collada.cpp b/tools/collada/collada.cpp index 7a842391a4..97e9f5c36d 100644 --- a/tools/collada/collada.cpp +++ b/tools/collada/collada.cpp @@ -2250,29 +2250,35 @@ void Collada::_joint_set_owner(Collada::Node *p_node, NodeSkeleton *p_owner) { } } -void Collada::_create_skeletons(Collada::Node **p_node) { +void Collada::_create_skeletons(Collada::Node **p_node,NodeSkeleton *p_skeleton) { Node *node = *p_node; - - if (node->type==Node::TYPE_JOINT) { - // ohohohoohoo it's a joint node, time to work! + if (!p_skeleton) { + + // ohohohoohoo it's a joint node, time to work! + NodeSkeleton *sk = memnew( NodeSkeleton ); + *p_node=sk; + sk->children.push_back(node); + sk->parent=node->parent; + node->parent=sk; + p_skeleton=sk; + } - NodeSkeleton *sk = memnew( NodeSkeleton ); - *p_node=sk; - sk->children.push_back(node); - sk->parent=node->parent; - node->parent=sk; - _joint_set_owner(node,sk); + NodeJoint *nj = static_cast<NodeJoint*>(node); + nj->owner=p_skeleton; } else { + p_skeleton=NULL; + } - for(int i=0;i<node->children.size();i++) { - _create_skeletons(&node->children[i]); - } + + for(int i=0;i<node->children.size();i++) { + _create_skeletons(&node->children[i],p_skeleton); } + } bool Collada::_remove_node(Node *p_parent,Node *p_node) { @@ -2325,6 +2331,9 @@ void Collada::_merge_skeletons(VisualScene *p_vscene,Node *p_node) { NodeJoint *nj = SAFE_CAST<NodeJoint*>(state.scene_map[nodeid]); + if (!nj->owner) { + print_line("no owner for: "+String(nodeid)); + } ERR_CONTINUE( !nj->owner ); //weird, node should have a skeleton owner skeletons.insert(nj->owner); @@ -2626,6 +2635,7 @@ void Collada::_optimize() { _create_skeletons(&vs.root_nodes[i]); } +#if 1 for(int i=0;i<vs.root_nodes.size();i++) { _merge_skeletons(&vs,vs.root_nodes[i]); } @@ -2653,6 +2663,7 @@ void Collada::_optimize() { } } +#endif for(int i=0;i<vs.root_nodes.size();i++) { _find_morph_nodes(&vs,vs.root_nodes[i]); } |