/* <copyright> This file contains proprietary software owned by Motorola Mobility, Inc.<br/> No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. </copyright> */ /////////////////////////////////////////////////////////////////////// // Class MaterialsLibrary // Contains an array of GLMaterials. /////////////////////////////////////////////////////////////////////// var MaterialsLibrary = Object.create(Object.prototype, { _materials : { value: [], writable: true, enumerable: true, configurable: true }, materials : { get: function() { return this._materials; } }, addMaterial: { value: function (material) { this._materials.push(material); } }, addMaterialAt: { value: function (material, index) { this._materials.splice(index, 0, material); } }, removeMaterialAt: { value: function (index) { return this._materials.splice(index, 1); } }, removeMaterial: { value: function (materialName) { var index = this.getIndexOfMaterial(materialName); if(index !== -1) { return this.removeMaterialAt(index); } } }, getMaterialAt: { value: function (index) { return this._materials[index]; } }, getMaterial: { value: function (materialName) { var index = this.getIndexOfMaterial(materialName); if(index !== -1) { return this._materials[index]; } } }, getIndexOfMaterial: { value: function (materialName) { var len = this._materials.length; for(var i=0; i<len; i++) { var material = this._materials[i]; if(material.getName() === materialName) { return i; } } return -1; } }, clearAllMaterials: { value: function() { this._materials = []; } }, export: { value: function() { var exportStr = "MaterialLibrary: \n" var nMats = this._materials.length; for (var i=0; i<nMats; i++) { var material = this._materials[i]; exportStr += material.export(); } exportStr += "endMatLib\n"; return exportStr; } }, import: { value: function( importStr ) { // we replace allmaterials, so remove anything // that is currently there. this.clearAllMaterials(); var pu = new ParseUtils( importStr ); var type = pu.nextValue( "material: ", "\n", false ); while (type) { var mat = null; switch (type) { case "flat": mat = new FlatMaterial(); break; case "linearGradient": mat = new LinearGradientMaterial(); break; case "radialGradient": mat = new RadialGradientMaterial(); break; case "bumpMetal": mat = new BumpMetalMaterial(); break; case "uber": mat = new UberMaterial(); break; default: throw new Error( "Unrecognized material type: " + type ); pu.advancePastToken( "endMaterial\n" ); break; } if (mat) { importStr = mat.import( importStr ); pu.setBuffer( importStr ); this.addMaterial( mat ); } type = pu.nextValue( "material: ", "\n", false ); } return pu.getBuffer(); } } }); // create the library of stroke and fill materials var flatMaterial = new FlatMaterial(); var linearGradientMaterial = new LinearGradientMaterial(); var radialGradientMaterial = new RadialGradientMaterial(); var bumpMetalMaterial = new BumpMetalMaterial(); var uberMaterial = new UberMaterial(); MaterialsLibrary.addMaterial(flatMaterial); MaterialsLibrary.addMaterial(linearGradientMaterial); MaterialsLibrary.addMaterial(radialGradientMaterial); MaterialsLibrary.addMaterial(bumpMetalMaterial); MaterialsLibrary.addMaterial(uberMaterial);