const THREE = require('three'); const resolveURL = require('../utilities').resolveURL; /** * Provides a base class object which stores textures and rendering object. * * @class * @author Alan Wu * @return {TexturePrimitive} */ const TexturePrimitive = function (textureIn) { (require('./zincObject').ZincObject).call(this); this.isTexturePrimitive = true; this.texture = textureIn; /** * Load texture data into this primitves. * * @param {Object} textureData - contains the informations about the textures. * @param {Function} finishCallback - User's function to be called once texture's * is loaded. */ this.load = (textureData, finishCallback, isInline) => { if (textureData) { if (textureData.images && textureData.images.source) { const texture = new (require('../texture/textureArray').TextureArray)(); const imgArray = []; textureData.images.source.forEach(img => { imgArray.push(resolveURL(img)); }); const _this = this; texture.loadFromImages(imgArray).then(() => { _this.texture = texture; _this.initialise(textureData, finishCallback); }); } } } /** * Initialise a texture based on the provided textureData, this should be used * internally only. * * @param {Object} textureData - contains the informations about the textures. * @param {Function} finishCallback - User's function to be called once texture's * is loaded. */ this.initialise = (textureData, finishCallback) => { if (finishCallback != undefined && (typeof finishCallback == 'function')) { finishCallback(this); } } } TexturePrimitive.prototype = Object.create((require('./zincObject').ZincObject).prototype); TexturePrimitive.prototype.constructor = TexturePrimitive; exports.TexturePrimitive = TexturePrimitive;