using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
///
/// 图片管理器
///
public class IconManager : MonoSingleton //MonoBehaviour
{
///
/// 资源
///
public Dictionary mIconRes = new Dictionary();
///
/// 资源源
///
public Dictionary mIconContainer = new Dictionary();
///
/// 初始化
///
private void Start()
{
mIconRes.Clear();
mIconContainer.Clear();
}
///
/// 加载资源
///
/// 资源包的名称
/// 加载完后执行的回调
public void LoadRes(string bundleName, Action ac)
{
ResourceHelper.Instance.LoadAssetBundle(bundleName, (AssetBundle bundle) =>
{
if (null != bundle)
{
GameObject go = (GameObject)bundle.LoadAsset(bundleName);
List tempList = go.GetComponent().mSpriteList;
foreach (Sprite spr in tempList)
{
if (spr != null)
{
mIconRes[spr.name] = spr;
}
}
}
ac();
});
}
///
/// 获取图标
///
/// 容器bundle名称
/// 图标的名称
/// 赋值成功后回调
public void GetSprite(string iconContainer, string resName, Action callBack)
{
string bundleName = resName;
if (mIconRes.ContainsKey(bundleName) && mIconRes[bundleName] != null)
{
if (callBack != null)
{
callBack(mIconRes[bundleName]);
}
}
else
{
LoadRes(IconPrefixConst.getIconContainerName(iconContainer), () =>
{
if (mIconRes.ContainsKey(bundleName))
{
if (callBack != null)
{
callBack(mIconRes[bundleName]);
}
}
else
{
callBack(null);
}
});
}
}
///
/// 为图标赋值
///
/// 图片
/// 容器名称
/// 资源名称
/// 是否图片原始大小
/// 回调
public void SetIcon(Image mImage, string iconContainer, string icon, bool isNativeSize = false, Action succeedCallBack = null, Action failCallBack = null, float scale = 1.0f)
{
if (string.IsNullOrEmpty(icon))
{
return;
}
IconManager.Instance.GetSprite(iconContainer, icon, texture =>
{
if (texture != null)
{
mImage.sprite = texture;
if (Mathf.Abs(scale - 1.0f) > 0.005f)
{
mImage.transform.localScale = new Vector3(scale, scale, scale);
}
if (isNativeSize)
{
mImage.SetNativeSize();
}
if (succeedCallBack != null)
{
succeedCallBack();
}
}
else
{
mImage.sprite = null;
if (failCallBack != null)
{
failCallBack();
}
}
});
}
///
/// 设置精灵
///
///
///
///
///
///
///
///
public void SetIcon(Sprite mSprite, string iconContainer, string icon, bool isNativeSize = false, Action succeedCallBack = null, Action failCallBack = null, float scale = 1.0f)
{
IconManager.Instance.GetSprite(iconContainer, icon, texture =>
{
if (texture != null)
{
mSprite = texture;
if (succeedCallBack != null)
{
succeedCallBack();
}
}
else
{
mSprite = null;
if (failCallBack != null)
{
failCallBack();
}
}
});
}
public void GetIconTexture(string iconContainer, string icon, bool isNativeSize = false, Action succeedCallBack = null)
{
IconManager.Instance.GetSprite(iconContainer, icon, sprite =>
{
if (sprite != null)
{
if (succeedCallBack != null)
{
//Texture2D tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, sprite.texture.format, false);
//tex.SetPixels(sprite.texture.GetPixels((int)sprite.rect.xMin, (int)sprite.rect.yMin,
// (int)sprite.rect.width, (int)sprite.rect.height));
//tex.Apply();
Texture tex = sprite.texture;
succeedCallBack(tex, sprite.uv);
}
}
});
}
}