SymbolLabel.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. namespace WXB
  6. {
  7. [RequireComponent(typeof(RectTransform))]
  8. [AddComponentMenu("UI/SymbolLabel")]
  9. public class SymbolLabel : SymbolText
  10. {
  11. protected override void Awake()
  12. {
  13. base.Awake();
  14. m_textDirty = false;
  15. }
  16. protected override void SetTextDirty()
  17. {
  18. }
  19. public override void SetLayoutDirty()
  20. {
  21. base.SetLayoutDirty();
  22. SetMaterialDirty();
  23. SetRenderDirty();
  24. m_layoutDirty = true;
  25. m_textDirty = false;
  26. }
  27. public override string text
  28. {
  29. set
  30. {
  31. throw new NotSupportedException("text");
  32. }
  33. }
  34. [SerializeField]
  35. int m_MaxElement = 30; // 最大元素个数
  36. public int MaxElement
  37. {
  38. get { return m_MaxElement; }
  39. set
  40. {
  41. m_MaxElement = value;
  42. }
  43. }
  44. public void Append(string text)
  45. {
  46. LinkedListNode<NodeBase> itor = mNodeList.Last;
  47. int endl = 0;
  48. if (itor != null)
  49. {
  50. endl = (int)(itor.Value.userdata);
  51. itor = mNodeList.First;
  52. while (itor != null)
  53. {
  54. if (endl - ((int)itor.Value.userdata) >= MaxElement)
  55. {
  56. // 要移除掉
  57. itor.Value.Release();
  58. mNodeList.RemoveFirst();
  59. itor = mNodeList.First;
  60. }
  61. else
  62. {
  63. break;
  64. }
  65. }
  66. }
  67. ++endl;
  68. s_nodebases.Clear();
  69. Parser.parser(this, text, CreateConfig(), s_nodebases, getExternalNode);
  70. s_nodebases.ForEach((NodeBase nb) =>
  71. {
  72. nb.userdata = endl;
  73. mNodeList.AddLast(nb);
  74. });
  75. s_nodebases.back().setNewLine(true);
  76. s_nodebases.Clear();
  77. SetRenderDirty();
  78. SetLayoutDirty();
  79. }
  80. }
  81. }