namespace textUtility { using System; using System.Collections; using System.Collections.Generic; using System.Linq; using textUtility; using UnityEngine; using Object = UnityEngine.Object; [Serializable] public class RichTextImageManager { #region Config [SerializeField] private bool Inited; [SerializeField] private RichText RichText; [SerializeField] public List Images; public List Vertices; #endregion public void Init(RichText richText) { if (Inited) { return; } else { Inited = true; } RichText = richText; Images = new List(); } public void ClearRenderTask() { for (int i = 0; i < Images.Count; i++) { if (Images[i] == null) { Images.RemoveAt(i--); continue; } Images[i].ClearMatches(); Images[i].gameObject.SetActive(false); } } public void RenderSprites(List baseMatches) { if (baseMatches.Count == 0) { return; } Dictionary> groupDictionary = new Dictionary>(); foreach (var baseMatch in baseMatches) { SpriteMatch spriteMatch = (SpriteMatch) baseMatch; if (groupDictionary.ContainsKey(spriteMatch.SpriteInfo.Sprite.texture)) { groupDictionary[spriteMatch.SpriteInfo.Sprite.texture].Add(spriteMatch); } else { groupDictionary.Add(spriteMatch.SpriteInfo.Sprite.texture, new List()); groupDictionary[spriteMatch.SpriteInfo.Sprite.texture].Add(spriteMatch); } } //int createCount = groupDictionary.Count - Images.Count; //for (int i = 0; i < createCount; i++) //{ // Images.Add(RichTextImage.CreateImage(RichText)); //} List> groups = groupDictionary.Values.ToList(); for (int i = 0; i < groups.Count; i++) { RichTextImage image = GetRichTextImage(); //Images[i].gameObject.SetActive(true); foreach (var baseMatch in groups[i]) { image.AddMatch(baseMatch); } } } public void RenderUnderlines(List baseMatches) { if (baseMatches.Count == 0) { return; } //if (Images.Count == 0) //{ // Images.Add(RichTextImage.CreateImage(RichText)); //} //Images[0].gameObject.SetActive(true); RichTextImage image = GetRichTextImage(); foreach (var baseMatch in baseMatches) { image.AddMatch(baseMatch); } } public void RenderSuperlinks(List baseMatches) { if (baseMatches.Count == 0) { return; } //if (Images.Count == 0) //{ // Images.Add(RichTextImage.CreateImage(RichText)); //} //Images[0].gameObject.SetActive(true); RichTextImage image = GetRichTextImage(); foreach (var baseMatch in baseMatches) { image.AddMatch(baseMatch); } } public void DestroyAllImage() { for (int i = 0; i < Images.Count; i++) { Object.DestroyImmediate(Images[i]); } Images = new List(); } private RichTextImage GetRichTextImage() { foreach (var image in Images) { if (image.gameObject.activeSelf) { continue; } image.gameObject.SetActive(true); return image; } RichTextImage richTextImage = RichTextImage.CreateImage(RichText); Images.Add(richTextImage); return richTextImage; } } }