//---------------------------------------------- 
 | 
//            NGUI: Next-Gen UI kit 
 | 
// Copyright © 2011-2014 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; 
 | 
    } 
 | 
} 
 |