/*
This file contains proprietary software owned by Motorola Mobility, Inc.
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
*/
var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser;
var Material = require("js/lib/rdge/materials/material").Material;
var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive;
var LinearGradientMaterial = function LinearGradientMaterial() {
///////////////////////////////////////////////////////////////////////
// Instance variables
///////////////////////////////////////////////////////////////////////
this._name = "LinearGradientMaterial";
this._shaderName = "linearGradient";
this._color1 = [1, 0, 0, 1];
this._color2 = [0, 1, 0, 1];
this._color3 = [0, 0, 1, 1];
this._color4 = [0, 1, 1, 1];
this._colorStop1 = 0.0;
this._colorStop2 = 0.3;
this._colorStop3 = 0.6;
this._colorStop4 = 1.0;
// this._colorCount = 4;
this._angle = 0.0; // the shader takes [cos(a), sin(a)]
this._textureTransform = [1,0,0, 0,1,0, 0,0,1];
///////////////////////////////////////////////////////////////////////
// Property Accessors
///////////////////////////////////////////////////////////////////////
this.getShaderName = function () {
return this._shaderName;
};
this.getName = function () {
return this._name;
};
this.getColor1 = function () {
return this._color1;
};
this.setColor1 = function (c) {
this._color1 = c.slice();
if (this._shader && this._shader['default']) {
this._shader['default'].u_color1.set(c);
}
};
this.getColor2 = function () {
return this._color2;
};
this.setColor2 = function (c) {
this._color2 = c.slice();
if (this._shader && this._shader['default']) {
this._shader['default'].u_color2.set(c);
}
};
this.getColor3 = function () {
return this._color3;
};
this.setColor3 = function (c) {
this._color3 = c.slice();
if (this._shader && this._shader['default']) {
this._shader['default'].u_color3.set(c);
}
};
this.getColor4 = function () {
return this._color4;
};
this.setColor4 = function (c) {
this._color4 = c.slice();
if (this._shader && this._shader['default']) {
this._shader['default'].u_color4.set(c);
}
};
this.getColorStop1 = function () {
return this._colorStop1;
};
this.setColorStop1 = function (s) {
this._colorStop1 = s;
if (this._shader && this._shader['default']) {
this._shader['default'].u_colorStop1.set([s]);
}
};
this.getColorStop2 = function () {
return this._colorStop2;
};
this.setColorStop2 = function (s) {
this._colorStop2 = s;
if (this._shader && this._shader['default']) {
this._shader['default'].u_colorStop2.set([s]);
}
};
this.getColorStop3 = function () {
return this._colorStop3;
};
this.setColorStop3 = function (s) {
this._colorStop3 = s;
if (this._shader && this._shader['default']) {
this._shader['default'].u_colorStop3.set([s]);
}
};
this.getColorStop4 = function () {
return this._colorStop4;
};
this.setColorStop4 = function (s) {
this._colorStop4 = s;
if (this._shader && this._shader['default']) {
this._shader['default'].u_colorStop4.set([s]);
}
};
this.getAngle = function () {
return this._angle;
};
this.setAngle = function (a) {
this._angle = a;
if (this._shader && this._shader['default']) {
this._shader['default'].u_cos_sin_angle.set([Math.cos(a), Math.sin(a)]);
}
};
this.isAnimated = function () {
return false;
};
///////////////////////////////////////////////////////////////////////
// Material Property Accessors
///////////////////////////////////////////////////////////////////////
this._propNames = ["color1", "color2", "color3", "color4", "colorStop1", "colorStop2", "colorStop3", "colorStop4", "angle"];
this._propLabels = ["Color 1", "Color 2", "Color 3", "Color 4", "Color Stop 1", "Color Stop 2", "Color Stop 3", "Color Stop 4", "Angle"];
this._propTypes = ["color", "color", "color", "color", "float", "float", "float", "float", "float"];
this._propValues = [];
this._propValues[this._propNames[0]] = this._color1.slice(0);
this._propValues[this._propNames[1]] = this._color2.slice(0);
this._propValues[this._propNames[2]] = this._color3.slice(0);
this._propValues[this._propNames[3]] = this._color4.slice(0);
this._propValues[this._propNames[4]] = this._colorStop1;
this._propValues[this._propNames[5]] = this._colorStop2;
this._propValues[this._propNames[6]] = this._colorStop3;
this._propValues[this._propNames[7]] = this._colorStop4;
this._propValues[this._propNames[8]] = this._angle;
this.setProperty = function (prop, value) {
if (prop === "color") prop = "color1";
// make sure we have legitimate imput
var ok = this.validateProperty(prop, value);
if (!ok) {
console.log("invalid property in Linear Gradient Material" + prop + " : " + value);
}
switch (prop) {
case "color1": this.setColor1(value); break;
case "color2": this.setColor2(value); break;
case "color3": this.setColor3(value); break;
case "color4": this.setColor4(value); break;
case "colorStop1": this.setColorStop1(value); break;
case "colorStop2": this.setColorStop2(value); break;
case "colorStop3": this.setColorStop3(value); break;
case "colorStop4": this.setColorStop4(value); break;
case "angle": this.setAngle(value); break;
}
};
///////////////////////////////////////////////////////////////////////
// Methods
///////////////////////////////////////////////////////////////////////
// duplcate method requirde
this.dup = function () {
// allocate a new material
var newMat = new LinearGradientMaterial();
// copy over the current values;
var propNames = [], propValues = [], propTypes = [], propLabels = [];
this.getAllProperties( propNames, propValues, propTypes, propLabels);
var n = propNames.length;
for (var i=0; i