BitmapFontFileContent.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 System.Collections.Generic;
  5. using System.Runtime.InteropServices;
  6. namespace MonoGame.Extended.Content.BitmapFonts;
  7. public sealed class BitmapFontFileContent
  8. {
  9. public string Path;
  10. public HeaderBlock Header;
  11. public CommonBlock Common;
  12. public InfoBlock Info;
  13. public string FontName;
  14. public readonly List<string> Pages = new List<string>();
  15. public readonly List<CharacterBlock> Characters = new List<CharacterBlock>();
  16. public readonly List<KerningPairsBlock> Kernings = new List<KerningPairsBlock>();
  17. #region BitmapFont File Content Block Definitions
  18. [StructLayout(LayoutKind.Explicit)]
  19. public struct HeaderBlock
  20. {
  21. public const int StructSize = 4;
  22. [FieldOffset(0)] public byte B;
  23. [FieldOffset(1)] public byte M;
  24. [FieldOffset(2)] public byte F;
  25. [FieldOffset(3)] public byte Version;
  26. public readonly bool IsValid => B == 0x42 && M == 0x4D && F == 0x46 && Version == 3;
  27. }
  28. [StructLayout(LayoutKind.Explicit)]
  29. public struct InfoBlock
  30. {
  31. public const int StructSize = 14;
  32. [FieldOffset(0)] public short FontSize;
  33. [FieldOffset(2)] public byte BitField;
  34. [FieldOffset(3)] public byte CharSet;
  35. [FieldOffset(4)] public ushort StretchH;
  36. [FieldOffset(6)] public byte AA;
  37. [FieldOffset(7)] public byte PaddingUp;
  38. [FieldOffset(8)] public byte PaddingRight;
  39. [FieldOffset(9)] public byte PaddingDown;
  40. [FieldOffset(10)] public byte PaddingLeft;
  41. [FieldOffset(11)] public byte SpacingHoriz;
  42. [FieldOffset(12)] public byte SpacingVert;
  43. [FieldOffset(13)] public byte Outline;
  44. }
  45. [StructLayout(LayoutKind.Explicit)]
  46. public struct CharacterBlock
  47. {
  48. public const int StructSize = 20;
  49. [FieldOffset(0)] public uint ID;
  50. [FieldOffset(4)] public ushort X;
  51. [FieldOffset(6)] public ushort Y;
  52. [FieldOffset(8)] public ushort Width;
  53. [FieldOffset(10)] public ushort Height;
  54. [FieldOffset(12)] public short XOffset;
  55. [FieldOffset(14)] public short YOffset;
  56. [FieldOffset(16)] public short XAdvance;
  57. [FieldOffset(18)] public byte Page;
  58. [FieldOffset(19)] public byte Chnl;
  59. }
  60. [StructLayout(LayoutKind.Explicit)]
  61. public struct CommonBlock
  62. {
  63. public const int StructSize = 15;
  64. [FieldOffset(0)] public ushort LineHeight;
  65. [FieldOffset(2)] public ushort Base;
  66. [FieldOffset(4)] public ushort ScaleW;
  67. [FieldOffset(6)] public ushort ScaleH;
  68. [FieldOffset(8)] public ushort Pages;
  69. [FieldOffset(10)] public byte BitField;
  70. [FieldOffset(11)] public byte AlphaChnl;
  71. [FieldOffset(12)] public byte RedChnl;
  72. [FieldOffset(13)] public byte GreenChnl;
  73. [FieldOffset(14)] public byte BlueChnl;
  74. }
  75. [StructLayout(LayoutKind.Explicit)]
  76. public struct KerningPairsBlock
  77. {
  78. public const int StructSize = 10;
  79. [FieldOffset(0)] public uint First;
  80. [FieldOffset(4)] public uint Second;
  81. [FieldOffset(8)] public short Amount;
  82. }
  83. #endregion BitmapFont File Content Block Definitions
  84. }