diff --git a/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs b/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs index 5b363bb..6c067a7 100644 --- a/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs +++ b/Sledge.Formats.Map.Tests/Formats/TestWorldcraftFormat.cs @@ -1,10 +1,7 @@ -using System; -using System.IO; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using Sledge.Formats.Map.Formats; using Sledge.Formats.Map.Objects; -using Path = System.IO.Path; namespace Sledge.Formats.Map.Tests.Formats; @@ -37,4 +34,37 @@ public void TestRmf08Visgroups() var format = new WorldcraftRmfFormat(); var map = format.Read(file); } + + [TestMethod] + public void TestRmfQuakeToValveTextureConversion() + { + var format = new WorldcraftRmfFormat(); + + using var file16 = typeof(TestWorldcraftFormat).Assembly.GetManifestResourceStream($"Sledge.Formats.Map.Tests.Resources.rmf.test-cube-1.6.rmf"); + using var file22 = typeof(TestWorldcraftFormat).Assembly.GetManifestResourceStream($"Sledge.Formats.Map.Tests.Resources.rmf.test-cube-2.2.rmf"); + + var map16 = format.Read(file16); + var map22 = format.Read(file22); + + var solid16 = (Solid)map16.Worldspawn.Children[0]; + var solid22 = (Solid)map22.Worldspawn.Children[0]; + + foreach (var face22 in solid22.Faces) + { + var face16 = solid16.Faces.Single(x => x.Plane.Equals(face22.Plane)); + + Assert.AreEqual(face22.UAxis, face16.UAxis); + Assert.AreEqual(face22.VAxis, face16.VAxis); + Assert.AreEqual(face22.XScale, face16.XScale); + Assert.AreEqual(face22.YScale, face16.YScale); + Assert.AreEqual(face22.XShift, face16.XShift); + Assert.AreEqual(face22.YShift, face16.YShift); + Assert.AreEqual(face22.Rotation, face16.Rotation); + Assert.AreEqual(face22.ContentFlags, face16.ContentFlags); + Assert.AreEqual(face22.SurfaceFlags, face16.SurfaceFlags); + Assert.AreEqual(face22.Value, face16.Value); + Assert.AreEqual(face22.LightmapScale, face16.LightmapScale); + Assert.AreEqual(face22.SmoothingGroups, face16.SmoothingGroups); + } + } } \ No newline at end of file diff --git a/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-1.6.rmf b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-1.6.rmf new file mode 100644 index 0000000..fe40c88 Binary files /dev/null and b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-1.6.rmf differ diff --git a/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-2.2.rmf b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-2.2.rmf new file mode 100644 index 0000000..3f46bf9 Binary files /dev/null and b/Sledge.Formats.Map.Tests/Resources/rmf/test-cube-2.2.rmf differ diff --git a/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj b/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj index 290df2e..350ab67 100644 --- a/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj +++ b/Sledge.Formats.Map.Tests/Sledge.Formats.Map.Tests.csproj @@ -19,6 +19,8 @@ + + @@ -33,6 +35,8 @@ + + diff --git a/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs b/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs index 0ce1c37..26289ae 100644 --- a/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs +++ b/Sledge.Formats.Map/Formats/WorldcraftRmfFormat.cs @@ -293,9 +293,9 @@ private static Face ReadFace(RmfVersion version, BinaryReader br) if (version <= RmfVersion.Version18) { // We need to use quake editor logic to work out the texture axes, for that we need the plane data - see below + face.Rotation = br.ReadSingle(); face.XShift = br.ReadSingle(); face.YShift = br.ReadSingle(); - face.Rotation = br.ReadSingle(); } else // if (version == RmfVersion.Version22) { diff --git a/Sledge.Formats.Map/Sledge.Formats.Map.csproj b/Sledge.Formats.Map/Sledge.Formats.Map.csproj index f09fb2a..bde98f1 100644 --- a/Sledge.Formats.Map/Sledge.Formats.Map.csproj +++ b/Sledge.Formats.Map/Sledge.Formats.Map.csproj @@ -11,8 +11,8 @@ https://github.com/LogicAndTrick/sledge-formats Git half-life quake valve hammer worldcraft jackhammer jack rmf vmf map jmf - Add some basic factory classes to create known solid types - 1.2.3 + Fix incorrect loading of texture rotation and shift values for pre-2.2 RMF files + 1.2.4 full true