eaglercraft-1.8/sources/wasm-gc-teavm/js/platformAssets.js

107 lines
3.4 KiB
JavaScript

/*
* Copyright (c) 2024 lax1dude. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
const platfAssetsName = "platformAssets";
/**
* @param {number} idx
* @return {Object}
*/
eagruntimeImpl.platformAssets["getEPKFileData"] = function(idx) {
const tmp = epkFileList[idx];
epkFileList[idx] = null;
return tmp;
};
/**
* @return {number}
*/
eagruntimeImpl.platformAssets["getEPKFileCount"] = function() {
return epkFileList.length;
};
if(typeof window !== "undefined") {
/**
* @param {Uint8Array} bufferData
* @param {string} mime
* @return {Promise}
*/
function loadImageFile0Impl(bufferData, mime) {
return new Promise(function(resolve) {
const loadURL = URL.createObjectURL(new Blob([bufferData], {type: mime}));
if(loadURL) {
const toLoad = document.createElement("img");
toLoad.addEventListener("load", function(evt) {
URL.revokeObjectURL(loadURL);
resolve({
"width": toLoad.width,
"height": toLoad.height,
"img": toLoad
});
});
toLoad.addEventListener("error", function(evt) {
URL.revokeObjectURL(loadURL);
resolve(null);
});
toLoad.src = loadURL;
}else {
resolve(null);
}
});
}
eagruntimeImpl.platformAssets["loadImageFile0"] = new WebAssembly.Suspending(loadImageFile0Impl);
/** @type {HTMLCanvasElement} */
var imageLoadingCanvas = null;
/** @type {CanvasRenderingContext2D} */
var imageLoadingContext = null;
/**
* @param {Object} imageLoadResult
* @param {Uint8ClampedArray} dataDest
*/
eagruntimeImpl.platformAssets["loadImageFile1"] = function(imageLoadResult, dataDest) {
const width = imageLoadResult["width"];
const height = imageLoadResult["height"];
const img = imageLoadResult["img"];
if(img) {
if(!imageLoadingCanvas) {
imageLoadingCanvas = /** @type {HTMLCanvasElement} */ (document.createElement("canvas"));
}
if(imageLoadingCanvas.width < width) {
imageLoadingCanvas.width = width;
}
if(imageLoadingCanvas.height < height) {
imageLoadingCanvas.height = height;
}
if(!imageLoadingContext) {
imageLoadingContext = /** @type {CanvasRenderingContext2D} */ (imageLoadingCanvas.getContext("2d", { willReadFrequently: true }));
imageLoadingContext.imageSmoothingEnabled = false;
}
imageLoadingContext.clearRect(0, 0, width, height);
imageLoadingContext.drawImage(img, 0, 0, width, height);
dataDest.set(imageLoadingContext.getImageData(0, 0, width, height).data, 0);
}
};
}else {
setUnsupportedFunc(eagruntimeImpl.platformAssets, platfAssetsName, "loadImageFile0");
setUnsupportedFunc(eagruntimeImpl.platformAssets, platfAssetsName, "loadImageFile1");
}