SpriteGraphic FindGraphic(InlineText text, SpriteAsset matchAsset, out List <SpriteGraphic> list) { EmojiTools.BeginSample("Emoji_UnitFindGraphic"); if (textGraphics == null) { textGraphics = new Dictionary <InlineText, List <SpriteGraphic> >(); } if (!textGraphics.TryGetValue(text, out list)) { list = ListPool <SpriteGraphic> .Get(); textGraphics[text] = list; } SpriteGraphic target = null; for (int i = 0; i < list.Count; ++i) { SpriteGraphic graphic = list[i]; if (graphic && UnityEngine.Object.ReferenceEquals(graphic.mainTexture, matchAsset.texSource)) { target = graphic; break; } } EmojiTools.EndSample(); return(target); }
private void OnDestroy() { if (_feature != null) { _feature.Destroy(); } EmojiTools.RemoveUnityMemory(this); }
void LateUpdate() { EmojiTools.BeginSample("Emoji_LateUpdate"); if (_render != null) { _render.LateUpdate(); } EmojiTools.EndSample(); }
/// <summary> /// 清除所有的精灵 /// </summary> public void ClearAllSprites() { EmojiTools.BeginSample("Emoji_ClearAll"); if (_render != null) { _render.Clear(); } EmojiTools.EndSample(); }
/// <summary> /// 移除文本 /// </summary> /// <param name="_id"></param> /// <param name="_key"></param> public void UnRegister(InlineText _key) { EmojiTools.BeginSample("Emoji_UnRegister"); if (_render != null) { _render.DisRendering(_key); } EmojiTools.EndSample(); }
protected override void OnDestroy() { base.OnDestroy(); StopAllCoroutines(); EmojiTools.RemoveUnityMemory(this); }
public void ForceRebuild() { EmojiTools.BeginSample("Emoji_ForceRebuild"); InlineText[] alltexts = GetComponentsInChildren <InlineText>(); for (int i = 0; i < alltexts.Length; i++) { alltexts[i].SetVerticesDirty(); } EmojiTools.EndSample(); }
protected override void OnDestroy() { base.OnDestroy(); if (_Render != null) { _Render.Release(this); } _Render = null; EmojiTools.RemoveUnityMemory(this); }
public SpriteAsset FindAtlas(string atlasname) { EmojiTools.BeginSample("FindAtlas"); #if UNITY_EDITOR && !EMOJI_RUNTIME SpriteAsset result = null; if (_unityallAtlases != null) { for (int i = 0; i < _unityallAtlases.Count; ++i) { SpriteAsset asset = _unityallAtlases[i]; if (asset.AssetName.Equals(atlasname)) { result = asset; break; } } } if (_lostAssets == null) { _lostAssets = new List <string>(); } if (!PreparedAtlas.Contains(atlasname)) { if (!_lostAssets.Contains(atlasname)) { _lostAssets.Add(atlasname); } } EmojiTools.EndSample(); return(result); #else for (int i = 0; i < _sharedAtlases.Count; ++i) { SpriteAsset asset = _sharedAtlases[i]; if (asset.AssetName.Equals(atlasname)) { EmojiTools.EndSample(); return(asset); } } SpriteAsset newasset = InstantiateSpriteAsset(atlasname); if (newasset != null) { _sharedAtlases.Add(newasset); } EmojiTools.EndSample(); return(newasset); #endif }
void Awake() { EmojiTools.AddUnityMemory(this); #if UNITY_EDITOR if (OpenDebug) { EmojiTools.StartDumpGUI(); } #endif Initialize(); }
public SpriteInfoGroup FindSpriteGroup(string TagName, out SpriteAsset resultatlas) { EmojiTools.BeginSample("Emoji_FindSpriteGroup"); #if UNITY_EDITOR && !EMOJI_RUNTIME resultatlas = null; SpriteInfoGroup result = null; if (_unityallAtlases != null) { for (int i = 0; i < _unityallAtlases.Count; ++i) { SpriteAsset asset = _unityallAtlases[i]; for (int j = 0; j < asset.listSpriteGroup.Count; ++j) { SpriteInfoGroup group = asset.listSpriteGroup[j]; if (group.tag.Equals(TagName)) { result = group; resultatlas = asset; break; } } } } if (_lostAssets == null) { _lostAssets = new List <string>(); } if (resultatlas != null && !PreparedAtlas.Contains(resultatlas.AssetName)) { if (!_lostAssets.Contains(resultatlas.AssetName)) { _lostAssets.Add(resultatlas.AssetName); } } EmojiTools.EndSample(); return(result); #else resultatlas = null; SpriteInfoGroup result = null; KeyValuePair <SpriteAsset, SpriteInfoGroup> data; if (_spritemap.TryGetValue(TagName, out data)) { result = data.Value; resultatlas = data.Key; } EmojiTools.EndSample(); return(result); #endif }
public void PushRenderAtlas(SpriteAsset _spriteAsset) { EmojiTools.BeginSample("Emoji_PushRenderAtlas"); if (!isRendering(_spriteAsset) && _spriteAsset != null) { _render.PrepareAtlas(_spriteAsset); if (!_sharedAtlases.Contains(_spriteAsset)) { _sharedAtlases.Add(_spriteAsset); } } EmojiTools.EndSample(); }
public IEmojiRender Register(InlineText _key) { EmojiTools.BeginSample("Emoji_Register"); if (_render != null) { if (_render.TryRendering(_key)) { EmojiTools.EndSample(); return(_render); } } EmojiTools.EndSample(); return(null); }
void Awake() { #if UNITY_EDITOR if (OpenDebug) { EmojiTools.StartDumpGUI(); } #endif EmojiTools.BeginSample("Emoji_Init"); Initialize(); EmojiTools.EndSample(); EmojiTools.AddUnityMemory(this); }
Graphic ParsePosAndUV(InlineText text, int ID, Vector3[] Pos, Vector2[] UV, List <string> joblist) { EmojiTools.BeginSample("Emoji_GroupParsePosAndUV"); SpriteAsset matchAsset = null; for (int i = 0; i < allatlas.Count; ++i) { SpriteAsset asset = allatlas[i]; if (asset != null && asset.ID == ID) { matchAsset = asset; break; } } if (matchAsset && matchAsset.texSource != null) { CanvasGraphicGroup group = FindGraphicGroup(text.canvas, matchAsset.ID); if (group == null) { group = new CanvasGraphicGroup(); group.AtlasID = matchAsset.ID; group.canvas = text.canvas; group.mesh = UnitMeshInfoPool.Get(); group.isDirty = false; group.graphic = CreateSpriteRender(); if (GraphicTasks == null) { GraphicTasks = new List <CanvasGraphicGroup>(); } GraphicTasks.Add(group); } RefreshSubUIMesh(text, group, matchAsset, Pos, UV, joblist); EmojiTools.EndSample(); return(group.graphic); } else { Debug.LogErrorFormat("missing {0} atlas", ID); } EmojiTools.EndSample(); return(null); }
protected override void OnDestroy() { base.OnDestroy(); if (_renderTagList != null) { ListPool <IFillData> .Release(_renderTagList); _renderTagList = null; } if (Manager) { Manager.UnRegister(this); } EmojiTools.RemoveUnityMemory(this); }
void RebuildTagList() { EmojiTools.BeginSample("Emoji_rebuildTags"); _alltags.Clear(); _spritemap.Clear(); #if UNITY_EDITOR && !EMOJI_RUNTIME if (_unityallAtlases != null) { for (int i = 0; i < _unityallAtlases.Count; ++i) { SpriteAsset asset = _unityallAtlases[i]; for (int j = 0; j < asset.listSpriteGroup.Count; ++j) { SpriteInfoGroup infogroup = asset.listSpriteGroup[j]; SpriteInfoGroup group; if (_alltags.TryGetValue(infogroup.tag, out group)) { Debug.LogErrorFormat("already exist :{0} ", infogroup.tag); } _alltags[infogroup.tag] = infogroup; } } } #else for (int i = 0; i < _sharedAtlases.Count; ++i) { SpriteAsset asset = _sharedAtlases[i]; for (int j = 0; j < asset.listSpriteGroup.Count; ++j) { SpriteInfoGroup infogroup = asset.listSpriteGroup[j]; SpriteInfoGroup group; if (_alltags.TryGetValue(infogroup.tag, out group)) { Debug.LogErrorFormat("already exist :{0} ", infogroup.tag); } _alltags[infogroup.tag] = infogroup; _spritemap[infogroup.tag] = new KeyValuePair <SpriteAsset, SpriteInfoGroup>(asset, infogroup); } } #endif EmojiTools.EndSample(); }
private void OnDestroy() { #if UNITY_EDITOR if (_lostAssets != null) { for (int i = 0; i < _lostAssets.Count; ++i) { string asset = _lostAssets[i]; Debug.LogError(string.Format("not prepred atlasAsset named :{0}", asset)); } } #endif if (_render != null) { _render.Dispose(); } _render = null; EmojiTools.RemoveUnityMemory(this); }
SpriteGraphic ParsePosAndUV(InlineText text, int ID, Vector3[] Pos, Vector2[] UV) { EmojiTools.BeginSample("Emoji_UnitParsePosAndUV"); SpriteAsset matchAsset = null; for (int i = 0; i < allatlas.Count; ++i) { SpriteAsset asset = allatlas[i]; if (asset != null && asset.ID == ID) { matchAsset = asset; break; } } if (matchAsset && matchAsset.texSource != null) { List <SpriteGraphic> list = null; SpriteGraphic target = FindGraphic(text, matchAsset, out list); if (!target) { target = CreateSpriteRender(text.transform); list.Add(target); } RefreshSubUIMesh(text, target, matchAsset, Pos, UV); EmojiTools.EndSample(); return(target); } else { Debug.LogErrorFormat("missing {0} atlas", ID); } EmojiTools.EndSample(); return(null); }
void Initialize() { HasInit = true; #if UNITY_EDITOR string[] result = AssetDatabase.FindAssets(string.Format("t:{0}", typeof(SpriteAsset).FullName)); if (result.Length > 0 && _unityallAtlases == null) { _unityallAtlases = new List <SpriteAsset>(result.Length); for (int i = 0; i < result.Length; ++i) { string path = AssetDatabase.GUIDToAssetPath(result[i]); SpriteAsset asset = AssetDatabase.LoadAssetAtPath <SpriteAsset>(path); if (asset) { _unityallAtlases.Add(asset); } } } Debug.LogFormat("find :{0} atlas resource", result.Length); Debug.LogWarning("if your asset not in the resources please override InstantiateSpriteAsset"); #endif EmojiTools.BeginSample("Emoji_Init"); InitRender(); EmojiTools.EndSample(); EmojiTools.BeginSample("Emoji_preLoad"); PreLoad(); EmojiTools.EndSample(); RebuildTagList(); ForceRebuild(); }
void PlayAnimation() { EmojiTools.BeginSample("Emoji_GroupAnimation"); if (alltexts != null) { if (_time == null) { _time = Time.timeSinceLevelLoad; } else { float deltatime = Time.timeSinceLevelLoad - _time.Value; int framecnt = Mathf.RoundToInt(deltatime * Speed); if (framecnt > 0) { List <string> joblist = ListPool <string> .Get(); for (int i = 0; i < alltexts.Count; ++i) { InlineText text = alltexts[i]; List <IFillData> emojidata = text.PopEmojiData(); if (emojidata != null && emojidata.Count > 0 && allatlas != null && allatlas.Count > 0) { for (int j = 0; j < emojidata.Count; ++j) { IFillData taginfo = emojidata[j]; if (taginfo == null || taginfo.ignore) { continue; } SpriteAsset asset = null; SpriteInfoGroup groupinfo = manager.FindSpriteGroup(taginfo.Tag, out asset); if (groupinfo != null && groupinfo.spritegroups.Count > 1) { int index = framecnt % groupinfo.spritegroups.Count; SpriteInfo sprInfo = groupinfo.spritegroups[index]; taginfo.uv = sprInfo.uv; //render next CanvasGraphicGroup group = FindGraphicGroup(text.canvas, asset.ID); if (group != null) { if (tempMesh == null) { tempMesh = UnitMeshInfoPool.Get(); } RefreshSubUIMesh(text, group, asset, taginfo.pos, taginfo.uv, joblist); if (group.isDirty) { group.graphic.SetVerticesDirty(); } joblist.Add(taginfo.Tag); } } } } } ListPool <string> .Release(joblist); } } } EmojiTools.EndSample(); }
void RenderRebuild() { EmojiTools.BeginSample("Emoji_GroupRebuild"); if (rebuildqueue != null && rebuildqueue.Count > 0) { List <string> joblist = ListPool <string> .Get(); this.SetAllGroupDirty(false); for (int i = 0; i < alltexts.Count; ++i) { InlineText text = alltexts[i]; List <IFillData> emojidata = text.PopEmojiData(); if (text != null && emojidata != null && emojidata.Count > 0 && allatlas != null && allatlas.Count > 0) { if (tempMesh == null) { tempMesh = UnitMeshInfoPool.Get(); } for (int j = 0; j < emojidata.Count; ++j) { IFillData taginfo = emojidata[j]; if (taginfo == null || taginfo.ignore) { continue; } Graphic job = Parse(text, taginfo, joblist); if (job) { joblist.Add(taginfo.Tag); } } } } if (GraphicTasks != null) { for (int i = 0; i < GraphicTasks.Count; ++i) { CanvasGraphicGroup group = GraphicTasks[i]; if (group != null && group.graphic != null) { if (group.isDirty) { group.graphic.SetVerticesDirty(); } else { group.graphic.Draw(null); group.graphic.SetDirtyMask(); group.graphic.SetVerticesDirty(); } } } } ListPool <string> .Release(joblist); rebuildqueue.Clear(); } EmojiTools.EndSample(); }
protected override void Start() { base.Start(); EmojiTools.AddUnityMemory(this); }
void RenderRebuild() { EmojiTools.BeginSample("Emoji_UnitRebuild"); if (rebuildqueue != null && rebuildqueue.Count > 0) { for (int i = 0; i < rebuildqueue.Count; ++i) { InlineText text = rebuildqueue[i]; List <IFillData> emojidata = text.PopEmojiData(); if (emojidata != null && emojidata.Count > 0 && allatlas != null && allatlas.Count > 0) { if (tempMesh == null) { tempMesh = UnitMeshInfoPool.Get(); } if (renderData == null) { renderData = new Dictionary <Graphic, UnitMeshInfo>(emojidata.Count); } for (int j = 0; j < emojidata.Count; ++j) { IFillData taginfo = emojidata[j]; if (taginfo == null || taginfo.ignore) { continue; } Parse(text, taginfo); } List <SpriteGraphic> list; if (textGraphics != null && textGraphics.TryGetValue(text, out list)) { for (int j = 0; j < list.Count; ++j) { SpriteGraphic graphic = list[j]; //not render if (graphic != null && !graphic.isDirty) { graphic.Draw(null); graphic.SetDirtyMask(); graphic.SetVerticesDirty(); } } } } else { List <SpriteGraphic> list; if (textGraphics != null && textGraphics.TryGetValue(text, out list)) { for (int j = 0; j < list.Count; ++j) { SpriteGraphic graphic = list[j]; //not render if (graphic != null) { graphic.Draw(null); graphic.SetDirtyMask(); graphic.SetVerticesDirty(); } } } } } rebuildqueue.Clear(); } EmojiTools.EndSample(); }
void PlayAnimation() { EmojiTools.BeginSample("Emoji_UnitAnimation"); if (alltexts != null) { if (_time == null) { _time = Time.timeSinceLevelLoad; } else { float deltatime = Time.timeSinceLevelLoad - _time.Value; //at least one frame int framecnt = Mathf.RoundToInt(deltatime * Speed); if (framecnt > 0) { for (int i = 0; i < alltexts.Count; ++i) { InlineText text = alltexts[i]; List <IFillData> emojidata = text.PopEmojiData(); if (emojidata != null && emojidata.Count > 0 && allatlas != null && allatlas.Count > 0) { for (int j = 0; j < emojidata.Count; ++j) { IFillData taginfo = emojidata[j]; if (taginfo == null || taginfo.ignore) { continue; } SpriteAsset asset = null; SpriteInfoGroup groupinfo = manager.FindSpriteGroup(taginfo.Tag, out asset); if (groupinfo != null && groupinfo.spritegroups.Count > 1) { int index = framecnt % groupinfo.spritegroups.Count; SpriteInfo sprInfo = groupinfo.spritegroups[index]; taginfo.uv = sprInfo.uv; List <SpriteGraphic> list = null; SpriteGraphic target = FindGraphic(text, asset, out list); if (target) { if (tempMesh == null) { tempMesh = UnitMeshInfoPool.Get(); } if (renderData == null) { renderData = new Dictionary <Graphic, UnitMeshInfo>(emojidata.Count); } RefreshSubUIMesh(text, target, asset, taginfo.pos, taginfo.uv); } } } } } } } } EmojiTools.EndSample(); }