diff --git a/Bin/.gitignore b/Bevels/.gitignore similarity index 100% rename from Bin/.gitignore rename to Bevels/.gitignore diff --git a/Bin/BevelConverter/App.config b/Bevels/App.config similarity index 100% rename from Bin/BevelConverter/App.config rename to Bevels/App.config diff --git a/Bin/BevelConverter/BevelConverter.csproj b/Bevels/BevelGenerator.csproj similarity index 94% rename from Bin/BevelConverter/BevelConverter.csproj rename to Bevels/BevelGenerator.csproj index 82dd769..9ba9aa6 100644 --- a/Bin/BevelConverter/BevelConverter.csproj +++ b/Bevels/BevelGenerator.csproj @@ -7,8 +7,8 @@ {957A7717-A3CB-41B0-A17C-0E638017E915} Exe Properties - BevelConverter - BevelConverter + Bevels + Bevels v4.5.2 512 true @@ -33,9 +33,6 @@ 4 - - Packages\LZ4.dll - False Packages\RobloxFileFormat.dll diff --git a/Bin/BevelConverter/BevelConverter.sln b/Bevels/BevelGenerator.sln similarity index 86% rename from Bin/BevelConverter/BevelConverter.sln rename to Bevels/BevelGenerator.sln index 51f0199..870ffa1 100644 --- a/Bin/BevelConverter/BevelConverter.sln +++ b/Bevels/BevelGenerator.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BevelConverter", "BevelConverter.csproj", "{957A7717-A3CB-41B0-A17C-0E638017E915}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BevelGenerator", "BevelGenerator.csproj", "{957A7717-A3CB-41B0-A17C-0E638017E915}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Bin/BevelConverter/Extensions/Formatting.cs b/Bevels/Extensions/Formatting.cs similarity index 100% rename from Bin/BevelConverter/Extensions/Formatting.cs rename to Bevels/Extensions/Formatting.cs diff --git a/Bin/BevelConverter/Extensions/RegistryHelper.cs b/Bevels/Extensions/RegistryHelper.cs similarity index 100% rename from Bin/BevelConverter/Extensions/RegistryHelper.cs rename to Bevels/Extensions/RegistryHelper.cs diff --git a/Bin/BevelConverter/Geometry/Mesh.cs b/Bevels/Geometry/Mesh.cs similarity index 91% rename from Bin/BevelConverter/Geometry/Mesh.cs rename to Bevels/Geometry/Mesh.cs index c44b953..c4358b7 100644 --- a/Bin/BevelConverter/Geometry/Mesh.cs +++ b/Bevels/Geometry/Mesh.cs @@ -8,7 +8,7 @@ using System.Text.RegularExpressions; using RobloxFiles.DataTypes; -namespace BevelConverter +namespace BevelGenerator { public class Mesh { @@ -32,13 +32,15 @@ namespace BevelConverter return new Vector3(x, y, z); } - private static void CheckDefaultLODs(Mesh mesh) + private static Mesh CheckLOD(Mesh mesh) { if (mesh.NumLODs == 0) { mesh.NumLODs = 2; mesh.LODs = new List { 0, mesh.NumFaces }; } + + return mesh; } private static void LoadGeometry_Ascii(StringReader reader, Mesh mesh) @@ -99,7 +101,7 @@ namespace BevelConverter } } - CheckDefaultLODs(mesh); + CheckLOD(mesh); } private static void LoadGeometry_Binary(BinaryReader reader, Mesh mesh) @@ -125,7 +127,7 @@ namespace BevelConverter for (int i = 0; i < mesh.NumVerts; i++) { - Vertex vert = new Vertex() + var vert = new Vertex() { Position = ReadVector3(reader), Normal = ReadVector3(reader), @@ -134,12 +136,9 @@ namespace BevelConverter if (vertSize > 36) { - byte r = reader.ReadByte(), - g = reader.ReadByte(), - b = reader.ReadByte(), - a = reader.ReadByte(); + int rgba = reader.ReadInt32(); + int argb = (rgba << 24 | rgba >> 8); - int argb = (a << 24 | r << 16 | g << 8 | b); vert.Color = Color.FromArgb(argb); vert.HasColor = true; } @@ -165,13 +164,11 @@ namespace BevelConverter mesh.LODs.Add(lod); } } - else - { - CheckDefaultLODs(mesh); - } + + CheckLOD(mesh); } - public void AddLod(Mesh lodMesh) + public void AddLOD(Mesh lodMesh) { Verts.AddRange(lodMesh.Verts); @@ -232,11 +229,11 @@ namespace BevelConverter if (vertex.HasColor) { - Color color = vertex.Color; - writer.Write(color.R); - writer.Write(color.G); - writer.Write(color.B); - writer.Write(color.A); + var color = vertex.Color; + int argb = color.ToArgb(); + + int rgba = (argb << 8 | argb >> 24); + writer.Write(rgba); } else { @@ -293,13 +290,14 @@ namespace BevelConverter if (cmd == "v" || cmd == "vn") { - float x = float.Parse(buffer[1]), - y = float.Parse(buffer[2]), - z = float.Parse(buffer[3]); - - Vector3 value = new Vector3(x, y, z); + float[] input = buffer + .Skip(1) + .Select(float.Parse) + .ToArray(); + var value = new Vector3(input); var target = (cmd == "v" ? posTable : normTable); + target.Add(value); } else if (cmd == "f") @@ -340,8 +338,7 @@ namespace BevelConverter } } - CheckDefaultLODs(mesh); - return mesh; + return CheckLOD(mesh); } public static Mesh FromBuffer(byte[] data) diff --git a/Bin/BevelConverter/Geometry/Vertex.cs b/Bevels/Geometry/Vertex.cs similarity index 91% rename from Bin/BevelConverter/Geometry/Vertex.cs rename to Bevels/Geometry/Vertex.cs index cea73ca..643c7c3 100644 --- a/Bin/BevelConverter/Geometry/Vertex.cs +++ b/Bevels/Geometry/Vertex.cs @@ -1,7 +1,7 @@ using System.Drawing; using RobloxFiles.DataTypes; -namespace BevelConverter +namespace BevelGenerator { public class Vertex { diff --git a/Bin/BevelConverter/Program.cs b/Bevels/Program.cs similarity index 89% rename from Bin/BevelConverter/Program.cs rename to Bevels/Program.cs index 0d4b80f..267740b 100644 --- a/Bin/BevelConverter/Program.cs +++ b/Bevels/Program.cs @@ -7,12 +7,12 @@ using System.Text; using System.Windows.Forms; using RobloxFiles; +using RobloxFiles.Enums; using RobloxFiles.DataTypes; -using RobloxFiles.XmlFormat; using Microsoft.Win32; -namespace BevelConverter +namespace BevelGenerator { class Program { @@ -186,37 +186,45 @@ namespace BevelConverter static void ProcessFileArg(string filePath) { RobloxFile file = RobloxFile.Open(filePath); - Instance exportBin = file.FindFirstChild("ExportBin"); + var exportBin = file.FindFirstChild("ExportBin"); if (exportBin != null) exportBin.Name = "BevelCache"; else return; - Instance[] unions = exportBin.GetChildren() - .Where((child) => child.ClassName == "UnionOperation") - .OrderBy(child => child.Name) - .ToArray(); - + var unions = exportBin.GetChildrenOfType(); + for (int i = 0; i < unions.Length; i++) { - Instance union = unions[i]; + UnionOperation union = unions[i]; string name = union.Name; Console.WriteLine("Working on {0}... ({1}/{2})", union.Name, i, unions.Length); - union.ClassName = "MeshPart"; - - union.RemoveProperty("AssetId"); - union.RemoveProperty("MeshData"); - union.RemoveProperty("ChildData"); - union.RemoveProperty("UsePartColor"); - string meshId = ProcessInput(name); if (meshId == null) continue; - union.SetProperty("MeshId", meshId); + MeshPart bevelMesh = new MeshPart() + { + Name = name, + MeshId = meshId, + + Size = union.Size, + InitialSize = union.InitialSize, + RenderFidelity = RenderFidelity.Automatic, + + PhysicsData = union.PhysicsData, + CollisionFidelity = CollisionFidelity.Box, + PhysicalConfigData = union.PhysicalConfigData, + }; + + foreach (string tag in union.Tags) + bevelMesh.Tags.Add(tag); + + bevelMesh.Parent = exportBin; + union.Parent = null; } using (FileStream export = File.OpenWrite(filePath)) diff --git a/Bin/BevelConverter/Properties/AssemblyInfo.cs b/Bevels/Properties/AssemblyInfo.cs similarity index 93% rename from Bin/BevelConverter/Properties/AssemblyInfo.cs rename to Bevels/Properties/AssemblyInfo.cs index 4171a78..6dabb91 100644 --- a/Bin/BevelConverter/Properties/AssemblyInfo.cs +++ b/Bevels/Properties/AssemblyInfo.cs @@ -5,11 +5,11 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("BevelConverter")] +[assembly: AssemblyTitle("BevelGenerator")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("BevelConverter")] +[assembly: AssemblyProduct("BevelGenerator")] [assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/Bin/BevelConverter/Properties/Resources.Designer.cs b/Bevels/Properties/Resources.Designer.cs similarity index 95% rename from Bin/BevelConverter/Properties/Resources.Designer.cs rename to Bevels/Properties/Resources.Designer.cs index 0f22542..b324239 100644 --- a/Bin/BevelConverter/Properties/Resources.Designer.cs +++ b/Bevels/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace BevelConverter.Properties { +namespace BevelGenerator.Properties { using System; @@ -39,7 +39,7 @@ namespace BevelConverter.Properties { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BevelConverter.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Bevels.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/Bin/BevelConverter/Properties/Resources.resx b/Bevels/Properties/Resources.resx similarity index 100% rename from Bin/BevelConverter/Properties/Resources.resx rename to Bevels/Properties/Resources.resx diff --git a/Bin/BevelConverter/Resources/BevelPart.rbxm b/Bevels/Resources/BevelPart.rbxm similarity index 100% rename from Bin/BevelConverter/Resources/BevelPart.rbxm rename to Bevels/Resources/BevelPart.rbxm diff --git a/Bin/BevelConverter/Resources/Bevels.mesh b/Bevels/Resources/Bevels.mesh similarity index 100% rename from Bin/BevelConverter/Resources/Bevels.mesh rename to Bevels/Resources/Bevels.mesh