|
|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using UnityEngine;
- using System.Collections;
- namespace LuaFramework
- {
- public class DynamicFontTextureRebuildTracker : MonoBehaviour
- {
- private class FontUpdateNode
- {
- private bool m_FontTextureRebuilt = false;
- private Font m_FontRebuilt = null;
-
- public FontUpdateNode(Font font)
- {
- m_FontRebuilt = font;
- Validate();
- }
-
- public void Validate()
- {
- if (null == m_FontRebuilt)
- {
- m_FontTextureRebuilt = false;
- return;
- }
-
- m_FontTextureRebuilt = true;
- }
-
- public void Invalidate()
- {
- m_FontTextureRebuilt = false;
- }
-
- public bool NeedUpdate
- {
- get { return m_FontTextureRebuilt && (null != m_FontRebuilt); }
- }
-
- public Font font
- {
- get { return m_FontRebuilt; }
- }
- }
-
- private System.Reflection.MethodInfo m_RebuildForFont = null;
- private List<FontUpdateNode> m_FontUpdateList = new List<FontUpdateNode>();
-
- private static DynamicFontTextureRebuildTracker m_Instance = null;
-
- void Awake()
- {
- if (null != m_Instance)
- {
- LogManager.LogError("There is only one DynamicFontTextureRebuildTracker instance allowed!");
- Destroy(gameObject);
- return;
- }
-
- m_Instance = this;
- }
-
- // Use this for initialization
- void Start()
- {
- Font.textureRebuilt += OnFontTextureRebuilt;
-
- System.Type fontUpdateTrackerType = typeof(UnityEngine.UI.FontUpdateTracker);
- m_RebuildForFont = fontUpdateTrackerType.GetMethod("RebuildForFont", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
- Debug.Log("Get RebuildForFont method is: " + m_RebuildForFont);
- }
-
- // Update is called once per frame
- void LateUpdate()
- {
- if (null == m_RebuildForFont)
- {
- return;
- }
-
- for (int i = 0; i < m_FontUpdateList.Count; i++)
- {
- FontUpdateNode node = m_FontUpdateList[i];
- if (node.NeedUpdate)
- {
- Font font = node.font;
-
- m_RebuildForFont.Invoke(null, new object[] { font });
-
- // Log rebuild.
- // Texture fontTexture = font.material.mainTexture;
- // Debug.Log(string.Format("Texture of dynamic font \"{0}\" is enlarged to {1}x{2}.", font.name, fontTexture.width, fontTexture.height));
-
- node.Invalidate();
- }
- }
- }
-
- void OnDestroy()
- {
- Font.textureRebuilt -= OnFontTextureRebuilt;
- }
-
- private void OnFontTextureRebuilt(Font font)
- {
- bool findThisFont = false;
- for (int i = 0; i < m_FontUpdateList.Count; i++)
- {
- FontUpdateNode node = m_FontUpdateList[i];
- if (node.font == font)
- {
- node.Validate();
- findThisFont = true;
- break;
- }
- }
-
- if (!findThisFont)
- {
- m_FontUpdateList.Add(new FontUpdateNode(font));
- }
- }
- }
- }
|