@awayjs/stage
Version:
Stage for AwayJS
115 lines (114 loc) • 5.26 kB
JavaScript
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 };