summaryrefslogtreecommitdiffstats
path: root/tools/collada/collada.cpp
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-12-02 14:02:41 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-12-02 14:02:41 -0300
commite361e8539c889d3ca66e77ebb5d0ceb61d17f49d (patch)
treee34bb70d58e8d023df34c3e6744b5cdfa866ef7d /tools/collada/collada.cpp
parent9d5a2cb8470d538fa33f9f7b4d6cdd5390b3b70b (diff)
downloadredot-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.cpp37
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]);
}