public void CleanAllUsing() { if (_usingAsset == null) { return; } for (int i = _usingAsset.Count - 1; i >= 0; i--) { BaseAsset ba = _usingAsset[i]; if (!AssetProcessor.ProcessDestroy(ba)) { continue; } if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); // _usingAsset.RemoveAt(i); } }
/// <summary> /// 卸载 /// </summary> /// <param name="ba">资源</param> public void Unload(BaseAsset ba) { if (ba == null) { return; } if (_assetManager != null) { _assetManager.Unload(ba, SingletonState == SingletonStateEnum.Destroying); } else { if (!AssetProcessor.ProcessDestroy(ba)) { return; } if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); } }
/// <summary> /// 添加资产 /// </summary> /// <param name="ba">资产</param> public void AddAsset(BaseAsset ba) { if (ba == null || string.IsNullOrEmpty(ba.BaseData.Name)) { JW.Common.Log.LogE("AssetCache.AddAsset : invalid parameter"); return; } JWArrayList <BaseAsset> ast; if (!_assets.TryGetValue(ba.BaseData.Name, out ast)) { ast = new JWArrayList <BaseAsset>(); _assets.Add(ba.BaseData.Name, ast); } AssetProcessor.ProcessRestore(ba); if (ba.RootGo != null) { ba.RootGo.ExtSetActive(false); } if (ba.RootTf != null) { ba.RootTf.SetParent(_parentTf, false); } ast.Add(ba); }
/// <summary> /// 清理 /// </summary> /// <param name="uiState">保留的UI状态名</param> public void Clear(JWArrayList <string> uiState) { if (uiState == null) { JW.Common.Log.LogE("AssetCache.ClearCache : invalid parameter"); return; } Dictionary <string, JWArrayList <BaseAsset> > .Enumerator enumerator = _assets.GetEnumerator(); while (enumerator.MoveNext()) { JWArrayList <BaseAsset> val = enumerator.Current.Value; if (val == null) { continue; } for (int i = val.Count - 1; i >= 0; i--) { BaseAsset ba = val[i]; if (ba == null) { val.RemoveAt(i); continue; } if (!AssetAssistor.IsAssetDead(ref ba.BaseData, uiState)) { continue; } if (AssetProcessor.ProcessDestroy(ba)) { if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); } else { JW.Common.Log.LogE("AssetCache.ClearCache : failed to process Destroy - {0}", ba.BaseData.Name); } val.RemoveAt(i); } } }
/// <summary> /// 卸载 /// </summary> /// <param name="ba">待卸载的资产</param> /// <param name="forceDestroy">是否强制销毁</param> public void Unload(BaseAsset ba, bool forceDestroy = false) { if (ba == null) { JW.Common.Log.LogE("AssetManager.Unload : invalid parameter"); return; } int found = _usingAsset.IndexOf(ba); if (found == -1) { JW.Common.Log.LogE("AssetManager.Unload : can't find asset - {0}", ba.BaseData.Name); return; } _usingAsset.RemoveAt(found); //销毁手动和Imediate if (forceDestroy || ba.BaseData.Life == LifeType.Immediate || ba.BaseData.Life == LifeType.Manual) { if (!AssetProcessor.ProcessDestroy(ba)) { return; } if (ba.Resource != null) { ResService.UnloadResource(ba.Resource); ba.Resource = null; } ba.BaseData.Factory.DestroyObject(ba); } else { _cache.AddAsset(ba); } }
private BaseAsset CreateAsset(AssetData data, ResObj resource) { if (resource == null || resource.Content == null) { JW.Common.Log.LogE("AssetManager.CreateAsset : invalid parameter - {0}", data.Name); return(null); } data.Callback = null; BaseAsset ba = data.Factory.CreateObject(); if (ba == null) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to create asset - {0}", data.Name); return(null); } ba.BaseData = data; ba.Resource = resource; if (!AssetProcessor.ProcessCreate(ba)) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name); ba.BaseData.Callback = null; ba.BaseData.Factory = null; ba.Resource = null; data.Factory.DestroyObject(ba); return(null); } //AssetProcessor.ProcessAssociateResource(ba); return(ba); }
/// <summary> /// 装载 /// </summary> /// <param name="data">资产数据</param> /// <param name="clone">是否Clone一个副本</param> /// <returns>资产</returns> public BaseAsset Load(ref AssetData data, bool clone) { if (string.IsNullOrEmpty(data.Filename)) { JW.Common.Log.LogE("AssetManager.Load : invalid parameter"); return(null); } //缓存找 BaseAsset ba = _cache.GetAsset(data.Name); if (ba != null) { //缓存复制 if (clone) { BaseAsset cloneBa = AssetProcessor.ProcessClone(ba); _cache.AddAsset(ba); ba = cloneBa; } if (ba != null) { if (!AssetProcessor.ProcessCreate(ba)) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name); ba.BaseData.Callback = null; ba.BaseData.Factory = null; ba.Resource = null; data.Factory.DestroyObject(ba); return(null); } _usingAsset.Add(ba); } return(ba); } //没在缓存 同步创建 ResObj resource = ResService.GetResource(data.Filename); if (resource == null) { JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename); return(null); } if (resource.Content == null) { JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename); ResService.UnloadResource(resource); return(null); } ba = CreateAsset(data, resource); if (ba == null) { ResService.UnloadResource(resource); return(null); } if (clone) { BaseAsset cloneBa = AssetProcessor.ProcessClone(ba); _cache.AddAsset(ba); ba = cloneBa; } if (ba != null) { _usingAsset.Add(ba); } return(ba); }
public BaseAsset CreateObject() { BaseAsset ba = _classCache.GetClass(_type); return(ba ?? AssetProcessor.CreateAssetClass(_type)); }