private void AddUseList(AssetFileBase file) { if (!this.usingFileList.Contains(file)) { this.usingFileList.Add(file); } }
//ロード待ちリストを追加 bool TryAddLoadingFileList(AssetFileBase file) { if (file.IsLoadEnd) { return(false); } if (loadingFileList.Contains(file)) { return(false); } if (loadingFileList.Count < loadFileMax) { loadingFileList.Add(file); if (isOutPutDebugLog) { Debug.Log("Load Start :" + file.FileName); } StartCoroutine(LoadAsync(file)); return(true); } else if (!loadWaitFileList.Contains(file)) { loadWaitFileList.Add(file); return(false); } else { return(false); } }
//ロード待ちのファイルをロードする void LoadNextFile() { AssetFileBase next = null; foreach (AssetFileBase file in loadWaitFileList) { if (next == null) { next = file; } else { if (file.Priority < next.Priority) { next = file; } } } if (next != null) { if (next.IsLoadEnd) { //ダミーファイルなどによって既にロード済み loadWaitFileList.Remove(next); } else if (TryAddLoadingFileList(next)) { loadWaitFileList.Remove(next); } else { Debug.LogError("Failed To Load file " + next.FileName); } } }
// 通常のロード AssetFile LoadSub(AssetFileBase file, System.Object referenceObj) { AddUseList(file); file.ReadyToLoad(AssetFileLoadPriority.Default, referenceObj); AddLoadFile(file); return(file); }
//使用中のファイルリストとして設定 void AddUseList(AssetFileBase file) { if (!usingFileList.Contains(file)) { usingFileList.Add(file); } }
// 管理ファイルを追加 AssetFileBase AddSub(string path, IAssetFileSettingData settingData) { //管理テーブルにあるなら、そこから string path2 = GetPathChangedSoundExt(path); AssetFileBase file = FindFromTbl(path, path2, settingData); if (file != null) { return(file); } /* if (path.Contains(" ")) * { * Debug.LogWarning("[" + path + "] contains white space"); * } */ AssetBundleInfo assetBundleInfo = FindAssetBundleInfo(path, path2); AssetFileInfo fileInfo = new AssetFileInfo(path, settings, assetBundleInfo); //staticなアセットにあるなら、そこから file = StaticAssetManager.FindAssetFile(this, fileInfo, settingData); if (file == null) { //カスタムロードなアセットにあるなら、そこから file = CustomLoadManager.Find(this, fileInfo, settingData); if (file == null) { //宴形式の通常ファイルロード file = new AssetFileUtage(this, fileInfo, settingData); } } fileTbl.Add(path, file); return(file); }
///***以下、ファイル追加・ロード処理***/// //サウンドファイルを指定のキーから探す AssetFileBase FindFromSoundKey(string path, string key) { if (string.IsNullOrEmpty(key)) { return(null); } // string path2 = GetPathChangedSoundExt(path); AssetFileBase file = FindFromTbl(path, "", null); if (file != null) { return(file); } foreach (var keyValue in fileTbl) { file = keyValue.Value; IAssetFileSoundSettingDataKey setting = file.SettingData as IAssetFileSoundSettingDataKey; if (setting != null && setting.Key == key) { return(file); } } return(null); }
// ロードエラー時のデフォルトコールバック void CallbackFileLoadError(AssetFile file) { AssetFileBase errorFile = file as AssetFileBase; string errorMsg = file.LoadErrorMsg + "\n" + file.FileName; Debug.LogError(errorMsg); if (SystemUi.GetInstance() != null) { if (isWaitingRetry) { StartCoroutine(CoWaitRetry(errorFile)); } else { isWaitingRetry = true; //リロードを促すダイアログを表示 SystemUi.GetInstance().OpenDialog1Button( errorMsg, LanguageSystemText.LocalizeText(SystemText.Retry), () => { isWaitingRetry = false; ReloadFileSub(errorFile); } ); } } else { ReloadFileSub(errorFile); } }
private AssetFile BackGroundLoadSub(AssetFileBase file, object referenceObj) { this.AddUseList(file); file.ReadyToLoad(AssetFileLoadPriority.BackGround, referenceObj); this.AddLoadFile(file); return(file); }
//リトライダイアログからの応答を待つ IEnumerator CoWaitRetry(AssetFileBase file) { while (isWaitingRetry) { yield return(null); } ReloadFileSub(file); }
// ダウンロード void DownloadSub(AssetFileBase file) { if (file.CheckCacheOrLocal()) { return; } file.ReadyToLoad(AssetFileLoadPriority.DownloadOnly, null); AddLoadFile(file); }
public AssetFileBase Find(AssetFileManager mangager, AssetFileInfo fileInfo, IAssetFileSettingData settingData) { if (this.OnFindAsset != null) { AssetFileBase asset = null; this.OnFindAsset(mangager, fileInfo, settingData, ref asset); if (asset != null) { return(asset); } } return(null); }
void OnGuiFile(string name, AssetFileBase file) { Status status = GetFileStatus(file); EditorGUILayout.BeginHorizontal(); { style.normal.textColor = GetStatusColor(status); style.richText = true; GUILayout.Label(status.ToString(), style, paramWidth0); // GUILayout.Label("" + file.Version, paramWidth0); GUILayout.Label(name); } EditorGUILayout.EndHorizontal(); }
// コールバックつきのロードコルーチン IEnumerator CoLoadWait(AssetFileBase file, System.Action <AssetFile> onComplete) { if (file.IsLoadEnd) { onComplete(file); } else { LoadSub(file, this); while (!file.IsLoadEnd) { yield return(null); } onComplete(file); } }
Status GetFileStatus(AssetFileBase file) { if (loadingFileList.Contains(file)) { return(Status.Loading); } if (loadWaitFileList.Contains(file)) { return(Status.WaitingToLoad); } if (usingFileList.Contains(file)) { return(file.ReferenceCount > 0 ? Status.Using : Status.Pooling); } return(Status.NotLoaded); }
IEnumerator LoadAsync(AssetFileBase file) { // StartCoroutineの仕様変更のためタイミングによって無限呼び出しされるので1frame待つように修正 yield return(null); yield return(file.LoadAsync( //ロード成功 () => { if (isOutPutDebugLog) { Debug.Log("Load End :" + file.FileName); } loadingFileList.Remove(file); LoadNextFile(); }, //ロード失敗 () => { //ロード失敗 if (dummyFiles.isEnable) { //ダミーファイルをロード if (dummyFiles.outputErrorLog) { Debug.LogError("Load Failed. Dummy file loaded:" + file.FileName + "\n" + file.LoadErrorMsg); } file.LoadDummy(dummyFiles); loadingFileList.Remove(file); LoadNextFile(); } else { Debug.LogError("Load Failed :" + file.FileName + "\n" + file.LoadErrorMsg); //ロード失敗処理 if (CallbackError != null) { CallbackError(file); } } } )); }
IEnumerator LoadAsync(AssetFileBase file) { yield return(file.LoadAsync( //ロード成功 () => { if (isOutPutDebugLog) { Debug.Log("Load End :" + file.FileName); } loadingFileList.Remove(file); LoadNextFile(); }, //ロード失敗 () => { //ロード失敗 Debug.LogError("Load Failed :" + file.FileName + "\n" + file.LoadErrorMsg); if (dummyFiles.isEnable) { //ダミーファイルをロード if (dummyFiles.outputErrorLog) { Debug.LogError("Load Failed. Dummy file loaded:" + file.FileName + "\n" + file.LoadErrorMsg); } file.LoadDummy(dummyFiles); } else { //ロード失敗処理 if (CallbackError != null) { CallbackError(file); } } } )); }
//ロード待ちリストに追加 void AddLoadFile(AssetFileBase file) { TryAddLoadingFileList(file); }
// コールバックつきのロード void LoadSub(AssetFileBase file, System.Action <AssetFile> onComplete) { StartCoroutine(CoLoadWait(file, onComplete)); }
// プリロード void PreloadSub(AssetFileBase file, System.Object referenceObj) { AddUseList(file); file.ReadyToLoad(AssetFileLoadPriority.Preload, referenceObj); AddLoadFile(file); }
void FindAsset(AssetFileManager mangager, AssetFileInfo fileInfo, IAssetFileSettingData settingData, ref AssetFileBase asset) { asset = new SampleCustomFile(mangager, fileInfo, settingData); }
private void FindAsset(AssetFileManager mangager, AssetFileInfo fileInfo, IAssetFileSettingData settingData, ref AssetFileBase asset) { if (this.IsVideoType(fileInfo, settingData)) { asset = new AdvLocalVideoFile(this, mangager, fileInfo, settingData); } }
//ファイルのロードを上書き void FindAsset(AssetFileManager mangager, AssetFileInfo fileInfo, IAssetFileSettingData settingData, ref AssetFileBase asset) { if (IsVideoType(fileInfo, settingData)) { //宴形式の通常ファイルロード asset = new AdvLocalVideoFile(this, mangager, fileInfo, settingData); } }
//ファイルリロード void ReloadFileSub(AssetFileBase file) { StartCoroutine(ReloadFileSubAsync(file)); }
//ファイルリロード(無限ループよけに1フレーム遅らせる) IEnumerator ReloadFileSubAsync(AssetFileBase file) { yield return(null); yield return(StartCoroutine(LoadAsync(file))); }
private void AddLoadFile(AssetFileBase file) { this.TryAddLoadingFileList(file); }