Author Topic: [NGUI 3.0.x] How to use RGBA Channel Font or Packed Font.  (Read 2917 times)

KimYongTae

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 1
    • View Profile
[NGUI 3.0.x] How to use RGBA Channel Font or Packed Font.
« on: December 05, 2013, 03:04:16 AM »
UILabel.cs
  1. public override void OnFill (BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols)
  2. {
  3. //…
  4. BetterList<Color> effectColorList = new BetterList<Color>();
  5.         Color effectColor = mEffectColor;
  6.         effectColor.a *= alpha * mPanel.finalAlpha;
  7. //…
  8. if (mFont != null) mFont.Print(text, verts, uvs, cols, effectColor, ref effectColorList);
  9. //…
  10. ApplyShadow(verts, uvs, cols, offset, end, fx, -fy, effectColorList);
  11. //…
  12. }
  13.  
  14. void ApplyShadow(BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols, int start, int end, float x, float y, BetterList<Color> effectColorList)
  15. {
  16. if (effectColorList.size == 0)
  17. {
  18.     Color c = mEffectColor;
  19.         c.a *= alpha * mPanel.finalAlpha;
  20.         Color32 col = (bitmapFont != null && bitmapFont.premultipliedAlpha) ? NGUITools.ApplyPMA(c) : c;
  21.  
  22.         for (int i = start; i < end; ++i)
  23.         {
  24.             verts.Add(verts.buffer[i]);
  25.             uvs.Add(uvs.buffer[i]);
  26.             cols.Add(cols.buffer[i]);
  27.  
  28.             Vector3 v = verts.buffer[i];
  29.             v.x += x;
  30.             v.y += y;
  31.             verts.buffer[i] = v;
  32.             cols.buffer[i] = col;
  33.         }
  34.     }
  35.     else
  36.     {
  37.         for (int i = start; i < end; ++i)
  38.         {
  39.             verts.Add(verts.buffer[i]);
  40.             uvs.Add(uvs.buffer[i]);
  41.             cols.Add(cols.buffer[i]);
  42.             effectColorList.Add(effectColorList.buffer[i]);
  43.  
  44.             Vector3 v = verts.buffer[i];
  45.             v.x += x;
  46.             v.y += y;
  47.             verts.buffer[i] = v;
  48.             cols.buffer[i] = effectColorList.buffer[i];
  49.         }
  50.     }
  51. }
  52.  


UIFont.cs
  1. public void Print(string text, BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols, Color effectColor, ref BetterList<Color> effectColorList)
  2. {
  3. //…
  4. mReplacement.Print(text, verts, uvs, cols, effectColor, ref effectColorList);
  5. //…
  6. if (glyph.channel == 0 || glyph.channel == 15)
  7.                     {
  8.                         if (NGUIText.current.gradient)
  9.                         {
  10.                             float min = NGUIText.current.size - glyph.offsetY;
  11.                             float max = min - glyph.height;
  12.  
  13.                             min /= NGUIText.current.size;
  14.                             max /= NGUIText.current.size;
  15.  
  16.                             s_c0 = Color.Lerp(gb, gt, min);
  17.                             s_c1 = Color.Lerp(gb, gt, max);
  18.  
  19.                             cols.Add(s_c0);
  20.                             cols.Add(s_c1);
  21.                             cols.Add(s_c1);
  22.                             cols.Add(s_c0);
  23.                         }
  24.                         else
  25.                         {
  26.                             for (int b = 0; b < 4; ++b) cols.Add(uc);
  27.                         }
  28.                     }
  29.                     else
  30.                     {
  31.                         Color col = gb;
  32.                         col *= 0.49f;
  33.  
  34.                         Color ge = effectColor;
  35.                         ge *= 0.49f;
  36.  
  37.                         switch (glyph.channel)
  38.                         {
  39.                             case 1: ge.b += 0.51f; col.b += 0.51f; break;
  40.                             case 2: ge.g += 0.51f; col.g += 0.51f; break;
  41.                             case 4: ge.r += 0.51f; col.r += 0.51f; break;
  42.                             case 8: ge.a += 0.51f; col.a += 0.51f; break;
  43.                         }
  44.  
  45.                         for (int b = 0; b < 4; ++b)
  46.                         {
  47.                             cols.Add(col);
  48.                             effectColorList.Add(ge);
  49.                         }
  50.                     }
  51. //…
  52. }
  53.