private void ExportCollada_NodeSub_Inner(XmlWriter xml, IReadOnlyList<string> boneNames, Kn5Node node) {
switch (node.NodeClass) {
case Kn5NodeClass.Base:
if (node.Children.Count == 1 && node.Children[0].NodeClass != Kn5NodeClass.Base) {
ExportCollada_NodeSub_Inner(xml, boneNames, node.Children[0]);
} else {
foreach (var t in node.Children) {
ExportCollada_NodeSub(xml, boneNames, t);
}
}
break;
case Kn5NodeClass.Mesh:
xml.WriteStartElement("instance_geometry");
xml.WriteAttributeStringSafe("url", $"#{node.Name}-mesh");
ExportCollada_NodeSub_BindMaterial(xml, node.MaterialId);
xml.WriteEndElement();
break;
case Kn5NodeClass.SkinnedMesh:
xml.WriteStartElement("instance_controller");
xml.WriteAttributeStringSafe("url", $"#{node.Name}Controller");
ExportCollada_NodeSub_BindMaterial(xml, node.MaterialId);
foreach (var bone in node.Bones) {
xml.WriteElementString("skeleton", $"#{bone.Name}");
}
xml.WriteEndElement(); // instance_controller
break;
}
}