Files
engine/packages/loader/src/BufferLoader.ts
SwayYan 9b39b66986 Refactor request in ResourceManager and Loader (#2429)
* feat: refactor request in `ResourceManager` and `Loader`
2024-11-11 17:32:30 +08:00

24 lines
781 B
TypeScript

import { resourceLoader, Loader, AssetPromise, AssetType, LoadItem, ResourceManager } from "@galacean/engine-core";
function isBase64(url) {
return /^data:(.+?);base64,/.test(url);
}
@resourceLoader(AssetType.Buffer, ["bin", "r3bin"], false)
class BufferLoader extends Loader<ArrayBuffer> {
load(item: LoadItem, resourceManager: ResourceManager): AssetPromise<ArrayBuffer> {
const url = item.url;
if (isBase64(url)) {
return new AssetPromise((resolve) => {
const base64Str = url.slice(13 + RegExp.$1.length);
const result = Uint8Array.from(atob(base64Str), (c) => c.charCodeAt(0));
resolve(result.buffer);
});
}
// @ts-ignore
return resourceManager._request(url, {
...item,
type: "arraybuffer"
});
}
}