[del] HUD

This commit is contained in:
建喵 2022-08-29 11:23:07 +08:00
parent e5b166415f
commit 370f0e99db
16 changed files with 170 additions and 1681 deletions

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.3",
"uuid": "c12c11f7-2e17-4727-a114-d4b19dfbe650",
"importer": "folder",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.3",
"uuid": "63dab366-ead1-4057-a9c2-a2548219328e",
"importer": "folder",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.3",
"uuid": "edf98a7e-294c-4e7a-8a53-c0b10ea75a45",
"importer": "folder",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}

View File

@ -1,456 +0,0 @@
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.02.0.02.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

View File

@ -1,10 +0,0 @@
{
"ver": "1.1.0",
"uuid": "97a0b2c9-72f8-4797-874a-263e4558f765",
"importer": "typescript",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@ -1,425 +0,0 @@
import BusinessTypeSetting from "../../_BusinessTypeSetting/BusinessTypeSetting";
import Enum_Loading from "../HUDV2/Enum_Loading";
import AssetBundleMamager from "./AssetBundleMamager";
const { ccclass, property } = cc._decorator;
/** HUDManager */
@ccclass
export default class HUDM extends cc.Component {
//#region static 屬性
private static _instance: HUDM = null;
public static get Instance(): HUDM { return HUDM._instance; }
//#endregion
//#region static 屬性
public BundleName: string = "";
//#endregion
//#region private 屬性
private _am: jsb.AssetsManager;
private _onFileProgress: (finish: number, total: number, item: string) => void;
private _updateListener: any;
private _checkListener: any;
private _versionCompareHandle: any = null;
private _needUpdateData: Enum_Loading.NeedUpdateDataObj = null;
private _updateingData: Enum_Loading.UpdateingDataObj = null;
private _updating: boolean = false;
private _canRetry: boolean = false;
private _isChangeUrl: boolean = false;
private _path: string = "Bundle";
private _customManifest: string = "";
private _storagePath: string = "";
//#endregion
//#region Lifecycle
constructor(...params: any[]) {
super();
if (!cc.sys.isNative) {
return;
} else if (params.length === 0) {
return;
}
HUDM._instance = this;
this.BundleName = params[0];
// let packageUrl: string = params[1];
// let BundleData: Enum_Loading.BundleDataObj = AssetBundleMamager.Instance.RemoteVerList[this.BundleName];
// let packageUrl: string = BundleData.BundleUrl;
let packageUrl: string = `${BusinessTypeSetting.UsePatch}${BusinessTypeSetting.FolderUrlBundle}${this.BundleName}`;
this._customManifest = JSON.stringify({
"packageUrl": packageUrl,
"remoteManifestUrl": `${packageUrl}/project.manifest`,
"remoteVersionUrl": `${packageUrl}/version.json`,
"version": "0.0.0",
});
this._storagePath = `${(jsb.fileUtils ? jsb.fileUtils.getWritablePath() : "./")}${this._path}/${this.BundleName}`;
// 本地熱更目錄下已存在project.manifest則直接修改已存在的project.manifest
if (AssetBundleMamager.Instance.IsChangeBundleUrl) {
if (jsb.fileUtils.isFileExist(this._storagePath + "/project.manifest")) {
this._isChangeUrl = true;
this._modifyAppLoadUrlForManifestFile(this._storagePath, packageUrl);
}
}
this._versionCompareHandle = function (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;
};
this._initAssetManaget();
}
private _initAssetManaget(): void {
//
this._am = new jsb.AssetsManager("", this._storagePath, this._versionCompareHandle);
// Setup the verification callback, but we don't have md5 check function yet, so only print some message
// Return true if the verification passed, otherwise return false
this._am.setVerifyCallback(function (path: any, asset: { compressed: any; md5: any; path: any; size: any; }): boolean {
// When asset is compressed, we don't need to check its md5, because zip file have been deleted.
var compressed: any = asset.compressed;
// Retrieve the correct md5 value.
var expectedMD5: string = asset.md5;
// asset.path is relative path and path is absolute.
var relativePath: string = asset.path;
// The size of asset file, but this value could be absent.
var size: any = asset.size;
if (compressed) {
// panel.info.string = "Verification passed : " + relativePath;
// cc.log("onLoad -> Verification passed : " + relativePath);
return true;
} else {
// panel.info.string = "Verification passed : " + relativePath + ' (' + expectedMD5 + ')';
// cc.log("onLoad -> setVerifyCallbackVerification passed : " + relativePath + " (" + expectedMD5 + ")");
return true;
}
});
if (cc.sys.os === cc.sys.OS_ANDROID) {
// Some Android device may slow down the download process when concurrent tasks is too much.
// The value may not be accurate, please do more test and find what's most suitable for your game.
// this._am.setMaxConcurrentTask(10);
this._am["setMaxConcurrentTask"](10);
// this.panel.info.string = "Max concurrent tasks count have been limited to 2";
// cc.log("onLoad -> Max concurrent tasks count have been limited to 10");
}
}
private _modifyAppLoadUrlForManifestFile(filePath: string, newBundleUrl: string): void {
let allpath: string[] = [filePath, filePath + "_temp"];
let manifestname: string[] = ["project.manifest", "project.manifest.temp"];
for (var i: number = 0; i < allpath.length; ++i) {
let path: string = `${allpath[i]}/${manifestname[i]}`;
if (jsb.fileUtils.isFileExist(path)) {
// console.log(`[HUD] modifyAppLoadUrlForManifestFile: 有下載的manifest文件直接修改熱更地址`);
// 修改project.manifest
let projectManifest: string = jsb.fileUtils.getStringFromFile(path);
let projectManifestObj: any = JSON.parse(projectManifest);
projectManifestObj.packageUrl = newBundleUrl;
projectManifestObj.remoteManifestUrl = newBundleUrl + "/project.manifest";
projectManifestObj.remoteVersionUrl = newBundleUrl + "/version.json";
let afterString: string = JSON.stringify(projectManifestObj);
let isWrittenProject: boolean = jsb.fileUtils.writeStringToFile(afterString, path);
// // 更新數據庫中的新請求地址,下次如果檢測到不一致就重新修改 manifest 文件
// if (isWrittenProject) {
// LocalStorageData.Instance.BundleUrl = BusinessTypeSetting.UsePatch;
// }
// console.log("[HUD] 修改是否成功,project.manifest:", isWrittenProject);
// console.log("[HUD] 修改後文件:", projectManifestObj.packageUrl, projectManifestObj.remoteManifestUrl, projectManifestObj.remoteVersionUrl);
}
}
}
//#endregion
public *CheckUpdate(): IterableIterator<any> {
this._needUpdateData = null;
if (this._updating) {
// this.panel.info.string = 'Checking or updating ...';
console.error("checkUpdate -> Checking or updating ...");
return;
}
if (this._am.getState() === jsb.AssetsManager.State.UNINITED) {
let manifest: jsb.Manifest = new jsb.Manifest(this._customManifest, this._storagePath);
this._am.loadLocalManifest(manifest, this._storagePath);
}
if (!this._am.getLocalManifest() || !this._am.getLocalManifest().isLoaded()) {
// this.tipsLabel.string = "Failed to load local manifest ...";
console.error("checkUpdate -> Failed to load local manifest ...");
return;
}
this._am.setEventCallback(this.checkCb.bind(this));
this._am.checkUpdate();
this._updating = true;
while (this._needUpdateData === null) {
yield null;
}
let newBundleUrl: string = `${BusinessTypeSetting.UsePatch}${BusinessTypeSetting.FolderUrlBundle}${this.BundleName}`;
this._modifyAppLoadUrlForManifestFile(this._storagePath, newBundleUrl);
this._initAssetManaget();
let manifest: jsb.Manifest = new jsb.Manifest(this._customManifest, this._storagePath);
this._am.loadLocalManifest(manifest, this._storagePath);
if (!this._am.getLocalManifest() || !this._am.getLocalManifest().isLoaded()) {
// this.tipsLabel.string = "Failed to load local manifest ...";
console.error("checkUpdate -> Failed to load local manifest ...");
return;
}
// 更新動態路徑後再跑一次
this._am.setEventCallback(this.checkCb.bind(this));
this._needUpdateData = null;
this._am.checkUpdate();
this._updating = true;
while (this._needUpdateData === null) {
yield null;
}
if (this._isChangeUrl && (!this._needUpdateData.IsNeedUpdate || this._needUpdateData.TotalBytes === "0 B")) {
if (jsb.fileUtils.isFileExist(this._storagePath)) {
let isremoveDirectory: boolean = jsb.fileUtils.removeDirectory(this._storagePath);
let isremoveDirectory_temp: boolean = jsb.fileUtils.removeDirectory(this._storagePath + "_temp");
if (isremoveDirectory_temp) {
console.log(`removeDirectory: ${this._storagePath}_temp`);
}
if (isremoveDirectory) {
console.log(`removeDirectory: ${this._storagePath}`);
this._needUpdateData = null;
this._initAssetManaget();
this._needUpdateData = yield* this.CheckUpdate();
}
}
}
return this._needUpdateData;
}
private checkCb(event: jsb.EventAssetsManager): void {
var failed: boolean = false;
switch (event.getEventCode()) {
case jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
// this.tipsLabel.string = "No local manifest file found, HUD skipped.";
console.error("checkCb -> No local manifest file found, HUD skipped.");
failed = true;
break;
case jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
case jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
// this.tipsLabel.string = "Fail to download manifest file, HUD skipped.";
console.error("checkCb -> Fail to download manifest file, HUD skipped.");
failed = true;
break;
case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
// this.tipsLabel.string = "Already up to date with the latest remote version.";
// cc.log("checkCb -> Already up to date with the latest remote version.");
this._needUpdateData = new Enum_Loading.NeedUpdateDataObj(false);
break;
case jsb.EventAssetsManager.NEW_VERSION_FOUND:
// this.downloadLabel.node.active = true;
// this.downloadLabel.string = "New version found, please try to update." + event.getTotalBytes();
// this.panel.checkBtn.active = false;
// this.panel.fileProgress.progress = 0;
// this.panel.byteProgress.progress = 0;
// cc.log("checkCb -> New version found, please try to update." + event.getTotalBytes());
this._needUpdateData = new Enum_Loading.NeedUpdateDataObj(true, this._bytesToSize(event.getTotalBytes()));
break;
default:
return;
}
this._am.setEventCallback(null);
this._checkListener = null;
this._updating = false;
if (failed) {
//
}
}
public *HUD(onFileProgress?: (finish: number, total: number, item: string) => void): IterableIterator<any> {
this._updateingData = null;
if (this._am && !this._updating) {
this._am.setEventCallback(this._updateCb.bind(this));
if (this._am.getState() === jsb.AssetsManager.State.UNINITED) {
let manifest: jsb.Manifest = new jsb.Manifest(this._customManifest, this._storagePath);
this._am.loadLocalManifest(manifest, this._storagePath);
}
this._onFileProgress = onFileProgress ? onFileProgress : null;
this._am.update();
this._updating = true;
while (this._updateingData === null) {
yield null;
}
return this._updateingData;
} else {
return new Enum_Loading.UpdateingDataObj(false);
}
}
private _updateCb(event: jsb.EventAssetsManager): void {
var needRestart: boolean = false;
var failed: boolean = false;
switch (event.getEventCode()) {
case jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
// this.panel.info.string = 'No local manifest file found, HUD skipped.';
cc.log("updateCb -> No local manifest file found, HUD skipped.");
failed = true;
break;
case jsb.EventAssetsManager.UPDATE_PROGRESSION:
// this.panel.byteProgress.progress = event.getPercent();
// this.panel.fileProgress.progress = event.getPercentByFile();
// this.panel.fileLabel.string = event.getDownloadedFiles() + ' / ' + event.getTotalFiles();
// this.tipsLabel.string = event.getDownloadedBytes() + " / " + event.getTotalBytes();
// cc.log("updateCb -> " + event.getDownloadedBytes() + " / " + event.getTotalBytes());
// var msg: string = event.getMessage();
// if (msg) {
// // this.panel.info.string = 'Updated file: ' + msg;
// cc.log("updateCb -> Updated file: " + msg);
// console.log("updateCb -> " + event.getPercent() / 100 + "% : " + msg);
// }
var msg: string = event.getMessage();
if (this._onFileProgress) {
this._onFileProgress(event.getDownloadedBytes(), event.getTotalBytes(), msg ? msg : "");
}
break;
case jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
case jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
// this.panel.info.string = 'Fail to download manifest file, HUD skipped.';
console.error("updateCb -> Fail to download manifest file, HUD skipped.");
failed = true;
break;
case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
// this.panel.info.string = 'Already up to date with the latest remote version.';
console.error("updateCb -> Already up to date with the latest remote version.");
failed = true;
break;
case jsb.EventAssetsManager.UPDATE_FINISHED:
// this.tipsLabel.string = "更新完成. " + event.getMessage();
// cc.log("updateCb -> 更新完成. " + event.getMessage());
this._updateingData = new Enum_Loading.UpdateingDataObj(true);
needRestart = true;
break;
case jsb.EventAssetsManager.UPDATE_FAILED:
// this.panel.info.string = 'Update failed. ' + event.getMessage();
console.error("updateCb -> Update failed. " + event.getMessage());
// this.panel.retryBtn.active = true;
this._canRetry = true;
this._updateingData = new Enum_Loading.UpdateingDataObj(false);
this._updating = false;
break;
case jsb.EventAssetsManager.ERROR_UPDATING:
// this.panel.info.string = 'Asset update error: ' + event.getAssetId() + ', ' + event.getMessage();
console.error("updateCb -> Asset update error: " + event.getAssetId() + ", " + event.getMessage());
break;
case jsb.EventAssetsManager.ERROR_DECOMPRESS:
// this.panel.info.string = event.getMessage();
console.error("updateCb -> " + event.getMessage());
break;
default:
break;
}
if (failed) {
this._am.setEventCallback(null);
this._updateListener = null;
this._updating = false;
}
// 測試先不restart 之後看情況
// if (needRestart) {
// this._am.setEventCallback(null);
// this._updateListener = null;
// // Prepend the manifest's search path
// var searchPaths: string[] = jsb.fileUtils.getSearchPaths();
// // var newPaths = this._am.getLocalManifest().getSearchPaths();
// // cc.log("newPath."+JSON.stringify(newPaths));
// // Array.prototype.unshift.apply(searchPaths, newPaths);
// cc.sys.localStorage.setItem("HUDSearchPaths", JSON.stringify(searchPaths));
// jsb.fileUtils.setSearchPaths(searchPaths);
// cc.audioEngine.stopAll();
// cc.game.restart();
// }
}
public *RetryDownLoadFailedAssets(): IterableIterator<any> {
if (!this._updating && this._canRetry) {
this._updateingData = null;
// this.panel.retryBtn.active = false;
this._canRetry = false;
// this.panel.info.string = 'Retry failed Assets...';
// cc.log("retry -> Retry failed Assets...");
this._am.downloadFailedAssets();
while (this._updateingData === null) {
yield null;
}
return this._updateingData;
} else {
console.error(`retry -> error updating: ${this._updating}, canRetry: ${this._canRetry}`);
this._updateingData = new Enum_Loading.UpdateingDataObj(false);
}
}
private _bytesToSize(bytes: number): string {
if (bytes === 0) {
return "0 B";
}
let k: number = 1024;
let sizes: string[] = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
let i: number = Math.floor(Math.log(bytes) / Math.log(k));
return (bytes / Math.pow(k, i)).toPrecision(3) + " " + sizes[i];
}
protected onDestroy(): void {
if (this._updateListener) {
this._am.setEventCallback(null);
this._updateListener = null;
}
}
}

View File

@ -1,10 +0,0 @@
{
"ver": "1.1.0",
"uuid": "dd9501f7-957a-4e62-8630-d43f62d171d1",
"importer": "typescript",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@ -1,522 +0,0 @@
import BusinessTypeSetting from "../../_BusinessTypeSetting/BusinessTypeSetting";
import { CoroutineV2 } from "../CatanEngine/CoroutineV2/CoroutineV2";
import LocalStorageData from "../Data/LocalStorageData";
import Enum_Loading from "./Enum_Loading";
export default class AssetBundleMamagerV2 {
//#region static 屬性
private static _instance: AssetBundleMamagerV2 = null;
public static get Instance(): AssetBundleMamagerV2 { return AssetBundleMamagerV2._instance; }
//#endregion
//#region public 屬性
/** 本地VerList */
public LocalVerList: Enum_Loading.VerListObj = null;
/** 遠端VerList */
public RemoteVerList: JSON = null;
public DownloadList_Preview: Object = {};
/** 快取資源 */
public CachedFiles: Map<string, cc.Asset> = new Map<string, cc.Asset>();
//#endregion
//#region Lifecycle
constructor() {
AssetBundleMamagerV2._instance = this;
CC_PREVIEW && this._initdownloadList_Preview();
}
//#endregion
//#region 清除資料
/** 判斷更改編譯版號.清除BUNDLE記錄 */
public CheckCompileVersion(): void {
let oldCompileVersion: string = LocalStorageData.Instance.CompileVersion;
let newCompileVersion: string = BusinessTypeSetting.COMPILE_VERSION;
if (oldCompileVersion && oldCompileVersion !== newCompileVersion) {
this.ClearBundleData();
console.log("change compile version.");
}
LocalStorageData.Instance.CompileVersion = BusinessTypeSetting.COMPILE_VERSION;
}
/** 判斷更改PATCH環境.清除BUNDLE記錄 */
public CheckChangePatchUrl(): void {
let oldBundleUrl: string = LocalStorageData.Instance.BundleUrl;
let newBundleUrl: string = BusinessTypeSetting.UsePatch;
if (oldBundleUrl && oldBundleUrl !== newBundleUrl) {
this.ClearBundleData();
console.log("change patch url.");
}
LocalStorageData.Instance.BundleUrl = BusinessTypeSetting.UsePatch;
}
/** 清除Bundle資料 */
public ClearBundleData(): void {
cc.sys.localStorage.removeItem("LocalVerList");
cc.sys.localStorage.removeItem("RemoteVerList");
cc.assetManager.bundles.clear();
if (CC_JSB) {
cc.assetManager.cacheManager.clearCache();
console.log("clear bundle data.");
}
}
/** 清除所有資料重啟 */
public ClearAppDataToRestart(): void {
cc.sys.localStorage.clear();
cc.assetManager.bundles.clear();
if (CC_JSB) {
cc.assetManager.cacheManager.clearCache();
cc.game.restart();
} else {
window.location.reload();
}
}
//#endregion
//#region Custom Function
/**
* Bundle
* @param {string} BundleName Bundle名稱
* @param {string} Version
* @return {cc.AssetManager.Bundle} Bundle
*/
public *GetBundle(BundleName: string): IterableIterator<cc.AssetManager.Bundle> {
let self: this = this;
let bundle: cc.AssetManager.Bundle | boolean = cc.assetManager.getBundle(BundleName);
if (bundle) {
yield* this.GetDepsBundle(bundle.deps);
return bundle;
}
/** 判斷是不是要下載新版本 */
let isNeedUpdate: boolean = this.IsNeedUpdate(BundleName);
if (isNeedUpdate) {
// 下載新版本前需要先清除暫存
console.log(`removeCache: ${BundleName}`);
this.DelBundleCache(BundleName);
this.LocalVerList[BundleName].UseLocal = false;
}
/** Bundle路徑 */
let BundleUrl: string = BusinessTypeSetting.GetRemoteFileUrl(BundleName);
if (CC_DEV) {
// CC_DEVBundle路徑為: BundleName
// if (BundleName.indexOf("Script") != -1) {
BundleUrl = `${BundleName}`;
// } else {
// BundleUrl = "http://192.168.7.57/bj_casino/test/" + BundleName;
// }
} else if (this.LocalVerList[BundleName].UseLocal) {
// 本地Bundle路徑為: assets/assets/${BundleName}
BundleUrl = `assets/${BundleName}`;
}
if (CC_DEV) {
cc.assetManager.loadBundle(BundleUrl, (err: Error, resp: cc.AssetManager.Bundle) => {
if (err) {
console.error(err);
bundle = null;
return;
}
bundle = resp;
});
while (typeof bundle === "undefined") {
yield null;
}
} else if (BundleName.includes("Script")) {
bundle = yield* self.loadScriptBundle(BundleUrl);
} else {
if (CC_JSB && !this.LocalVerList[BundleName].UseLocal) {
let bundlePath: string = `${jsb.fileUtils.getWritablePath()}gamecaches/${BundleName}/`;
if (!jsb.fileUtils.isFileExist(bundlePath)) {
cc.assetManager.cacheManager["makeBundleFolder"](BundleName);
}
}
bundle = yield* self.loadUIBundle(BundleUrl);
}
if (bundle) {
yield* this.GetDepsBundle((<cc.AssetManager.Bundle>bundle).deps);
if (isNeedUpdate) {
// 下載成功後更改本地Bundle版本
self.LocalVerList[BundleName].Version = self.RemoteVerList[BundleName];
LocalStorageData.Instance.LocalVerList = JSON.stringify(self.LocalVerList);
}
}
return bundle;
}
/**
* Bundle取得資源
* @param {string} BundleUrl Bundle路徑
*/
public *loadScriptBundle(BundleUrl: string): IterableIterator<any> {
let fileName: string = `index.${CC_DEBUG ? "js" : "jsc"}`;
let fileUrl: string = `${BundleUrl}/${fileName}`;
let run: boolean = true;
let isSuceess: boolean = false;
cc.assetManager.loadScript(fileUrl, (err: Error) => {
if (err) {
console.error(`[Error] ${fileUrl}載入失敗 err: ${err}`);
run = false;
return;
}
isSuceess = true;
run = false;
});
while (run) {
yield null;
}
return isSuceess;
}
/**
* Bundle取得資源
* @param {string} BundleUrl Bundle路徑
*/
public *loadUIBundle(BundleUrl: string): IterableIterator<cc.AssetManager.Bundle> {
let fileName: string = "config.json";
let fileUrl: string = `${BundleUrl}/${fileName}`;
let data: any;
let run: boolean = true;
cc.assetManager.loadRemote(fileUrl, (err: Error, res: cc.JsonAsset) => {
if (err) {
console.error(`[Error] ${fileUrl}載入失敗 err: ${err}`);
return;
}
data = res.json;
run = false;
});
while (run) {
yield null;
}
let bundle: cc.AssetManager.Bundle = new cc.AssetManager.Bundle();
data.base = `${BundleUrl}/`;
bundle.init(data);
return bundle;
}
/**
* Bundle
* @param {string} BundleName Bundle名稱
* @param {string} Version
* @return {cc.AssetManager.Bundle} Bundle
*/
public *GetDepsBundle(deps: string[]): IterableIterator<any> {
if (!deps || deps.length <= 2) {
return;
}
let self: this = this;
let GetBundle_F_Arr: IterableIterator<any>[] = [];
for (const bundleName of deps) {
if (!["main", "internal"].includes(bundleName)) {
let GetBundle_F: IterableIterator<any> = function* (): IterableIterator<any> {
yield* self.GetBundle(bundleName);
}();
GetBundle_F_Arr.push(GetBundle_F);
}
}
yield CoroutineV2.Parallel(...GetBundle_F_Arr).Start();
}
/**
* Bundle取得資源
* @param {number} slotID slotID
* @param {Function} onFileProgress onFileProgress
*/
public *PreloadBundleScene(slotID: number, onFileProgress?: (finish: number, total: number, item: cc.AssetManager.RequestItem) => void): IterableIterator<any> {
let BundleName: string = `Game_${slotID}`;
let SourceName: string = `Slot${slotID}`;
let run: boolean = true;
let UpdateingData: Enum_Loading.UpdateingDataObj = new Enum_Loading.UpdateingDataObj(false);
let bundle: cc.AssetManager.Bundle = yield* AssetBundleMamagerV2.Instance.GetBundle(BundleName);
if (!bundle) {
console.error(`GetBundleSource Error BundleName: ${BundleName}`);
return UpdateingData;
}
bundle.preloadScene(SourceName, onFileProgress, function (error: Error): void {
if (error) {
console.error(error);
run = false;
return;
}
UpdateingData.IsUpdatecomplete = true;
run = false;
});
while (run) {
yield null;
}
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 = yield* AssetBundleMamagerV2.Instance.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} bundleName bundleName
* @param {string} sourcePath Bundle資料夾下的路徑
*/
public static GetBundleSourceV2(bundleName: cc.bundleName | string, sourcePath: string): cc.Prefab {
let bundle: cc.AssetManager.Bundle = cc.assetManager.getBundle(bundleName);
if (!bundle) {
cc.error(`GetBundleSourceV2 getBundle error bundleName: ${bundleName}`);
return null;
}
let source: cc.Prefab = bundle.get(sourcePath, cc.Prefab);
if (!source) {
cc.error(`GetBundleSourceV2 bundle.get error bundleName: ${bundleName}, sourcePath: ${sourcePath}`);
return 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;
}
this.ReleaseSlotCache(slotID);
}
/**
* cachedFiles刪除暫存資源
* @param {string} BundleName Bundle名稱
*/
public DelBundleCache(BundleName: string): void {
if (CC_BUILD && cc.sys.isNative) {
let cachedFiles: Object = cc.assetManager.cacheManager.cachedFiles["_map"];
let delcache: string = BusinessTypeSetting.GetRemoteFileUrl(BundleName) + "/";
for (let cached of Object.keys(cachedFiles)) {
if (cached.includes(delcache)) {
cc.assetManager.cacheManager.removeCache(cached);
// console.log(`removeCache: ${cached}`);
}
}
}
}
/**
* cachedFiles釋放暫存資源
* @param {number} slotID slotID
*/
public ReleaseSlotCache(slotID: number): void {
if (!CC_JSB) {
return;
}
let delcachedKeys: string[] = [];
let cachedFiles: Map<string, cc.Asset> = this.CachedFiles;
let delcache_group: string[] = [`shared/jsons`, `Slot/Slot${slotID}`, "sounds/Slot/Default", "submit.txt"];
cachedFiles.forEach((cached: cc.Asset, key: string, map: Map<string, cc.Asset>) => {
for (var i: number = 0; i < delcache_group.length; ++i) {
let delcache: string = delcache_group[i];
if (key.includes(delcache)) {
cc.assetManager.releaseAsset(cached);
delcachedKeys.push(key);
break;
}
}
});
for (var i: number = 0; i < delcachedKeys.length; ++i) {
this.CachedFiles.delete(delcachedKeys[i]);
}
}
/**
*
* @param {string} BundleName Bundle名稱
*/
public IsNeedUpdate(BundleName: string): boolean {
let isNeedUpdate: boolean;
// 判斷本地有無Bundle資料
if (this.LocalVerList[BundleName] && !this.LocalVerList[BundleName].HasBundle) {
if (this.RemoteVerList[BundleName]) {
// 改成有包過Bundle了,重新走下面流程
this.LocalVerList[BundleName] = null;
} else {
return true;
}
}
if (!this.LocalVerList[BundleName]) {
// 本地無Bundle資料需要新增
this.LocalVerList[BundleName] = new Enum_Loading.BundleDataObj();
LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
}
let version: string = this.RemoteVerList[BundleName];
if (!version) {
// !version代表還沒包Bundle
this.LocalVerList[BundleName].HasBundle = false;
LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
return true;
} else if (version === "0") {
// version === "0" 代表要使用本體Bundle
this.LocalVerList[BundleName].UseLocal = true;
this.LocalVerList[BundleName].Version = "0";
LocalStorageData.Instance.LocalVerList = JSON.stringify(this.LocalVerList);
}
isNeedUpdate = AssetBundleMamagerV2.Instance.versionCompareHandle(this.LocalVerList[BundleName].Version, this.RemoteVerList[BundleName]) !== 0 ? true : false;
return isNeedUpdate;
}
/**
* (1.0.02.0.02.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 a - b;
}
}
// 長度相等且數字相等,則不更新
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 : {};
}
public 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

View File

@ -1,10 +0,0 @@
{
"ver": "1.1.0",
"uuid": "383b4628-2b2a-4de4-8aca-913015e91cae",
"importer": "typescript",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@ -1,72 +0,0 @@
const { ccclass, property } = cc._decorator;
export module Enum_Loading {
//#region Enum
//#endregion
//#region Class
// /** BaseBundle資料 */
// @ccclass("BaseBundleObj")
// export class BaseBundleObj {
// @property({ displayName: "Bundle名稱", tooltip: "Bundle名稱" })
// public BundleName: string = "";
// @property({ displayName: "優先度", tooltip: "優先度", type: cc.Integer })
// public Priority: number = 1;
// }
class BundleDictionary<T> {
[x: string]: T;
}
/** VerList資料 */
@ccclass("VerListObj")
export class VerListObj extends BundleDictionary<BundleDataObj> {
}
/** Bundle資料 */
@ccclass("BundleDataObj")
export class BundleDataObj {
public Version: string = "0";
public ApkVersion: string = "0";
public UseLocal: boolean = false;
/** 有沒有包到Bundle */
public HasBundle: boolean = true;
}
/** Bundle資料 */
@ccclass("NeedUpdateDataObj")
export class NeedUpdateDataObj {
/** 是否需要更新 */
public IsNeedUpdate: boolean;
/** 更新大小 */
public TotalBytes: string;
constructor(...params: any[]) {
this.IsNeedUpdate = params[0];
this.TotalBytes = params[1] ? params[1] : null;
}
}
/** Bundle資料 */
@ccclass("UpdateingDataObj")
export class UpdateingDataObj {
/** 是否更新完成 */
public IsUpdatecomplete: boolean;
constructor(...params: any[]) {
this.IsUpdatecomplete = params[0];
}
}
//#endregion
}
export default Enum_Loading;

View File

@ -1,10 +0,0 @@
{
"ver": "1.1.0",
"uuid": "573d847e-893c-4fa2-8bd2-41918709fcf4",
"importer": "typescript",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@ -1,43 +0,0 @@
const { ccclass, property } = cc._decorator;
export module GameData_HUD {
//#region Enum
/** BundleName */
export enum BundleName {
/** CommonSound */
CommonSound = "CommonSound",
CommonLanguageTexture = "CommonLanguageTexture",
Common = "Common",
ResourceItem = "ResourceItem",
MainControl = "MainControl",
Login = "Login",
Lobby = "Lobby",
BindAccount = "BindAccount",
Shop = "Shop",
Vip = "Vip",
Ad = "Ad",
SettingPanel = "SettingPanel",
PlayerInfo = "PlayerInfo",
Rank = "Rank",
Chat = "Chat",
Gift = "Gift",
Activity = "Activity",
Mail = "Mail",
GettingPanel = "GettingPanel",
Backpack = "Backpack",
Game_GetCoin = "Game_GetCoin",
Game_BigWinJackpot = "Game_BigWinJackpot",
Game_BottomUI_BJ = "Game_BottomUI_BJ",
Game_BottomUI_SD = "Game_BottomUI_SD",
SlotCommom = "SlotCommom",
TableCommon = "TableCommon",
FishCommon = "FishCommon",
ActivityMission = "ActivityMission"
}
//#endregion
}
export default GameData_HUD;

View File

@ -1,10 +0,0 @@
{
"ver": "1.1.0",
"uuid": "e85368d6-e018-430e-bf1d-6ecd2973c6a8",
"importer": "typescript",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.3",
"uuid": "fd4b4720-4e75-4bfe-a27c-1520c3f18eb0",
"importer": "folder",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}

View File

@ -0,0 +1,13 @@
{
"ver": "1.1.3",
"uuid": "eba93305-455d-4d2d-a914-db71bc7f0022",
"importer": "folder",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}

View File

@ -1,115 +1,107 @@
{ {
"rules": { "defaultSeverity": "warning",
"ban": [ "rules": {
true, "ban": [
[ true,
"_", [
"extend" "_",
], "extend"
[ ],
"_", [
"isNull" "_",
], "isNull"
[ ],
"_", [
"isDefined" "_",
] "isDefined"
], ]
"class-name": false, ],
"comment-format": [ "class-name": false,
true, "comment-format": [
"check-space" true,
], "check-space"
"curly": true, ],
"eofline": false, "curly": true,
"forin": false, "eofline": false,
"indent": [ "forin": false,
true, "indent": [
4 true,
], 4
"interface-name": [ ],
true, "interface-name": [
"never-prefix" true,
], "never-prefix"
"jsdoc-format": true, ],
"label-position": true, "jsdoc-format": true,
"label-undefined": true, "label-position": true,
"max-line-length": [ "max-line-length": [
false, false,
140 140
], ],
"no-arg": true, "no-arg": true,
"no-bitwise": false, "no-bitwise": false,
"no-console": [ "no-console": [
true, true,
"debug", "debug",
"info", "info",
"time", "time",
"timeEnd", "timeEnd",
"trace" "trace"
], ],
"no-construct": true, "no-construct": true,
"no-debugger": true, "no-debugger": true,
"no-duplicate-key": true, "no-duplicate-variable": true,
"no-duplicate-variable": true, "no-empty": true,
"no-empty": true, // "no-eval": true,
// "no-eval": true, "no-string-literal": false,
"no-string-literal": false, "no-trailing-whitespace": true,
"no-trailing-comma": true, "no-unused-expression": false,
"no-trailing-whitespace": true, "no-unused-variable": true,
"no-unused-expression": false, "no-use-before-declare": false,
"no-unused-variable": true, "one-line": [
"no-unreachable": true, true,
"no-use-before-declare": false, "check-open-brace",
"one-line": [ "check-catch",
true, "check-else",
"check-open-brace", "check-whitespace"
"check-catch", ],
"check-else", "quotemark": [
"check-whitespace" true,
], "double"
"quotemark": [ ],
true, "radix": true,
"double" "semicolon": [
], true,
"radix": true, "always"
"semicolon": [ ],
true, "triple-equals": [
"always" true,
], "allow-null-check"
"triple-equals": [ ],
true, "typedef": [
"allow-null-check" true,
], "call-signature",
"typedef": [ "parameter",
true, "property-declaration",
"call-signature", "variable-declaration"
"parameter", ],
"property-declaration", "typedef-whitespace": [
"variable-declaration" true,
], {
"typedef-whitespace": [ "call-signature": "nospace"
true, },
{ {
"call-signature": "nospace" "index-signature": "space"
}, }
{ ],
"index-signature": "space" "variable-name": false,
} "whitespace": [
], false,
"use-strict": [ "check-branch",
true, "check-decl",
"check-module", "check-operator",
"check-function" "check-separator",
], "check-type"
"variable-name": false, ]
"whitespace": [ }
false,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
} }