public static Atlas FromAtlas(string path, Atlas.AtlasDataFormat format) { Atlas atlas = new Atlas(); atlas.Sources = new List <Texture2D>(); Atlas.ReadAtlasData(atlas, path, format); return(atlas); }
public AtlasInfo(string path, Atlas.AtlasDataFormat format) { this.Path = path; this.Format = format; }
private static void ReadAtlasData(Atlas atlas, string path, Atlas.AtlasDataFormat format) { switch (format) { //case Atlas.AtlasDataFormat.TexturePacker_Sparrow: // XmlElement xml1 = Util.LoadContentXML(path)["TextureAtlas"]; // string path2_1 = xml1.Attr("imagePath", ""); // VirtualTexture texture1 = VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), path2_1)); // MTexture parent1 = new MTexture(texture1); // atlas.Sources.Add(texture1); // IEnumerator enumerator1 = xml1.GetElementsByTagName("SubTexture").GetEnumerator(); // try // { // while (enumerator1.MoveNext()) // { // XmlElement current = (XmlElement)enumerator1.Current; // string atlasPath = current.Attr("name"); // Rectangle clipRect = current.Rect(); // atlas.textures[atlasPath] = !current.HasAttr("frameX") ? new MTexture(parent1, atlasPath, clipRect) : new MTexture(parent1, atlasPath, clipRect, new Vector2((float)-current.AttrInt("frameX"), (float)-current.AttrInt("frameY")), current.AttrInt("frameWidth"), current.AttrInt("frameHeight")); // } // break; // } // finally // { // if (enumerator1 is IDisposable disposable) // disposable.Dispose(); // } //case Atlas.AtlasDataFormat.CrunchXml: // IEnumerator enumerator2 = Calc.LoadContentXML(path)[nameof(atlas)].GetEnumerator(); // try // { // while (enumerator2.MoveNext()) // { // XmlElement current = (XmlElement)enumerator2.Current; // string str = current.Attr("n", ""); // VirtualTexture texture2 = VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), str + ".png")); // MTexture parent2 = new MTexture(texture2); // atlas.Sources.Add(texture2); // foreach (XmlElement xml2 in (XmlNode)current) // { // string atlasPath = xml2.Attr("n"); // Rectangle clipRect = new Rectangle(xml2.AttrInt("x"), xml2.AttrInt("y"), xml2.AttrInt("w"), xml2.AttrInt("h")); // atlas.textures[atlasPath] = !xml2.HasAttr("fx") ? new MTexture(parent2, atlasPath, clipRect) : new MTexture(parent2, atlasPath, clipRect, new Vector2((float)-xml2.AttrInt("fx"), (float)-xml2.AttrInt("fy")), xml2.AttrInt("fw"), xml2.AttrInt("fh")); // } // } // break; // } // finally // { // if (enumerator2 is IDisposable disposable) // disposable.Dispose(); // } //case Atlas.AtlasDataFormat.CrunchBinary: // using (FileStream fileStream = File.OpenRead(Path.Combine(Engine.ContentDirectory, path))) // { // BinaryReader stream = new BinaryReader((Stream)fileStream); // short num1 = stream.ReadInt16(); // for (int index1 = 0; index1 < (int)num1; ++index1) // { // string str = stream.ReadNullTerminatedString(); // VirtualTexture texture2 = VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), str + ".png")); // atlas.Sources.Add(texture2); // MTexture parent2 = new MTexture(texture2); // short num2 = stream.ReadInt16(); // for (int index2 = 0; index2 < (int)num2; ++index2) // { // string atlasPath = stream.ReadNullTerminatedString(); // short num3 = stream.ReadInt16(); // short num4 = stream.ReadInt16(); // short num5 = stream.ReadInt16(); // short num6 = stream.ReadInt16(); // short num7 = stream.ReadInt16(); // short num8 = stream.ReadInt16(); // short num9 = stream.ReadInt16(); // short num10 = stream.ReadInt16(); // atlas.textures[atlasPath] = new MTexture(parent2, atlasPath, new Rectangle((int)num3, (int)num4, (int)num5, (int)num6), new Vector2((float)-num7, (float)-num8), (int)num9, (int)num10); // } // } // break; // } //case Atlas.AtlasDataFormat.CrunchXmlOrBinary: // if (File.Exists(Path.Combine(Engine.ContentDirectory, path + ".bin"))) // { // Atlas.ReadAtlasData(atlas, path + ".bin", Atlas.AtlasDataFormat.CrunchBinary); // break; // } // Atlas.ReadAtlasData(atlas, path + ".xml", Atlas.AtlasDataFormat.CrunchXml); // break; //case Atlas.AtlasDataFormat.CrunchBinaryNoAtlas: // using (FileStream fileStream = File.OpenRead(Path.Combine(Engine.ContentDirectory, path + ".bin"))) // { // BinaryReader stream = new BinaryReader((Stream)fileStream); // short num1 = stream.ReadInt16(); // for (int index1 = 0; index1 < (int)num1; ++index1) // { // string path2_2 = stream.ReadNullTerminatedString(); // string path1 = Path.Combine(Path.GetDirectoryName(path), path2_2); // short num2 = stream.ReadInt16(); // for (int index2 = 0; index2 < (int)num2; ++index2) // { // string index3 = stream.ReadNullTerminatedString(); // stream.ReadInt16(); // stream.ReadInt16(); // stream.ReadInt16(); // stream.ReadInt16(); // short num3 = stream.ReadInt16(); // short num4 = stream.ReadInt16(); // short num5 = stream.ReadInt16(); // short num6 = stream.ReadInt16(); // VirtualTexture texture2 = VirtualContent.CreateTexture(Path.Combine(path1, index3 + ".png")); // atlas.Sources.Add(texture2); // atlas.textures[index3] = new MTexture(texture2, new Vector2((float)-num3, (float)-num4), (int)num5, (int)num6); // } // } // break; // } case Atlas.AtlasDataFormat.Packer: using (FileStream fileStream = File.OpenRead(Path.Combine(Util.GAME_PATH_CONTENT, path + ".meta"))) { BinaryReader binaryReader = new BinaryReader((Stream)fileStream); binaryReader.ReadInt32(); binaryReader.ReadString(); binaryReader.ReadInt32(); short num1 = binaryReader.ReadInt16(); for (int index1 = 0; index1 < (int)num1; ++index1) { string str = binaryReader.ReadString(); string filePath = Path.Combine(Util.GAME_PATH_CONTENT, Path.GetDirectoryName(path), str + ".data"); Texture2D texture2D = ReadData(filePath); //Texture2D texture2 = null;//VirtualContent.CreateTexture(Path.Combine(Path.GetDirectoryName(path), str + ".data")); atlas.Sources.Add(texture2D); //byte[] _bytes = texture2D.EncodeToPNG(); //System.IO.File.WriteAllBytes("F://test.png", _bytes); MTexture parent2 = new MTexture(texture2D); short num2 = binaryReader.ReadInt16(); for (int index2 = 0; index2 < (int)num2; ++index2) { string atlasPath = binaryReader.ReadString().Replace('\\', '/'); short x = binaryReader.ReadInt16(); short y = binaryReader.ReadInt16(); short w = binaryReader.ReadInt16(); short h = binaryReader.ReadInt16(); short ox = binaryReader.ReadInt16(); short oy = binaryReader.ReadInt16(); short rw = binaryReader.ReadInt16(); short rh = binaryReader.ReadInt16(); atlas.textures[atlasPath] = new MTexture(parent2, atlasPath, new Rect((int)x, (int)y, (int)w, (int)h), new Vector2((float)-ox, (float)-oy), (int)rw, (int)rh); } } if (fileStream.Position >= fileStream.Length || !(binaryReader.ReadString() == "LINKS")) { break; } short num11 = binaryReader.ReadInt16(); for (int index = 0; index < (int)num11; ++index) { string key = binaryReader.ReadString(); string str = binaryReader.ReadString(); atlas.links.Add(key, str); } break; } case Atlas.AtlasDataFormat.PackerNoAtlas: using (FileStream fileStream = File.OpenRead(Path.Combine(Util.GAME_PATH_CONTENT, path + ".meta"))) { BinaryReader binaryReader = new BinaryReader((Stream)fileStream); binaryReader.ReadInt32(); binaryReader.ReadString(); binaryReader.ReadInt32(); short num1 = binaryReader.ReadInt16(); for (int index1 = 0; index1 < (int)num1; ++index1) { string path2_2 = binaryReader.ReadString(); string path1 = Path.Combine(Path.GetDirectoryName(path), path2_2); short num2 = binaryReader.ReadInt16(); for (int index2 = 0; index2 < (int)num2; ++index2) { string str = binaryReader.ReadString().Replace('\\', '/'); binaryReader.ReadInt16(); binaryReader.ReadInt16(); binaryReader.ReadInt16(); binaryReader.ReadInt16(); short num3 = binaryReader.ReadInt16(); short num4 = binaryReader.ReadInt16(); short num5 = binaryReader.ReadInt16(); short num6 = binaryReader.ReadInt16(); string filePath = Path.Combine(Util.GAME_PATH_CONTENT, path1, str + ".data"); Texture2D texture2D = ReadData(filePath); atlas.Sources.Add(texture2D); MTexture parent2 = new MTexture(texture2D); atlas.textures[str] = new MTexture(parent2, -num3, -num4, (int)num5, (int)num6); atlas.textures[str].AtlasPath = str; } } if (fileStream.Position >= fileStream.Length || !(binaryReader.ReadString() == "LINKS")) { break; } short num7 = binaryReader.ReadInt16(); for (int index = 0; index < (int)num7; ++index) { string key = binaryReader.ReadString(); string str = binaryReader.ReadString(); atlas.links.Add(key, str); } break; } default: throw new NotImplementedException(); } }
private static void ReadAtlasData(Atlas atlas, string path, Atlas.AtlasDataFormat format) { switch (format) { case Atlas.AtlasDataFormat.TexturePacker_Sparrow: case Atlas.AtlasDataFormat.CrunchXml: case Atlas.AtlasDataFormat.CrunchBinary: case Atlas.AtlasDataFormat.CrunchXmlOrBinary: case Atlas.AtlasDataFormat.CrunchBinaryNoAtlas: // Celeste never use these types. throw new NotImplementedException(); break; case Atlas.AtlasDataFormat.Packer: goto IL_521; case Atlas.AtlasDataFormat.PackerNoAtlas: goto IL_67A; default: throw new NotImplementedException(); IL_521: using (FileStream fileStream3 = File.OpenRead(Path.Combine(Celeste.ContentDirectory, path + ".meta"))) { BinaryReader binaryReader3 = new BinaryReader(fileStream3); binaryReader3.ReadInt32(); binaryReader3.ReadString(); binaryReader3.ReadInt32(); short num9 = binaryReader3.ReadInt16(); for (int m = 0; m < (int)num9; m++) { string str3 = binaryReader3.ReadString(); VirtualTexture virtualTexture5 = new VirtualTexture(Path.Combine(Path.GetDirectoryName(path), str3 + ".data")); atlas.Sources.Add(virtualTexture5); short num10 = binaryReader3.ReadInt16(); for (int n = 0; n < (int)num10; n++) { string text5 = binaryReader3.ReadString().Replace('\\', '/'); short x2 = binaryReader3.ReadInt16(); short y2 = binaryReader3.ReadInt16(); short width3 = binaryReader3.ReadInt16(); short height3 = binaryReader3.ReadInt16(); short num11 = binaryReader3.ReadInt16(); short num12 = binaryReader3.ReadInt16(); short width4 = binaryReader3.ReadInt16(); short height4 = binaryReader3.ReadInt16(); } } return; } IL_67A: using (FileStream fileStream4 = File.OpenRead(Path.Combine(Celeste.ContentDirectory, path + ".meta"))) { BinaryReader binaryReader4 = new BinaryReader(fileStream4); binaryReader4.ReadInt32(); binaryReader4.ReadString(); binaryReader4.ReadInt32(); short num13 = binaryReader4.ReadInt16(); for (int num14 = 0; num14 < (int)num13; num14++) { string path5 = binaryReader4.ReadString(); string path6 = Path.Combine(Path.GetDirectoryName(path), path5); short num15 = binaryReader4.ReadInt16(); for (int num16 = 0; num16 < (int)num15; num16++) { string text6 = binaryReader4.ReadString().Replace('\\', '/'); binaryReader4.ReadInt16(); binaryReader4.ReadInt16(); binaryReader4.ReadInt16(); binaryReader4.ReadInt16(); short num17 = binaryReader4.ReadInt16(); short num18 = binaryReader4.ReadInt16(); short frameWidth2 = binaryReader4.ReadInt16(); short frameHeight2 = binaryReader4.ReadInt16(); VirtualTexture virtualTexture6 = new VirtualTexture(Path.Combine(path6, text6 + ".data")); atlas.Sources.Add(virtualTexture6); } } return; } } }