diff --git a/OpenRA.FileFormats/Map/MapStub.cs b/OpenRA.FileFormats/Map/MapStub.cs index 4ee22c8e15..f4fba25c6a 100644 --- a/OpenRA.FileFormats/Map/MapStub.cs +++ b/OpenRA.FileFormats/Map/MapStub.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Linq; +using System.Security.Cryptography; namespace OpenRA.FileFormats { @@ -45,10 +46,22 @@ namespace OpenRA.FileFormats var yaml = MiniYaml.FromStream(Container.GetContent("map.yaml")); FieldLoader.Load( this, new MiniYaml( null, yaml ) ); - Bounds = Rectangle.FromLTRB(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y); - Uid = Container.GetContent("map.uid").ReadAllText(); + Bounds = Rectangle.FromLTRB(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y); + Uid = ComputeHash(); } + string ComputeHash() + { + // UID is calculated by taking an SHA1 of the yaml and binary data + // Read the relevant data into a buffer + var data = Container.GetContent("map.yaml").ReadAllBytes() + .Concat(Container.GetContent("map.bin").ReadAllBytes()).ToArray(); + + // Take the SHA1 + using (var csp = SHA1.Create()) + return new string(csp.ComputeHash(data).SelectMany(a => a.ToString("x2")).ToArray()); + } + static object LoadWaypoints( MiniYaml y ) { var ret = new Dictionary(); diff --git a/OpenRA.Game/Map.cs b/OpenRA.Game/Map.cs index ff47fe1963..8ea8330004 100644 --- a/OpenRA.Game/Map.cs +++ b/OpenRA.Game/Map.cs @@ -225,7 +225,6 @@ namespace OpenRA SaveBinaryData(Path.Combine(filepath, "map.bin")); root.WriteToFile(Path.Combine(filepath, "map.yaml")); - SaveUid(Path.Combine(filepath, "map.uid")); } static byte ReadByte(Stream s) @@ -308,20 +307,6 @@ namespace OpenRA File.Move(filepath + ".tmp", filepath); } - public void SaveUid(string filename) - { - // UID is calculated by taking an SHA1 of the yaml and binary data - // Read the relevant data into a buffer - var data = Container.GetContent("map.yaml").ReadAllBytes() - .Concat(Container.GetContent("map.bin").ReadAllBytes()).ToArray(); - - // Take the SHA1 - using (var csp = SHA1.Create()) - Uid = new string(csp.ComputeHash(data).SelectMany(a => a.ToString("x2")).ToArray()); - - File.WriteAllText(filename, Uid); - } - public bool IsInMap(int2 xy) { return IsInMap(xy.X, xy.Y);