private Sprite GetSprite(AssetBundle assetBundle, long requestId, SpriteCacheInfo info, Action <Sprite> callback) { Sprite sprite = m_AtlusList[info.atlusIndex].SetSprite(assetBundle, requestId, info, callback); m_cache.Register(info.name, info); return(sprite); }
/// <summary> /// キャッシュからスプライト取得 /// </summary> /// <param name="unCharaFixID"></param> /// <returns>スプライト</returns> private Sprite GetCharaIconFromChash(SpriteCacheInfo info) { if (info == null) { return(null); } return(m_AtlusList[info.atlusIndex].Sprites[info.spriteIndex]); }
public void SetCharaIconReady(string icon_name) { SpriteCacheInfo info = m_cache.GetSpriteInfo(icon_name); if (info != null) { info.ready = true; } }
public void AddRequestCallBack(SpriteCacheInfo info, Action <Sprite> callback) { IconApplyRequest request = applyRequest.Find(t => t.info.name.Equals(info.name)); if (request != null) { request.callback += callback; } }
/// <summary> /// 再利用するスプライト情報取得 /// </summary> /// <returns>スプライト情報</returns> private SpriteCacheInfo GetReplaceSpriteInfo() { SpriteCacheInfo info = m_cache.GetSpriteInfoOldItem(); if (info == null) { return(null); } return(info); }
/// <summary> /// キャッシュ済みスプライト情報取得 /// </summary> /// <returns>スプライト情報</returns> private SpriteCacheInfo GetCacheSpriteInfo(string key) { SpriteCacheInfo info = m_cache.GetSpriteInfo(key); if (info == null) { return(null); } return(info); }
public Sprite SetSprite(AssetBundle assetbundle, long requestId, SpriteCacheInfo info, Action <Sprite> callback) { Sprite ret_sprite = addRequest(assetbundle, requestId, info, callback); if (ret_sprite == null) { return(null); } return(ret_sprite); }
protected virtual Sprite addRequest(AssetBundle assetBundle, long requestId, SpriteCacheInfo info, Action <Sprite> callback) { IconApplyRequest request = new IconApplyRequest(); request.requestId = requestId; request.info = info; request.assetBundle = assetBundle; request.callback = callback; applyRequest.Add(request); return(null); }
public void Reset(uint fix_id) { if (fix_id == 0) { return; } SpriteCacheInfo ci = GetSpriteInfo(GetCharaIconSpriteName(fix_id)); if (ci != null) { ci.ResetPriority(); } }
/// <summary> /// 未使用のスプライト情報を取得 /// </summary> /// <returns>スプライト情報</returns> private SpriteCacheInfo GetFreeSpriteInfo() { int atlusIndex = -1; int spriteIndex = -1; for (int i = 0; i < ATLUS_NUM; i++) { spriteIndex = m_AtlusList[i].GetFreeIndex(); if (spriteIndex != -1) { atlusIndex = i; break; } } if (spriteIndex == -1) { return(null); } SpriteCacheInfo info = new SpriteCacheInfo(atlusIndex, spriteIndex); return(info); }
// ================================ take sprite from icon pack // TODO : refactor private long GetCharaIcon(uint unCharaFixID, System.Action <Sprite> callback = null, bool hipriority = false) { long requestId = 0; if (unCharaFixID == 0) { Call(m_DefaultIcon, callback); return(requestId); } requestId = getRequestId(); switch (m_loaderType) { case LoaderType.Atlus: { GetCharaIconAtlas(unCharaFixID, atlas => { var strSpriteName = UnitIconImageCache.GetCharaIconSpriteName(unCharaFixID); if (atlas == null) { Debug.LogError("Atlas None! - " + " , charaID:" + unCharaFixID); Call(m_DefaultIcon, callback); return; } var sprire = atlas.GetSprite(strSpriteName); if (sprire == null) { Debug.LogError("Atlas Inside None! - " + strSpriteName); } Call(sprire, callback); }); } break; case LoaderType.Sprite: { GetCharaIconSprite(unCharaFixID, callback); } break; case LoaderType.AssetBundle: { string spritename = UnitIconImageCache.GetCharaIconSpriteName(unCharaFixID); //すでにキャッシュされている SpriteCacheInfo cacheInfo = m_cache.GetSpriteInfo(spritename); if (cacheInfo != null) { if (hipriority) { cacheInfo.HiPriority = true; } if (cacheInfo.ready) { //準備完了 Sprite chashSprite = GetCharaIconFromChash(cacheInfo); if (chashSprite != null) { Call(chashSprite, callback); } } else { //まだリクエスト中 //リクエストにアクション追加 m_AtlusList[cacheInfo.atlusIndex].AddRequestCallBack(cacheInfo, callback); //デフォルトアイコンを設定 Call(m_DefaultIcon, callback); } return(0); } //デフォルトアイコンを設定 Call(m_DefaultIcon, callback); //アセットバンドルから読み込んで追加 GetCharaIconAssetBundle(unCharaFixID, assetbundle => { //アセットバンドルがない if (assetbundle == null) { Debug.LogError("AssetBundle None! - " + " , charaID:" + unCharaFixID); Call(m_DefaultIcon, callback); return; } //すでにキャッシュ済みになっていないか? SpriteCacheInfo nowInfo = GetCacheSpriteInfo(spritename); if (nowInfo != null) { if (hipriority) { nowInfo.HiPriority = true; } GetSprite(assetbundle, requestId, nowInfo, callback); return; } //アトラスに空きがあるかどうか SpriteCacheInfo freeInfo = GetFreeSpriteInfo(); if (freeInfo != null) { //ある場合は追加 freeInfo.chara_fix_id = unCharaFixID; freeInfo.name = spritename; freeInfo.HiPriority = hipriority; GetSprite(assetbundle, requestId, freeInfo, callback); return; } //ない場合はキャッシュから使用率が低いものを取得して置き換え SpriteCacheInfo replaceInfo = GetReplaceSpriteInfo(); if (replaceInfo != null) { replaceInfo.chara_fix_id = unCharaFixID; replaceInfo.name = spritename; replaceInfo.ready = false; replaceInfo.HiPriority = hipriority; GetSprite(assetbundle, requestId, replaceInfo, callback); return; } }); } break; } return(requestId); }
public void Register(string key, SpriteCacheInfo spriteInfo) { spriteInfo.count = GetSpriteInfoUseCount(); m_spriteInfos[key] = spriteInfo; }