public override void Export(Asset asset, string path) { var model = (asset as Model); var act = new ACT(); TravelTree(model.Root, ref act, true); act.Save(path); }
public override void Export(Asset asset, string path) { Model model = asset as Model; ACT act = new ACT(); TravelTree(model.Root, ref act); act.Save(path); }
// Meta/Aggregate functions public static void ProcessCar(string CarName, string DisplayName, string InRoot, string OutParent, float ChassisOffset = 0.5f, Vector3 frontOffset = null, Vector3 backOffset = null) { frontOffset = frontOffset ?? Vector3.Zero; backOffset = backOffset ?? Vector3.Zero; string outPath = OutParent + "\\" + CarName + "\\"; if (!Directory.Exists(outPath)) { Directory.CreateDirectory(outPath); } ProcessTEX(InRoot + "CARS\\TEX\\" + CarName + ".TEX", outPath, out CpsxTex[] psxTex); //ProcessTEX(InRoot + "RUNTIME\\GFX\\MODELS\\TEX\\" + CarName + ".TEX", outPath, out psxTex); ProcessMOD(InRoot + "CARS\\MOD\\" + CarName + ".MOD", outPath, psxTex, 0.00165f); int datCount = new DirectoryInfo(outPath).GetFiles("*_00.dat").Length; DAT dChassis = DAT.Load(outPath + CarName + "_cell00_00.dat"); DAT dFRWheel = DAT.Load(outPath + CarName + "_cell01_00.dat"); DAT dFLWheel = DAT.Load(outPath + CarName + "_cell01_00.dat"); DAT dRRWheel = DAT.Load(outPath + CarName + "_cell0" + (datCount > 2 ? "2" : "1") + "_00.dat"); DAT dRLWheel = DAT.Load(outPath + CarName + "_cell0" + (datCount > 2 ? "2" : "1") + "_00.dat"); DAT car = new DAT(); dChassis.DatMeshes[0].Name = DisplayName + "PSX.dat"; dFRWheel.DatMeshes[0].Name = "FRWHEEL.DAT"; dFLWheel.DatMeshes[0].Name = "FLWHEEL.DAT"; dRRWheel.DatMeshes[0].Name = "RRWHEEL.DAT"; dRLWheel.DatMeshes[0].Name = "RLWHEEL.DAT"; dChassis.DatMeshes[0].Mesh.Translate(new Vector3(0, -dChassis.DatMeshes[0].Mesh.Extents.Min.Y + (Math.Max(dFRWheel.DatMeshes[0].Mesh.Extents.Max.Y, dRRWheel.DatMeshes[0].Mesh.Extents.Max.Y) * ChassisOffset), 0)); //dFRWheel.DatMeshes[0].Mesh.Translate(new Vector3(frontOffset.X, dFRWheel.DatMeshes[0].Mesh.Extents.Max.Y, frontOffset.Z)); //dFLWheel.DatMeshes[0].Mesh.Translate(new Vector3(-frontOffset.X, dFLWheel.DatMeshes[0].Mesh.Extents.Max.Y, frontOffset.Z)); //dRRWheel.DatMeshes[0].Mesh.Translate(new Vector3(backOffset.X, dRRWheel.DatMeshes[0].Mesh.Extents.Max.Y, backOffset.Z)); //dRLWheel.DatMeshes[0].Mesh.Translate(new Vector3(-backOffset.X, dRLWheel.DatMeshes[0].Mesh.Extents.Max.Y, backOffset.Z)); dChassis.DatMeshes[0].Mesh.GenerateKDOP(18); SaveBoundingBox(dChassis.DatMeshes[0].Mesh.intersectionPoints, outPath + DisplayName + "PSX_BB.txt"); //ACT kdop = new ACT(); //kdop.AddRootNode("pointcloud"); //for (int i = 0; i < dChassis.DatMeshes[0].Mesh.intersectionPoints.Count; i++) //{ // Matrix3D m = Matrix3D.Identity; // m.Scale = 0.05f; // m.Position = dChassis.DatMeshes[0].Mesh.intersectionPoints[i]; // kdop.AddActor("p" + i, "Sphere_48", m, false); //} //kdop.Save("D:\\kdop.act"); dChassis.DatMeshes[0].Mesh.ProcessMesh(); Console.WriteLine(dChassis.DatMeshes[0].Mesh.Extents); car.DatMeshes.Add(dChassis.DatMeshes[0]); car.DatMeshes.Add(dFRWheel.DatMeshes[0]); car.DatMeshes.Add(dFLWheel.DatMeshes[0]); car.DatMeshes.Add(dRRWheel.DatMeshes[0]); car.DatMeshes.Add(dRLWheel.DatMeshes[0]); car.Optimise(); car.Save(outPath + DisplayName + "PSX.dat"); C2Mesh mSimple = new C2Mesh(); mSimple.BuildFromExtents(car.DatMeshes[0].Mesh.Extents); DAT dSimple = new DAT(new DatMesh(DisplayName + "PSX.1", mSimple)); dSimple.Save(outPath + "simple_" + DisplayName + "PSX.dat"); ACT aSimple = new ACT(); aSimple.AddActor(DisplayName + "PSX.1", DisplayName + "PSX.1", Matrix3D.Identity, true); aSimple.Save(outPath + "simple_" + DisplayName + "PSX.act"); dChassis.DatMeshes[0].Name = "SHELL"; DAT shell = new DAT(); shell.DatMeshes.Add(dChassis.DatMeshes[0]); shell.Optimise(); shell.Save(outPath + DisplayName + "PSXshell.dat"); ACT a = new ACT(); a.AddActor(DisplayName + "PSX.dat", DisplayName + "PSX.dat", Matrix3D.Identity, true); a.AddActor("RRWHEEL.ACT", "RRWHEEL.DAT", new Matrix3D(car.DatMeshes[3].Mesh.Centre + new Vector3(backOffset.X, dRRWheel.DatMeshes[0].Mesh.Extents.Max.Y, backOffset.Z)), false); a.AddActor("RLWHEEL.ACT", "RLWHEEL.DAT", new Matrix3D(car.DatMeshes[4].Mesh.Centre + new Vector3(-backOffset.X, dRLWheel.DatMeshes[0].Mesh.Extents.Max.Y, backOffset.Z)), false); a.AddPivot("FRPIVOT.ACT", "FRWHEEL.ACT", "FRWHEEL.DAT", new Matrix3D(car.DatMeshes[1].Mesh.Centre + new Vector3(frontOffset.X, dFRWheel.DatMeshes[0].Mesh.Extents.Max.Y, frontOffset.Z))); a.AddPivot("FLPIVOT.ACT", "FLWHEEL.ACT", "FLWHEEL.DAT", new Matrix3D(car.DatMeshes[2].Mesh.Centre + new Vector3(-frontOffset.X, dFLWheel.DatMeshes[0].Mesh.Extents.Max.Y, frontOffset.Z))); a.Save(outPath + DisplayName + "PSX.act"); }
public static void ProcessOBJ(string PathIn, string PathOut, float scale) { string pathIn = PathIn.Substring(0, PathIn.LastIndexOf("\\") + 1); string fileIn = PathIn.Replace(pathIn, ""); BinaryReader br = new BinaryReader(new FileStream(pathIn + fileIn, FileMode.Open)); bool bDebug = false; ACT a1 = new ACT(); ACT a2 = new ACT(); ACT a7 = new ACT(); ACT a8 = new ACT(); ACT a9 = new ACT(); ACT a13 = new ACT(); a1.AddRootNode("Type1"); a2.AddRootNode("Type2"); a7.AddRootNode("Type7"); a8.AddRootNode("Type8"); a9.AddRootNode("Type9"); a13.AddRootNode("Type13"); br.ReadInt32(); // always 0 int objCount = br.ReadInt32(); for (int i = 0; i < objCount; i++) { int oType = br.ReadInt32(); //switch (oType) //{ // case 1: // br.ReadBytes(108); // continue; // break; // case 2: // br.ReadBytes(108); // continue; // break; // case 7: // br.ReadBytes(108); // continue; // break; // case 8: // br.ReadBytes(108); // continue; // break; // case 9: // br.ReadBytes(108); // continue; // break; // case 10: // br.ReadBytes(108); // continue; // break; // case 12: // br.ReadBytes(108); // continue; // break; // case 13: // br.ReadBytes(108); // continue; // break; // case 14: // br.ReadBytes(108); // continue; // break; // default: // Console.WriteLine("Unknown type " + oType); // return; // break; //} if (bDebug) { Console.Write(fileIn + "\t"); Console.Write(oType + "\t"); Console.Write(i + "\t"); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte A not zero!"); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte B not zero!"); } Vector3 pos = new Vector3(-br.ReadInt32(), br.ReadInt32(), br.ReadInt32()) * scale; if (bDebug) { Console.Write(br.ReadInt32() + "\t"); Console.Write(br.ReadInt16() + "\t"); } else { br.ReadBytes(6); } int rotateY = br.ReadInt16(); if (bDebug) { Console.Write(rotateY + "\t"); Console.Write(br.ReadInt32() + "\t"); } else { br.ReadBytes(4); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte D not zero!"); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte E not zero!"); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte F not zero!"); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte G not zero!"); } if (br.ReadInt32() != 0) { Console.WriteLine("Byte H not zero!"); } int index = br.ReadInt16(); if (bDebug) { Console.Write(index + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt32() + "\t"); Console.Write(br.ReadInt32() + "\t"); Console.Write(br.ReadInt32() + "\t"); Console.Write(br.ReadInt32() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt16() + "\t"); Console.Write(br.ReadInt32() + "\t"); Console.Write(br.ReadInt32() + "\t"); Console.WriteLine(br.ReadInt32()); } else { br.ReadBytes(54); } switch (oType) { case 1: a1.AddActor("a1" + i, "Sphere_48", new Matrix3D(pos), false); break; case 2: Matrix3D m = Matrix3D.Identity; // Matrix3D.CreateRotationY(-rotateY / 11.4f); m.Position = pos; a2.AddActor("a2" + i, "cell" + index.ToString().PadLeft(2, "0"[0]) + "_00", m, false); break; case 7: a7.AddActor("a7" + i, "Sphere_48", new Matrix3D(pos), false); break; case 8: a8.AddActor("a8" + i, "Sphere_48", new Matrix3D(pos), false); break; case 9: a9.AddActor("a9" + i, "Sphere_48", new Matrix3D(pos), false); break; case 13: a13.AddActor("a13" + i, "Sphere_48", new Matrix3D(pos), false); break; } } a1.Save(PathOut + "\\1.act"); a2.Save(PathOut + "\\2.act"); a7.Save(PathOut + "\\7.act"); a8.Save(PathOut + "\\8.act"); a9.Save(PathOut + "\\9.act"); a13.Save(PathOut + "\\13.act"); br.Close(); }