Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit a6aacfb

Browse files
committed
optime and faster
1 parent c4d963f commit a6aacfb

File tree

1 file changed

+73
-82
lines changed

1 file changed

+73
-82
lines changed

Assets/TextInlineSprite/Scripts/InlineManager.cs

Lines changed: 73 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-

1+
#define EMOJI_RUNTIME
22
using System.Collections;
33
using System.Collections.Generic;
44
using UnityEngine;
@@ -15,10 +15,12 @@ public class InlineManager : MonoBehaviour
1515

1616
private readonly Dictionary<string, SpriteInfoGroup> _alltags = new Dictionary<string, SpriteInfoGroup>();
1717

18+
private readonly Dictionary<string, KeyValuePair<SpriteAsset, SpriteInfoGroup>> _spritemap = new Dictionary<string, KeyValuePair<SpriteAsset, SpriteInfoGroup>>();
19+
1820
private IEmojiRender _render;
1921

2022
public List<string> PreparedAtlas = new List<string>();
21-
23+
2224
public bool HasInit { get; private set; }
2325

2426
#if UNITY_EDITOR
@@ -276,7 +278,8 @@ void RebuildTagList()
276278
{
277279
EmojiTools.BeginSample("Emoji_rebuildTags");
278280
_alltags.Clear();
279-
#if UNITY_EDITOR
281+
_spritemap.Clear();
282+
#if UNITY_EDITOR && !EMOJI_RUNTIME
280283
if (_unityallAtlases != null)
281284
{
282285
for (int i = 0; i < _unityallAtlases.Count; ++i)
@@ -297,21 +300,22 @@ void RebuildTagList()
297300
}
298301

299302
#else
300-
for (int i = 0; i < sharedAtlases.Count; ++i)
301-
{
302-
SpriteAsset asset = sharedAtlases[i];
303-
for (int j = 0; j < asset.listSpriteGroup.Count; ++j)
304-
{
305-
SpriteInfoGroup infogroup = asset.listSpriteGroup[j];
306-
SpriteInfoGroup group;
307-
if (alltags.TryGetValue(infogroup.tag, out group))
308-
{
309-
Debug.LogErrorFormat("already exist :{0} ", infogroup.tag);
310-
}
311-
312-
alltags[infogroup.tag] = infogroup;
313-
}
314-
}
303+
for (int i = 0; i < _sharedAtlases.Count; ++i)
304+
{
305+
SpriteAsset asset = _sharedAtlases[i];
306+
for (int j = 0; j < asset.listSpriteGroup.Count; ++j)
307+
{
308+
SpriteInfoGroup infogroup = asset.listSpriteGroup[j];
309+
SpriteInfoGroup group;
310+
if (_alltags.TryGetValue(infogroup.tag, out group))
311+
{
312+
Debug.LogErrorFormat("already exist :{0} ", infogroup.tag);
313+
}
314+
315+
_alltags[infogroup.tag] = infogroup;
316+
_spritemap[infogroup.tag] = new KeyValuePair<SpriteAsset, SpriteInfoGroup>(asset, infogroup);
317+
}
318+
}
315319
#endif
316320
EmojiTools.EndSample();
317321
}
@@ -384,7 +388,7 @@ public bool CanRendering(string tagName)
384388
public bool CanRendering(int atlasId)
385389
{
386390

387-
#if UNITY_EDITOR
391+
#if UNITY_EDITOR && !EMOJI_RUNTIME
388392
if (_unityallAtlases != null)
389393
{
390394
for (int i = 0; i < _unityallAtlases.Count; ++i)
@@ -399,15 +403,15 @@ public bool CanRendering(int atlasId)
399403

400404
return false;
401405
#else
402-
for (int i = 0; i < sharedAtlases.Count; ++i)
403-
{
404-
SpriteAsset asset = sharedAtlases[i];
405-
if (asset.ID == atlasId)
406-
{
407-
return true;
408-
}
409-
}
410-
return false;
406+
for (int i = 0; i < _sharedAtlases.Count; ++i)
407+
{
408+
SpriteAsset asset = _sharedAtlases[i];
409+
if (asset.ID == atlasId)
410+
{
411+
return true;
412+
}
413+
}
414+
return false;
411415
#endif
412416
}
413417

@@ -429,10 +433,9 @@ public void PushRenderAtlas(SpriteAsset _spriteAsset)
429433
public SpriteInfoGroup FindSpriteGroup(string TagName, out SpriteAsset resultatlas)
430434
{
431435
EmojiTools.BeginSample("Emoji_FindSpriteGroup");
432-
#if UNITY_EDITOR
436+
#if UNITY_EDITOR && !EMOJI_RUNTIME
433437

434438
resultatlas = null;
435-
436439
SpriteInfoGroup result = null;
437440
if (_unityallAtlases != null)
438441
{
@@ -463,35 +466,23 @@ public SpriteInfoGroup FindSpriteGroup(string TagName, out SpriteAsset resultatl
463466
EmojiTools.EndSample();
464467
return result;
465468
#else
466-
resultatlas = null;
467-
468-
SpriteInfoGroup result = null;
469-
if(sharedAtlases != null)
470-
{
471-
for (int i = 0; i < sharedAtlases.Count; ++i)
472-
{
473-
SpriteAsset asset = sharedAtlases[i];
474-
for (int j = 0; j < asset.listSpriteGroup.Count; ++j)
475-
{
476-
SpriteInfoGroup group = asset.listSpriteGroup[j];
477-
if (group.tag.Equals(TagName))
478-
{
479-
result = group;
480-
resultatlas = asset;
481-
break;
482-
}
483-
}
484-
}
485-
}
486-
EmojiTools.EndSample();
487-
return result;
469+
resultatlas = null;
470+
SpriteInfoGroup result = null;
471+
KeyValuePair<SpriteAsset, SpriteInfoGroup> data;
472+
if (_spritemap.TryGetValue(TagName,out data))
473+
{
474+
result = data.Value;
475+
resultatlas = data.Key;
476+
}
477+
EmojiTools.EndSample();
478+
return result;
488479
#endif
489480
}
490481

491482
public SpriteAsset FindAtlas(int atlasID)
492483
{
493484
EmojiTools.BeginSample("Emoji_FindAtlas");
494-
#if UNITY_EDITOR
485+
#if UNITY_EDITOR && !EMOJI_RUNTIME
495486
SpriteAsset result = null;
496487
if (_unityallAtlases != null)
497488
{
@@ -517,25 +508,25 @@ public SpriteAsset FindAtlas(int atlasID)
517508
EmojiTools.EndSample();
518509
return result;
519510
#else
520-
for (int i = 0; i < sharedAtlases.Count; ++i)
521-
{
522-
SpriteAsset asset = sharedAtlases[i];
523-
if (asset.ID.Equals(atlasID))
524-
{
525-
EmojiTools.EndSample();
526-
return asset;
527-
}
528-
}
529-
EmojiTools.EndSample();
530-
return null;
511+
for (int i = 0; i < _sharedAtlases.Count; ++i)
512+
{
513+
SpriteAsset asset = _sharedAtlases[i];
514+
if (asset.ID.Equals(atlasID))
515+
{
516+
EmojiTools.EndSample();
517+
return asset;
518+
}
519+
}
520+
EmojiTools.EndSample();
521+
return null;
531522
#endif
532523
}
533524

534525

535526
public SpriteAsset FindAtlas(string atlasname)
536527
{
537528
EmojiTools.BeginSample("FindAtlas");
538-
#if UNITY_EDITOR
529+
#if UNITY_EDITOR && !EMOJI_RUNTIME
539530
SpriteAsset result = null;
540531
if (_unityallAtlases != null)
541532
{
@@ -561,23 +552,23 @@ public SpriteAsset FindAtlas(string atlasname)
561552
EmojiTools.EndSample();
562553
return result;
563554
#else
564-
for (int i = 0; i < sharedAtlases.Count; ++i)
565-
{
566-
SpriteAsset asset = sharedAtlases[i];
567-
if (asset.AssetName.Equals(atlasname))
568-
{
569-
EmojiTools.EndSample();
570-
return asset;
571-
}
572-
}
573-
574-
SpriteAsset newasset = InstantiateSpriteAsset(atlasname);
575-
if(newasset != null)
576-
{
577-
sharedAtlases.Add(newasset);
578-
}
579-
EmojiTools.EndSample();
580-
return newasset;
555+
for (int i = 0; i < _sharedAtlases.Count; ++i)
556+
{
557+
SpriteAsset asset = _sharedAtlases[i];
558+
if (asset.AssetName.Equals(atlasname))
559+
{
560+
EmojiTools.EndSample();
561+
return asset;
562+
}
563+
}
564+
565+
SpriteAsset newasset = InstantiateSpriteAsset(atlasname);
566+
if (newasset != null)
567+
{
568+
_sharedAtlases.Add(newasset);
569+
}
570+
EmojiTools.EndSample();
571+
return newasset;
581572
#endif
582573

583574
}

0 commit comments

Comments
 (0)