Browse Source

got partial animation working. Has to look in detail later...

Asad M. Zaman 22 years ago
parent
commit
1395afcdd9

+ 21 - 0
pandatool/src/softegg/softNodeDesc.cxx

@@ -83,6 +83,27 @@ set_model(SAA_Elem *model) {
   _model = model;
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: SoftNodeDesc::set_parent
+//       Access: Public
+//  Description: Sometimes, parent is not known at node creation
+//               As soon as it is known, set the parent
+////////////////////////////////////////////////////////////////////
+void SoftNodeDesc::
+set_parent(SoftNodeDesc *parent) {
+  if (_parent) {
+    cout << "expected _parent to be null!?\n";
+    if (_parent == parent)
+      cout << "parent already set\n";
+    else {
+      cout << "current parent " << _parent->get_name() << " new parent " 
+           << parent << endl;
+    }
+    return;
+  }
+  _parent = parent;
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: SoftNodeDesc::has_model
 //       Access: Public

+ 1 - 0
pandatool/src/softegg/softNodeDesc.h

@@ -50,6 +50,7 @@ public:
   SoftNodeDesc(SoftNodeDesc *parent=NULL, const string &name = string());
   ~SoftNodeDesc();
 
+  void set_parent(SoftNodeDesc *parent);
   void set_model(SAA_Elem *model);
   bool has_model() const;
   SAA_Elem *get_model() const;

+ 20 - 4
pandatool/src/softegg/softNodeTree.cxx

@@ -322,6 +322,8 @@ EggGroup *SoftNodeTree::
 get_egg_group(SoftNodeDesc *node_desc) {
   nassertr(_egg_root != (EggGroupNode *)NULL, NULL);
 
+  cout << node_desc->_egg_group << endl;
+  cout << node_desc->_parent << endl;
   if (node_desc->_egg_group == (EggGroup *)NULL) {
     // We need to make a new group node.
     EggGroup *egg_group;
@@ -330,8 +332,15 @@ get_egg_group(SoftNodeDesc *node_desc) {
     if (node_desc->is_joint()) {
       egg_group->set_group_type(EggGroup::GT_joint);
     }
-    // For now lets add this group to egg_root.
-    _egg_root->add_child(egg_group);
+
+    if (!node_desc->_parent || node_desc->_parent == _root) {
+      // The parent is the root.
+      _egg_root->add_child(egg_group);
+    } else {
+      // The parent is another node.
+      EggGroup *parent_egg_group = get_egg_group(node_desc->_parent);
+      parent_egg_group->add_child(egg_group);
+    }
 
 #if 0
     SoftEggGroupUserData *parent_user_data = NULL;
@@ -562,23 +571,30 @@ build_node(SAA_Scene *scene, SAA_Elem *model) {
 ////////////////////////////////////////////////////////////////////
 SoftNodeDesc *SoftNodeTree::
 r_build_node(SoftNodeDesc *parent_node, const string &name) {
+  SoftNodeDesc *node_desc;
+
   // If we have already encountered this pathname, return the
   // corresponding MayaNodeDesc immediately.
   NodesByName::const_iterator ni = _nodes_by_name.find(name);
   if (ni != _nodes_by_name.end()) {
     cout << (*ni).first << endl;
-    return (*ni).second;
+    node_desc = (*ni).second;
+    node_desc->set_parent(parent_node);
+    return node_desc;
   }
 
   // Otherwise, we have to create it.  Do this recursively, so we
   // create each node along the path.
-  SoftNodeDesc *node_desc;
+  /*
   if (!parent_node) {
     node_desc = _root;
   }
   else {
+  */
     node_desc = new SoftNodeDesc(parent_node, name);
+    /*
   }
+    */
   cout << " node name : " << name << endl;
   _nodes.push_back(node_desc);