@akashic/akashic-engine
Advanced tools
Comparing version 3.16.4 to 3.16.5
@@ -56,2 +56,6 @@ import type { Asset, AssetLoadError } from "@akashic/pdi-types"; | ||
userData: UserData | null; | ||
/** | ||
* エラーが発生したか否かに関わらず常に `handlerSet.handleFinish` を実行するか。 | ||
*/ | ||
alwaysNotifyFinish?: boolean; | ||
} | ||
@@ -93,2 +97,10 @@ /** | ||
_requested: boolean; | ||
/** | ||
* @private | ||
*/ | ||
_alwaysNotifyFinish: boolean; | ||
/** | ||
* @private | ||
*/ | ||
_failureAssetIds: (string | DynamicAssetConfiguration | AssetGenerationConfiguration)[]; | ||
constructor(param: AssetHolderParameterObject<UserData>); | ||
@@ -106,2 +118,14 @@ request(): boolean; | ||
_onAssetLoad(asset: Asset): void; | ||
/** | ||
* @private | ||
*/ | ||
_decrementWaitingAssetCount(): void; | ||
/** | ||
* @private | ||
*/ | ||
_getFailureAssetIds(): (string | DynamicAssetConfiguration | AssetGenerationConfiguration)[]; | ||
/** | ||
* @private | ||
*/ | ||
_peekAssetConfFromAssetId(id: string): string | DynamicAssetConfiguration | AssetGenerationConfiguration; | ||
} |
@@ -21,2 +21,4 @@ "use strict"; | ||
this._requested = false; | ||
this._alwaysNotifyFinish = !!param.alwaysNotifyFinish; | ||
this._failureAssetIds = []; | ||
} | ||
@@ -40,2 +42,3 @@ AssetHolder.prototype.request = function () { | ||
this._assetIds = undefined; | ||
this._failureAssetIds = undefined; | ||
this._requested = false; | ||
@@ -67,2 +70,7 @@ }; | ||
} | ||
else if (this._alwaysNotifyFinish) { | ||
var assetConf = this._peekAssetConfFromAssetId(asset.id); | ||
this._failureAssetIds.push(assetConf); | ||
this._decrementWaitingAssetCount(); | ||
} | ||
} | ||
@@ -79,2 +87,8 @@ }; | ||
this._assets.push(asset); | ||
this._decrementWaitingAssetCount(); | ||
}; | ||
/** | ||
* @private | ||
*/ | ||
AssetHolder.prototype._decrementWaitingAssetCount = function () { | ||
--this.waitingAssetsCount; | ||
@@ -85,4 +99,24 @@ if (this.waitingAssetsCount > 0) | ||
throw ExceptionFactory_1.ExceptionFactory.createAssertionError("AssetHolder#_onAssetLoad: broken waitingAssetsCount"); | ||
var hs = this._handlerSet; | ||
hs.handleFinish.call(hs.owner, this, true); | ||
}; | ||
/** | ||
* @private | ||
*/ | ||
AssetHolder.prototype._getFailureAssetIds = function () { | ||
return this._failureAssetIds; | ||
}; | ||
/** | ||
* @private | ||
*/ | ||
AssetHolder.prototype._peekAssetConfFromAssetId = function (id) { | ||
for (var _i = 0, _a = this._assetIds; _i < _a.length; _i++) { | ||
var assetConf = _a[_i]; | ||
var assetId = typeof assetConf === "string" ? assetConf : assetConf.id; | ||
if (id === assetId) { | ||
return assetConf; | ||
} | ||
} | ||
throw ExceptionFactory_1.ExceptionFactory.createAssertionError("AssetHolder#_peekAssetConfFromAssetId: could not peek the asset: ".concat(id)); | ||
}; | ||
return AssetHolder; | ||
@@ -89,0 +123,0 @@ }()); |
import type { AssertionError, AssetLoadError, TypeMismatchError } from "@akashic/pdi-types"; | ||
import type { RequestAssetDetail, RequestAssetLoadError } from "./errors"; | ||
/** | ||
@@ -11,2 +12,3 @@ * 例外生成ファクトリ。 | ||
cause?: any): AssetLoadError; | ||
function createRequestAssetLoadError(message: string, detail: RequestAssetDetail, cause?: any): RequestAssetLoadError; | ||
} |
@@ -55,3 +55,11 @@ "use strict"; | ||
ExceptionFactory.createAssetLoadError = createAssetLoadError; | ||
function createRequestAssetLoadError(message, detail, cause) { | ||
var e = new Error(message); | ||
e.name = "RequestAssetLoadError"; | ||
e.detail = detail; | ||
e.cause = cause; | ||
return e; | ||
} | ||
ExceptionFactory.createRequestAssetLoadError = createRequestAssetLoadError; | ||
})(ExceptionFactory || (exports.ExceptionFactory = ExceptionFactory = {})); | ||
//# sourceMappingURL=ExceptionFactory.js.map |
@@ -10,2 +10,3 @@ import type { Asset, CommonOffset } from "@akashic/pdi-types"; | ||
import type { E, PointDownEvent, PointMoveEvent, PointSource, PointUpEvent } from "./entities/E"; | ||
import type { RequestAssetLoadError } from "./errors"; | ||
import type { MessageEvent, OperationEvent } from "./Event"; | ||
@@ -18,4 +19,15 @@ import type { Game } from "./Game"; | ||
import { TimerManager } from "./TimerManager"; | ||
export type SceneRequestAssetHandler = () => void; | ||
export type SceneRequestAssetHandler = (error?: RequestAssetLoadError) => void; | ||
/** | ||
* `Scene#requestAsset` の引数に渡すことができるパラメータ。 | ||
*/ | ||
export interface SceneRequestAssetsParameterObject { | ||
assetIds: (string | DynamicAssetConfiguration | AssetGenerationConfiguration)[]; | ||
/** | ||
* アセットの読込みに失敗した際にコールバックを実行するかどうか。 | ||
* @default false | ||
*/ | ||
notifyErrorOnCallback?: boolean; | ||
} | ||
/** | ||
* `Scene` のコンストラクタに渡すことができるパラメータ。 | ||
@@ -541,3 +553,3 @@ * 説明のない各メンバの詳細は `Scene` の同名メンバの説明を参照すること。 | ||
prefetch(): void; | ||
requestAssets(assetIds: (string | DynamicAssetConfiguration | AssetGenerationConfiguration)[], handler: SceneRequestAssetHandler): void; | ||
requestAssets(assetIdsOrConf: (string | DynamicAssetConfiguration | AssetGenerationConfiguration)[] | SceneRequestAssetsParameterObject, handler: SceneRequestAssetHandler): void; | ||
/** | ||
@@ -544,0 +556,0 @@ * @private |
@@ -348,3 +348,3 @@ "use strict"; | ||
}; | ||
Scene.prototype.requestAssets = function (assetIds, handler) { | ||
Scene.prototype.requestAssets = function (assetIdsOrConf, handler) { | ||
var _this = this; | ||
@@ -356,5 +356,16 @@ if (this._loadingState !== "ready-fired" && this._loadingState !== "loaded-fired") { | ||
} | ||
var assetIds; | ||
var alwaysNotifyFinish; | ||
if (Array.isArray(assetIdsOrConf)) { | ||
assetIds = assetIdsOrConf; | ||
alwaysNotifyFinish = false; | ||
} | ||
else { | ||
assetIds = assetIdsOrConf.assetIds; | ||
alwaysNotifyFinish = !!assetIdsOrConf.notifyErrorOnCallback; | ||
} | ||
var holder = new AssetHolder_1.AssetHolder({ | ||
assetManager: this.game._assetManager, | ||
assetIds: assetIds, | ||
alwaysNotifyFinish: alwaysNotifyFinish, | ||
handlerSet: { | ||
@@ -368,4 +379,13 @@ owner: this, | ||
// 不要なクロージャは避けたいが生存チェックのため不可避 | ||
if (!_this.destroyed()) | ||
handler(); | ||
if (!_this.destroyed()) { | ||
var failureAssetIds = holder._getFailureAssetIds(); | ||
if (failureAssetIds.length) { | ||
// このパスに入るのは AssetHolder の alwaysNotifyFinish フラグを真にした時のみであることに注意 | ||
var error = ExceptionFactory_1.ExceptionFactory.createRequestAssetLoadError("Scene#requestAssets(): failed to load the asset. refer to the 'detail' property for more information.", { failureAssetIds: failureAssetIds }); | ||
handler(error); | ||
} | ||
else { | ||
handler(); | ||
} | ||
} | ||
} | ||
@@ -372,0 +392,0 @@ }); |
{ | ||
"name": "@akashic/akashic-engine", | ||
"version": "3.16.4", | ||
"version": "3.16.5", | ||
"description": "The core library of Akashic Engine", | ||
@@ -31,3 +31,3 @@ "main": "index.js", | ||
"textlint-rule-max-ten": "^5.0.0", | ||
"textlint-rule-no-mix-dearu-desumasu": "^5.0.0", | ||
"textlint-rule-no-mix-dearu-desumasu": "^6.0.0", | ||
"textlint-rule-prh": "^5.3.0", | ||
@@ -34,0 +34,0 @@ "ts-jest": "^29.0.0", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1578278
262
27266