public remBone Clone(bool mesh, bool childFrames, remParser parser, List <remMaterial> clonedMaterials, List <remMesh> clonedMeshes, List <remSkin> clonedSkins) { remBone frame = new remBone(Count); frame.name = name; frame.matrix = matrix; if (mesh) { remMesh remMesh = rem.FindMesh(this, parser.MESC); if (remMesh != null) { foreach (remId matId in remMesh.materials) { remMaterial mat = rem.FindMaterial(matId, parser.MATC); if (!clonedMaterials.Contains(mat)) { clonedMaterials.Add(mat.Clone()); } } remMesh clone = remMesh.Clone(true, true, parser, clonedSkins); clone.frame = frame.name; clonedMeshes.Add(clone); } } if (childFrames) { for (int i = 0; i < Count; i++) { frame.AddChild(this[i].Clone(mesh, true, parser, clonedMaterials, clonedMeshes, clonedSkins)); } } return(frame); }
public void MergeMaterial(remMaterial mat) { var newMat = mat.Clone(); bool found = false; for (int i = 0; i < Parser.MATC.Count; i++) { var oldMat = Parser.MATC[i]; if (oldMat.name == newMat.name) { Parser.MATC.ChildList.RemoveAt(i); Parser.MATC.ChildList.Insert(i, newMat); found = true; break; } } if (!found) { Parser.MATC.AddChild(newMat); } InitTextures(false, false); }