12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //----------------------------------------------
- // NGUI: Next-Gen UI kit
- // Copyright © 2011-2016 Tasharen Entertainment
- //----------------------------------------------
- using UnityEngine;
- using System.Collections.Generic;
- /// <summary>
- /// Glyph structure used by BMFont. For more information see http://www.angelcode.com/products/bmfont/
- /// </summary>
- [System.Serializable]
- public class BMGlyph
- {
- public int index; // Index of this glyph (used by BMFont)
- public int x; // Offset from the left side of the texture to the left side of the glyph
- public int y; // Offset from the top of the texture to the top of the glyph
- public int width; // Glyph's width in pixels
- public int height; // Glyph's height in pixels
- public int offsetX; // Offset to apply to the cursor's left position before drawing this glyph
- public int offsetY; // Offset to apply to the cursor's top position before drawing this glyph
- public int advance; // How much to move the cursor after printing this character
- public int channel; // Channel mask (in most cases this will be 15 (RGBA, 1+2+4+8)
- public List<int> kerning;
- /// <summary>
- /// Retrieves the special amount by which to adjust the cursor position, given the specified previous character.
- /// </summary>
- public int GetKerning (int previousChar)
- {
- if (kerning != null && previousChar != 0)
- {
- for (int i = 0, imax = kerning.Count; i < imax; i += 2)
- if (kerning[i] == previousChar)
- return kerning[i + 1];
- }
- return 0;
- }
- /// <summary>
- /// Add a new kerning entry to the character (or adjust an existing one).
- /// </summary>
- public void SetKerning (int previousChar, int amount)
- {
- if (kerning == null) kerning = new List<int>();
- for (int i = 0; i < kerning.Count; i += 2)
- {
- if (kerning[i] == previousChar)
- {
- kerning[i + 1] = amount;
- return;
- }
- }
- kerning.Add(previousChar);
- kerning.Add(amount);
- }
- /// <summary>
- /// Trim the glyph, given the specified minimum and maximum dimensions in pixels.
- /// </summary>
- public void Trim (int xMin, int yMin, int xMax, int yMax)
- {
- int x1 = x + width;
- int y1 = y + height;
- if (x < xMin)
- {
- int offset = xMin - x;
- x += offset;
- width -= offset;
- offsetX += offset;
- }
- if (y < yMin)
- {
- int offset = yMin - y;
- y += offset;
- height -= offset;
- offsetY += offset;
- }
- if (x1 > xMax) width -= x1 - xMax;
- if (y1 > yMax) height -= y1 - yMax;
- }
- }
|