JM_KA/assets/Script/HUD/AssetBundleMamager.ts
2022-08-31 09:48:48 +08:00

456 lines
18 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// import BusinessTypeSetting from "../../_BusinessTypeSetting/BusinessTypeSetting";
// import LocalStorageData from "../Data/LocalStorageData";
// import Enum_Loading from "../HUDV2/Enum_Loading";
// import HUDM from "./HUDM";
// export default class AssetBundleMamager {
// //#region static 屬性
// private static _instance: AssetBundleMamager = null;
// public static get Instance(): AssetBundleMamager { return AssetBundleMamager._instance; }
// //#endregion
// //#region public 屬性
// public HUGroup: Map<string, HUDM> = new Map<string, HUDM>();
// /** 本地VerList */
// public LocalVerList: Enum_Loading.VerListObj = null;
// /** 遠端VerList */
// public RemoteVerList: Enum_Loading.VerListObj = null;
// public DownloadList_Preview: Object = {};
// /** IsChangeBundleUrl */
// public IsChangeBundleUrl: boolean = false;
// //#endregion
// //#region Lifecycle
// constructor() {
// AssetBundleMamager._instance = this;
// CC_PREVIEW && this._initdownloadList_Preview();
// }
// //#endregion
// //#region Custom Function
// /**
// * 取得Bundle
// * @param {string} BundleName Bundle名稱
// * @param {string} Version 版號
// * @return {cc.AssetManager.Bundle} Bundle
// */
// public *GetBundle(BundleName: string, Version: string = ""): IterableIterator<cc.AssetManager.Bundle> {
// let bundle: cc.AssetManager.Bundle = cc.assetManager.getBundle(BundleName);
// if (bundle) {
// return bundle;
// }
// // options是可选参数引擎会根据保留字段 进行对应的操作这里添加了version和onFileProgress可用来记录热更资源版本和下载进度
// let options: any = null;
// let BundleUrl: string = BundleName;
// if (cc.sys.isNative && !this.LocalVerList[BundleName].UseLocal) {
// BundleUrl = `${(jsb.fileUtils ? jsb.fileUtils.getWritablePath() : "/")}Bundle/${BundleName}/remote/${BundleName}`;
// options = {
// version: Version
// };
// }
// cc.assetManager.loadBundle(BundleUrl, options, (err: Error, resp: cc.AssetManager.Bundle) => {
// if (err) {
// cc.error(err);
// bundle = null;
// }
// bundle = resp;
// });
// while (typeof bundle === "undefined") {
// yield null;
// }
// return bundle;
// }
// /**
// * 更新Bundle
// * @param {HUDM} HUDName HUD
// */
// public *UpdateBundle(HUDName: HUDM | string, onFileProgress?: (finish: number, total: number, item: string) => void): IterableIterator<any> {
// let HUD: HUDM;
// if (HUDName instanceof HUDM) {
// HUD = HUDName;
// } else {
// HUD = this.GetHUD(HUDName);
// }
// let UpdateingData: Enum_Loading.UpdateingDataObj = yield* HUD.HUD(onFileProgress);
// if (UpdateingData.IsUpdatecomplete) {
// this.LocalVerList[HUD.BundleName] = this.RemoteVerList[HUD.BundleName];
// this.LocalVerList[HUD.BundleName]["UseLocal"] = false;
// LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
// }
// return UpdateingData;
// }
// /**
// * 更新Bundle
// * @param {HUDM} HUDName HUD
// */
// public *RetryUpdateBundle(HUDName: HUDM | string, onFileProgress?: (finish: number, total: number, item: string) => void): IterableIterator<any> {
// let HUD: HUDM;
// if (HUDName instanceof HUDM) {
// HUD = HUDName;
// } else {
// HUD = this.GetHUD(HUDName);
// }
// let UpdateingData: Enum_Loading.UpdateingDataObj = yield* HUD.RetryDownLoadFailedAssets();
// return UpdateingData;
// }
// /**
// * 從Bundle取得資源
// * @param {cc.AssetManager.Bundle | string} BundleName Bundle名稱
// * @param {string} SourceName 資源名稱
// * @param {string} type 資源型別
// * @return {any} Source
// */
// public *GetBundleSource(BundleName: cc.AssetManager.Bundle | string, SourceName: string, type?: string | Bundle_Source_Type, onFileProgress?: (finish: number, total: number, item: cc.AssetManager.RequestItem) => void): IterableIterator<any> {
// let bundle: cc.AssetManager.Bundle;
// let source: any;
// if (BundleName instanceof cc.AssetManager.Bundle) {
// bundle = BundleName;
// } else {
// bundle = cc.assetManager.getBundle(BundleName);
// if (!bundle) {
// cc.error(`GetBundleSource Error BundleName: ${BundleName}`);
// return null;
// }
// }
// switch (type) {
// case Bundle_Source_Type.Scene: {
// bundle.loadScene(SourceName, onFileProgress, function (err: Error, scene: cc.SceneAsset): void {
// if (err) {
// cc.error(err);
// return null;
// }
// // cc.director.runScene(scene);
// source = scene;
// });
// break;
// }
// case Bundle_Source_Type.Json: {
// bundle.load(SourceName, onFileProgress, function (err: Error, json: cc.JsonAsset): void {
// if (err) {
// cc.error(err);
// return null;
// }
// // source = JSON.parse(json["_nativeAsset"]);
// source = json;
// });
// break;
// }
// case Bundle_Source_Type.Prefab: {
// bundle.load(SourceName, cc.Prefab, onFileProgress, function (err: Error, prefab: cc.Asset): void {
// if (err) {
// cc.error(err);
// return null;
// }
// // source = JSON.parse(json["_nativeAsset"]);
// source = prefab;
// });
// break;
// }
// default:
// bundle.load(SourceName, function (err: Error, any: any): void {
// if (err) {
// cc.error(err);
// return null;
// }
// source = any;
// });
// break;
// }
// while (typeof source === "undefined") {
// yield null;
// }
// return source;
// }
// /**
// * 釋放Bundle
// * @param {string} slotID slotID
// */
// public *BundleRelease(slotID: number): IterableIterator<any> {
// let gameName: string = `Game_${slotID}`;
// let sceneName: string = `Slot${slotID}`;
// let bundle: cc.AssetManager.Bundle = cc.assetManager.getBundle(gameName);
// if (!bundle) {
// cc.log(`BundleRelease Error BundleName: ${gameName}`);
// return;
// }
// // let bundles: cc.AssetManager.Cache<cc.AssetManager.Bundle> = cc.assetManager.bundles;
// // let cacheDir: string = cc.assetManager.cacheManager.cacheDir;
// // let cachedFiles: Object = cc.assetManager.cacheManager.cachedFiles;
// yield* this.DelBundleCache(bundle);
// yield* this.DelOthersCache(slotID);
// bundle.release(sceneName, cc.SceneAsset);
// cc.assetManager.removeBundle(bundle);
// cc.sys.garbageCollect();
// }
// /**
// * 從Bundle刪除暫存資源
// * @param {string} BundleName Bundle名稱
// */
// public *DelBundleCache(BundleName: cc.AssetManager.Bundle | string): IterableIterator<any> {
// if (!CC_JSB) {
// return;
// }
// let bundle: cc.AssetManager.Bundle;
// let source: any;
// if (BundleName instanceof cc.AssetManager.Bundle) {
// bundle = BundleName;
// } else {
// bundle = cc.assetManager.getBundle(BundleName);
// if (!bundle) {
// // cc.error(`GetBundleSource Error BundleName: ${BundleName}`);
// // return;
// bundle = yield* AssetBundleMamager.Instance.GetBundle(BundleName, this.RemoteVerList[BundleName].Version);
// }
// }
// let _map: Object = bundle["_config"].assetInfos._map;
// for (let map of Object.keys(_map)) {
// let path: string = _map[map].path;
// if (!path) {
// break;
// }
// source = yield* AssetBundleMamager.Instance.GetBundleSource(bundle, path);
// cc.assetManager.cacheManager.removeCache(source.nativeUrl);
// bundle.release(path);
// // return;
// }
// }
// /**
// * 從cachedFiles刪除暫存資源
// * @param {number} slotID slotID
// */
// public *DelOthersCache(slotID: number): IterableIterator<any> {
// if (!CC_JSB) {
// return;
// }
// let cachedFiles: Object = cc.assetManager.cacheManager.cachedFiles["_map"];
// let delcache_group: string[] = [`shared/jsons`, `Slot/Slot${slotID}`, "sounds/Slot/Default", `${BusinessTypeSetting.FolderUrlBundle}project.manifest`, "submit.txt"];
// for (let cached of Object.keys(cachedFiles)) {
// for (var i: number = 0; i < delcache_group.length; ++i) {
// let delcache: string = delcache_group[i];
// if (cached.includes(delcache)) {
// cc.assetManager.cacheManager.removeCache(cached);
// // console.log(`removeCache: ${cached}`);
// break;
// }
// }
// }
// }
// public GetHUD(BundleName: HUDM | string): HUDM {
// let HUD: HUDM;
// if (BundleName instanceof HUDM) {
// HUD = BundleName;
// } else {
// if (!this.HUGroup.has(BundleName)) {
// HUD = new HUDM(BundleName);
// this.HUGroup.set(BundleName, HUD);
// } else {
// HUD = this.HUGroup.get(BundleName);
// }
// HUD = this.HUGroup.get(BundleName);
// }
// return HUD;
// }
// /** 刪除全部暫存資源 */
// public ClearAllCache(): void {
// cc.assetManager.cacheManager.clearCache();
// cc.game.restart();
// }
// public *CheckBundleNeedHUD(BundleName: HUDM | string): IterableIterator<Enum_Loading.NeedUpdateDataObj> {
// let HUD: HUDM;
// if (BundleName instanceof HUDM) {
// HUD = BundleName;
// } else {
// HUD = this.GetHUD(BundleName);
// }
// if (!this.LocalVerList[HUD.BundleName]) {
// this.LocalVerList[HUD.BundleName] = new Enum_Loading.BundleDataObj();
// let apkVersion: string = this.RemoteVerList[HUD.BundleName].ApkVersion;
// if (apkVersion && apkVersion !== "0") {
// this.LocalVerList[HUD.BundleName].UseLocal = true;
// this.LocalVerList[HUD.BundleName].Version = apkVersion;
// }
// LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
// } else {
// if (this.RemoteVerList[HUD.BundleName].Version === this.RemoteVerList[HUD.BundleName].ApkVersion) {
// this.LocalVerList[HUD.BundleName] = this.RemoteVerList[HUD.BundleName];
// this.LocalVerList[HUD.BundleName].UseLocal = true;
// }
// }
// let UpdateData: Enum_Loading.NeedUpdateDataObj = new Enum_Loading.NeedUpdateDataObj();
// if (this.LocalVerList[HUD.BundleName].UseLocal) {
// UpdateData.IsNeedUpdate = AssetBundleMamager.Instance.versionCompareHandle(this.LocalVerList[HUD.BundleName].Version, this.RemoteVerList[HUD.BundleName].Version) < 0 ? true : false;
// if (UpdateData.IsNeedUpdate) {
// UpdateData = yield* HUD.CheckUpdate();
// }
// } else {
// UpdateData = yield* HUD.CheckUpdate();
// }
// return UpdateData;
// }
// // public *CheckBundleNeedHUD(BundleName: string): IterableIterator<boolean> {
// // if (!this.LocalVerList[BundleName]) {
// // this.LocalVerList[BundleName] = new Enum_Loading.BundleDataObj();
// // let apkVersion: string = this.RemoteVerList[BundleName].ApkVersion;
// // if (apkVersion && apkVersion !== "0") {
// // this.LocalVerList[BundleName].UseLocal = true;
// // this.LocalVerList[BundleName].Version = apkVersion;
// // }
// // LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
// // }
// // let IsUpdate: boolean = AssetBundleMamager.Instance.versionCompareHandle(this.LocalVerList[BundleName].Version, this.RemoteVerList[BundleName].Version) < 0 ? true : false;
// // return IsUpdate;
// // }
// public CheckGameNeedUpdate(GameID: number): boolean {
// let IsUpdate: boolean = false;
// let bundleName: string = `Game_${GameID}`;
// if (!this.RemoteVerList[bundleName]) {
// this.RemoteVerList[bundleName] = new Enum_Loading.BundleDataObj();
// this.RemoteVerList[bundleName].HasBundle = false;
// LocalStorageData.Instance.RemoteVerList = JSON.stringify(this.RemoteVerList);
// IsUpdate = true;
// }
// if (!this.LocalVerList[bundleName]) {
// this.LocalVerList[bundleName] = new Enum_Loading.BundleDataObj();
// let apkVersion: string = this.RemoteVerList[bundleName].ApkVersion;
// if (apkVersion && apkVersion !== "0") {
// this.LocalVerList[bundleName].UseLocal = true;
// this.LocalVerList[bundleName].Version = apkVersion;
// }
// LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
// }
// if (CC_PREVIEW) {
// return this._getIsDownload_Preview(GameID);
// }
// if (IsUpdate) {
// return IsUpdate;
// }
// IsUpdate = AssetBundleMamager.Instance.versionCompareHandle(this.LocalVerList[bundleName].Version, this.RemoteVerList[bundleName].Version) < 0 ? true : false;
// return IsUpdate;
// }
// /**
// * 比對版號(熱更能從1.0.0更新到2.0.0從2.0.0回退到1.0.0)
// * 官方提供的版本比較函數,只有服務端版本>客戶端版本時才會進行更新。所以不能從2.0.0回退到1.0.0版本。
// * @param {string} versionA 本地版號
// * @param {string} versionB 遠程版號
// * @return {number} num = -1 須更新
// * @return {number} num = 0 不須更新
// */
// public versionCompareHandle(versionA: string, versionB: string): number {
// // console.log("Ver A " + versionA + "VerB " + versionB);
// var vA: string[] = versionA.split(".");
// var vB: string[] = versionB.split(".");
// // 長度不相等,則進行更新
// if (vA.length !== vB.length) {
// return -1;
// }
// for (var i: number = 0; i < vA.length; ++i) {
// var a: number = +vA[i];
// var b: number = +vB[i] || 0;
// if (a === b) {
// // 數字相同,則跳過
// continue;
// } else {
// // 數字不同,則進行更新
// return -1;
// }
// }
// // 長度相等且數字相等,則不更新
// return 0;
// }
// //#endregion
// //#region DownloadList_Preview
// private _initdownloadList_Preview(): void {
// this.DownloadList_Preview = JSON.parse(LocalStorageData.Instance.DownloadList_Preview);
// this.DownloadList_Preview = this.DownloadList_Preview ? this.DownloadList_Preview : {};
// }
// private _getIsDownload_Preview(slotID: number): boolean {
// if (!this.DownloadList_Preview[slotID]) {
// this.SetIsDownload_Preview(slotID, false);
// }
// return !this.DownloadList_Preview[slotID];
// }
// public SetIsDownload_Preview(slotID: number, isDownload: boolean = true): void {
// this.DownloadList_Preview[slotID] = isDownload;
// LocalStorageData.Instance.DownloadList_Preview = JSON.stringify(this.DownloadList_Preview);
// }
// //#endregion
// }
// //#region enum
// /** Bundle資源類型 */
// export enum Bundle_Source_Type {
// /** Json */
// Json = "json",
// /** Scene */
// Scene = "scene",
// /** Prefab */
// Prefab = "prefab"
// }
// //#endregion
// //#region 廢棄 Function
// // /**
// // * 從Bundle刪除暫存資源
// // * @param {string} BundleName Bundle名稱
// // */
// // public *DelBundleCache(BundleName: cc.AssetManager.Bundle | string): IterableIterator<any> {
// // if (!CC_JSB) {
// // return;
// // }
// // let WritablePath: string = `${jsb.fileUtils.getWritablePath()}gamecaches/${BundleName}`;
// // if (jsb.fileUtils.isDirectoryExist(WritablePath)) {
// // jsb.fileUtils.removeDirectory(WritablePath);
// // }
// // }
// //#endregion