void CCharShape::SaveCharNodes (string dir, string filename) { CSPList list (MAX_CHAR_NODES + 10); string line, order, joint; TCharNode *node; TCharAction *act; int i, ii, aa; TVector3 rotation; bool rotflag; list.Add ("# Generated by Tuxracer tools"); list.Add (""); if (numMatlines > 0) { list.Add ("# Materials:"); for (i=0; i<numMatlines; i++) list.Add (Matlines[i]); list.Add (""); } list.Add ("# Nodes:"); for (i=1; i<numNodes; i++) { node = Nodes[i]; act = Actions[i]; if (node->parent_name >= node->node_name) Message ("wrong parent index"); line = "*[node] " + Int_StrN (node->node_name); line += " [par] " + Int_StrN (node->parent_name); order = act->order; rotation = NullVec; rotflag = false; if (order.size() > 0) { line += " [order] " + order; for (ii=0; ii<(int)order.size(); ii++) { aa = order.at(ii)-48; switch (aa) { case 0: line += " [trans] " + Vector_StrN (act->vec[ii], 2); break; case 4: line += " [scale] " + Vector_StrN (act->vec[ii], 2); break; case 1: rotation.x = act->dval[ii]; rotflag = true; break; case 2: rotation.y = act->dval[ii]; rotflag = true; break; case 3: rotation.z = act->dval[ii]; rotflag = true; break; case 5: line += " [vis] " + Float_StrN (act->dval[ii], 0); break; case 9: rotation.z = act->dval[ii]; rotflag = true; break; } } if (rotflag) line += " [rot] " + Vector_StrN (rotation, 2); } if (act->mat.size() > 0) line += " [mat] " + act->mat; if (node->joint.size() > 0) line += " [joint] " + node->joint; if (act->name.size() > 0) line += " [name] " + act->name; if (node->render_shadow) line += " [shad] 1"; list.Add (line); if (i<numNodes-3) { if (node->visible && !Nodes[i+1]->visible) list.Add (""); joint = Nodes[i+2]->joint; if (joint.size() > 0) list.Add ("# " + joint); } } list.Save (dir, filename); }
void CCharShape::SaveCharNodes (const string& dir, const string& filename) { CSPList list (MAX_CHAR_NODES + 10); list.Add ("# Generated by Tuxracer tools"); list.AddLine (); if (!Materials.empty()) { list.Add ("# Materials:"); for (size_t i=0; i<Materials.size(); i++) if (!Materials[i].matline.empty()) list.Add (Materials[i].matline); list.AddLine (); } list.Add ("# Nodes:"); for (size_t i=1; i<numNodes; i++) { TCharNode* node = Nodes[i]; TCharAction* act = node->action; if (node->parent_name >= node->node_name) Message ("wrong parent index"); string line = "*[node] " + Int_StrN ((int)node->node_name); line += " [par] " + Int_StrN ((int)node->parent_name); if (!act->order.empty()) { bool rotflag = false; TVector3d rotation; line += " [order] " + act->order; for (size_t ii=0; ii<act->order.size(); ii++) { int aa = act->order[ii]-48; switch (aa) { case 0: line += " [trans] " + Vector_StrN (act->vec[ii], 2); break; case 4: line += " [scale] " + Vector_StrN (act->vec[ii], 2); break; case 1: rotation.x = act->dval[ii]; rotflag = true; break; case 2: rotation.y = act->dval[ii]; rotflag = true; break; case 3: rotation.z = act->dval[ii]; rotflag = true; break; case 5: line += " [vis] " + Float_StrN (act->dval[ii], 0); break; case 9: rotation.z = act->dval[ii]; rotflag = true; break; } } if (rotflag) line += " [rot] " + Vector_StrN (rotation, 2); } if (!act->mat.empty()) line += " [mat] " + act->mat; if (!node->joint.empty()) line += " [joint] " + node->joint; if (!act->name.empty()) line += " [name] " + act->name; if (node->render_shadow) line += " [shad] 1"; list.Add (line); if (i<numNodes-3) { if (node->visible && !Nodes[i+1]->visible) list.AddLine (); const string& joint = Nodes[i+2]->joint; if (joint.empty()) list.Add ("# " + joint); } } list.Save (dir, filename); }