// ---- METHODS (PRIVATE) -------------------------------------------------------------------------------------- private static void Main(string[] args) { KclFile kcl = new KclFile(@"D:\Archive\Wii U\Roms\MK8\content\course\Gu_FirstCircuit\course.kcl"); kcl.Save(@"D:\Archive\Wii U\Roms\MK8\content\course\Gu_FirstCircuit\course.kcl.new"); //LoadFiles<KclFile>("course.kcl"); }
private void Export(object sender, EventArgs args) { if (KclFile == null) { return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Supported Formats|*.obj"; sfd.FileName = Path.GetFileNameWithoutExtension(Text) + ".obj"; sfd.DefaultExt = ".obj"; if (sfd.ShowDialog() == DialogResult.OK) { var obj = KclFile.CreateGenericModel(); obj.Save(sfd.FileName, true); } }
public void Read(byte[] file_data) { try { kcl = new KclFile(new MemoryStream(file_data), true, false, Syroot.BinaryData.ByteOrder.LittleEndian); } catch { kcl = new KclFile(new MemoryStream(file_data), true, false, Syroot.BinaryData.ByteOrder.BigEndian); } AllFlags.Clear(); int CurModelIndx = 0; foreach (KclModel mdl in kcl.Models) { KCLModel kclmodel = new KCLModel(); kclmodel.Text = "Model " + CurModelIndx; KclFace[] indicesArray = mdl.Faces; int ft = 0; foreach (KclFace f in mdl.Faces) { Vertex vtx = new Vertex(); Vertex vtx2 = new Vertex(); Vertex vtx3 = new Vertex(); Vector3 CrossA = Vector3.Cross(Vec3F_To_Vec3(mdl.Normals[f.Normal1Index]), Vec3F_To_Vec3(mdl.Normals[f.DirectionIndex])); Vector3 CrossB = Vector3.Cross(Vec3F_To_Vec3(mdl.Normals[f.Normal2Index]), Vec3F_To_Vec3(mdl.Normals[f.DirectionIndex])); Vector3 CrossC = Vector3.Cross(Vec3F_To_Vec3(mdl.Normals[f.Normal3Index]), Vec3F_To_Vec3(mdl.Normals[f.DirectionIndex])); Vector3 normal_a = Vec3F_To_Vec3(mdl.Normals[f.Normal1Index]); Vector3 normal_b = Vec3F_To_Vec3(mdl.Normals[f.Normal2Index]); Vector3 normal_c = Vec3F_To_Vec3(mdl.Normals[f.Normal3Index]); float result1 = Vector3.Dot(new Vector3(CrossB.X, CrossB.Y, CrossB.Z), (new Vector3(normal_c.X, normal_c.Y, normal_c.Z))); float result2 = Vector3.Dot(new Vector3(CrossA.X, CrossA.Y, CrossA.Z), (new Vector3(normal_c.X, normal_c.Y, normal_c.Z))); Vector3 pos = Vec3F_To_Vec3(mdl.Positions[f.PositionIndex]); Vector3 nrm = Vec3F_To_Vec3(mdl.Normals[f.Normal1Index]); Vector3 Vertex1 = pos; Vector3 Vertex2 = pos + CrossB * (f.Length / result1); Vector3 Vertex3 = pos + CrossA * (f.Length / result2); vtx.pos = new Vector3(Vertex1.X, Vertex1.Y, Vertex1.Z); vtx2.pos = new Vector3(Vertex2.X, Vertex2.Y, Vertex2.Z); vtx3.pos = new Vector3(Vertex3.X, Vertex3.Y, Vertex3.Z); var dir = Vector3.Cross(Vertex2 - Vertex1, Vertex3 - Vertex1); var norm = Vector3.Normalize(dir); vtx.nrm = norm; vtx2.nrm = norm; vtx3.nrm = norm; KCLModel.Face face = new KCLModel.Face(); face.Text = f.CollisionFlags.ToString(); face.MaterialFlag = f.CollisionFlags; Color color = SetMaterialColor(face); AllFlags.Add(face.MaterialFlag); Vector3 ColorSet = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f); vtx.col = new Vector3(ColorSet); vtx2.col = new Vector3(ColorSet); vtx3.col = new Vector3(ColorSet); kclmodel.faces.Add(ft); kclmodel.faces.Add(ft + 1); kclmodel.faces.Add(ft + 2); ft += 3; kclmodel.vertices.Add(vtx); kclmodel.vertices.Add(vtx2); kclmodel.vertices.Add(vtx3); } models.Add(kclmodel); Nodes.Add(kclmodel); CurModelIndx++; } List <int> noDupes = AllFlags.Distinct().ToList(); Console.WriteLine("List of all material flags (Not duped)"); foreach (int mat in noDupes) { Console.WriteLine("Mat flag " + (CollisionType_MK8D)mat); } }
public void Save(System.IO.Stream stream) { KclFile.Save(stream); SaveAttributeByml(); }