Texture2DAtlasReader.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright (c) Craftwork Games. All rights reserved.
  2. // Licensed under the MIT license.
  3. // See LICENSE file in the project root for full license information.
  4. using Microsoft.Xna.Framework;
  5. using Microsoft.Xna.Framework.Content;
  6. using Microsoft.Xna.Framework.Graphics;
  7. using MonoGame.Extended.Graphics;
  8. namespace MonoGame.Extended.Content.ContentReaders
  9. {
  10. public class Texture2DAtlasReader : ContentTypeReader<Texture2DAtlas>
  11. {
  12. protected override Texture2DAtlas Read(ContentReader reader, Texture2DAtlas existingInstance)
  13. {
  14. var imageAssetName = reader.ReadString();
  15. var texture = reader.ContentManager.Load<Texture2D>(reader.GetRelativeAssetName(imageAssetName));
  16. var atlas = new Texture2DAtlas(imageAssetName, texture);
  17. var regionCount = reader.ReadInt32();
  18. for (var i = 0; i < regionCount; i++)
  19. {
  20. int x = reader.ReadInt32();
  21. int y = reader.ReadInt32();
  22. int width = reader.ReadInt32();
  23. int height = reader.ReadInt32();
  24. string regionName = reader.ReadString();
  25. int rotated = reader.ReadInt32();
  26. int origWidth, origHeight, offsetX, offsetY;
  27. if (reader.ReadBoolean()) // trimmed sprite?
  28. {
  29. origWidth = reader.ReadInt32();
  30. origHeight = reader.ReadInt32();
  31. offsetX = reader.ReadInt32();
  32. offsetY = reader.ReadInt32();
  33. }
  34. else
  35. {
  36. origWidth = (rotated == 0) ? width : height;
  37. origHeight = (rotated == 0) ? height : width;
  38. offsetX = offsetY = 0;
  39. }
  40. Vector2? pivotPoint = null;
  41. if (reader.ReadBoolean()) // pivot point available?
  42. {
  43. float ppX = (float)reader.ReadDouble();
  44. float ppY = (float)reader.ReadDouble();
  45. pivotPoint = new Vector2(ppX, ppY);
  46. }
  47. atlas.CreateRegion(new Rectangle(x, y, width, height),
  48. rotated != 0,
  49. new Size(origWidth, origHeight),
  50. new Vector2(offsetX, offsetY),
  51. pivotPoint,
  52. regionName);
  53. }
  54. return atlas;
  55. }
  56. }
  57. }