#region Copyright RenGuiYou. All rights reserved. //===================================================== // NeatlyFrameWork // Author: RenGuiyou // Feedback: mailto:750539605@qq.com //===================================================== #endregion using System; using System.Collections.Generic; using Neatly.Load.Manager; using Neatly.UI; using UnityEngine; namespace Neatly.Module { public class AtlasModule : ModuleSingleton { private readonly Dictionary m_Padding = new Dictionary(); private readonly Dictionary m_AtlasConfig = new Dictionary(); private string[] m_EmojiDirect; public override void Init() { InitAtlasConfig(); } public override void HotReload() { InitAtlasConfig(); } private void InitAtlasConfig() { m_Padding.Clear(); m_AtlasConfig.Clear(); AtlasConfig atlasConfig = AtlasLoadManager.Instance.LoadAtlasConfig(); for (int i = 0; i < atlasConfig.atlasList.Count; i++) { var itemList = atlasConfig.atlasList[i].paddingList; bool isEmoji = atlasConfig.atlasList[i].name == NeatlyConfig.NAME_EMOJI_LIBRARY; if (isEmoji) { m_EmojiDirect = new string[itemList.Count]; } for (int j = 0; j < itemList.Count; j++) { m_Padding.Add(itemList[j].name, itemList[j].padding); m_AtlasConfig.Add(itemList[j].name, atlasConfig.atlasList[i].name); if (isEmoji) { m_EmojiDirect[j] = itemList[j].name; } } } } public string[] GetEmojiLibrary() { return m_EmojiDirect; } public void AddRef(ImageInterface image) { string spriteName = image.GetSpriteName(); if (string.IsNullOrEmpty(spriteName) || !NeatlyConfig.AssetBundleEnable || !Application.isPlaying) return; try { LoadModule.Instance.AddAtlasRef(m_AtlasConfig[spriteName]); } catch (Exception) { // NDebug.LogError("SpriteName错误:{0}", spriteName); } } public void LoseRef(ImageInterface image) { string spriteName = image.GetSpriteName(); if (string.IsNullOrEmpty(spriteName) || !NeatlyConfig.AssetBundleEnable || !Application.isPlaying) return; try { LoadModule.Instance.LoseAtlasRef(m_AtlasConfig[spriteName]); } catch (Exception) { // NDebug.LogError("SpriteName错误:{0}", spriteName); } } public void SetSprite(ImageInterface image, string spriteName) { LoseRef(image); string atlasName = m_AtlasConfig[spriteName]; NAtlas atlasInfo = LoadModule.Instance.LoadAtlasInfo(atlasName); image.SetSprite(spriteName, atlasInfo.GetSprite(spriteName), atlasInfo.material); } public Sprite[] LoadSpriteList(string[] spriteNameArray, out Material material) { string atlasName = m_AtlasConfig[spriteNameArray[0]]; NAtlas atlasInfo = LoadModule.Instance.LoadAtlasInfo(atlasName); Sprite[] spriteArray = new Sprite[spriteNameArray.Length]; for (int i = 0; i < spriteArray.Length; i++) { spriteArray[i] = atlasInfo.GetSprite(spriteNameArray[i]); } material = atlasInfo.material; return spriteArray; } public Dictionary GetUIPadding() { return m_Padding; } } }