UNPKG

@awayjs/stage

Version:
115 lines (114 loc) 5.26 kB
import { __extends } from "tslib"; import { URLLoaderDataFormat, URLRequest, ParserBase, Rectangle } from '@awayjs/core'; import { BitmapImageCube } from '../image/BitmapImageCube'; /** * ImageCubeParser provides a "parser" for natively supported image types (jpg, png). While it simply loads bytes into * a loader object, it wraps it in a BitmapImage2DResource so resource management can happen consistently without * exception cases. */ var ImageCubeParser = /** @class */ (function (_super) { __extends(ImageCubeParser, _super); /** * Creates a new ImageCubeParser object. * @param uri The url or id of the data or file to be parsed. * @param extra The holder for extra contextual data that the parser might need. */ function ImageCubeParser() { return _super.call(this, URLLoaderDataFormat.TEXT) || this; } /** * Indicates whether or not a given file extension is supported by the parser. * @param extension The file extension of a potential file to be parsed. * @return Whether or not the given file type is supported. */ ImageCubeParser.supportsType = function (extension) { extension = extension.toLowerCase(); return extension == 'cube'; }; /** * Tests whether a data block can be parsed by the parser. * @param data The data block to potentially be parsed. * @return Whether or not the given data is supported. */ ImageCubeParser.supportsData = function (data) { try { var obj = JSON.parse(data); if (obj) return true; return false; } catch (e) { return false; } }; /** * @inheritDoc */ ImageCubeParser.prototype.resolveDependency = function (resourceDependency) { }; /** * @inheritDoc */ ImageCubeParser.prototype.resolveDependencyFailure = function (resourceDependency) { }; /** * @inheritDoc */ ImageCubeParser.prototype.proceedParsing = function () { if (this._imgDependencyDictionary != null) { //all images loaded var asset = new BitmapImageCube(this._getBitmapImage2D(ImageCubeParser.posX).width); var rect = new Rectangle(0, 0, asset.size, asset.size); asset.setPixels(BitmapImageCube.posX, rect, this._getBitmapImage2D(ImageCubeParser.posX).data); asset.setPixels(BitmapImageCube.negX, rect, this._getBitmapImage2D(ImageCubeParser.negX).data); asset.setPixels(BitmapImageCube.posY, rect, this._getBitmapImage2D(ImageCubeParser.posY).data); asset.setPixels(BitmapImageCube.negY, rect, this._getBitmapImage2D(ImageCubeParser.negY).data); asset.setPixels(BitmapImageCube.posZ, rect, this._getBitmapImage2D(ImageCubeParser.posZ).data); asset.setPixels(BitmapImageCube.negZ, rect, this._getBitmapImage2D(ImageCubeParser.negZ).data); //clear dictionary this._imgDependencyDictionary = null; asset.name = this.fileName; this.finalizeAsset(asset, this.fileName); return this.finishParsing(); } try { var json = JSON.parse(this.data); if (!json || !json.data || json.data.length != 6) return this.dieWithError('ImageCubeParser: Error - cube texture should have exactly 6 images'); var rec = void 0; var data = json.data; this._imgDependencyDictionary = new Object(); for (var c = 0; c < data.length; c++) { rec = data[c]; this._imgDependencyDictionary[rec.id] = this.addDependency(rec.id, new URLRequest(rec.image.toString())); } if (!this._validateCubeData()) return this.dieWithError('ImageCubeParser: JSON data error - cubes require id of: \n' + ImageCubeParser.posX + ', ' + ImageCubeParser.negX + ', \n' + ImageCubeParser.posY + ', ' + ImageCubeParser.negY + ', \n' + ImageCubeParser.posZ + ', ' + ImageCubeParser.negZ); this.pauseAndRetrieveDependencies(); } catch (e) { this.dieWithError('CubeTexturePaser Error parsing JSON'); } }; ImageCubeParser.prototype._validateCubeData = function () { return (this._imgDependencyDictionary[ImageCubeParser.posX] != null && this._imgDependencyDictionary[ImageCubeParser.negX] != null && this._imgDependencyDictionary[ImageCubeParser.posY] != null && this._imgDependencyDictionary[ImageCubeParser.negY] != null && this._imgDependencyDictionary[ImageCubeParser.posZ] != null && this._imgDependencyDictionary[ImageCubeParser.negZ] != null); }; ImageCubeParser.prototype._getBitmapImage2D = function (name) { var dependency = this._imgDependencyDictionary[name]; if (dependency) return dependency.assets[0]; return null; }; ImageCubeParser.posX = 'posX'; ImageCubeParser.negX = 'negX'; ImageCubeParser.posY = 'posY'; ImageCubeParser.negY = 'negY'; ImageCubeParser.posZ = 'posZ'; ImageCubeParser.negZ = 'negZ'; return ImageCubeParser; }(ParserBase)); export { ImageCubeParser };