diff options
Diffstat (limited to 'js/lib/rdge/materials/twist-vert-material.js')
-rw-r--r-- | js/lib/rdge/materials/twist-vert-material.js | 130 |
1 files changed, 102 insertions, 28 deletions
diff --git a/js/lib/rdge/materials/twist-vert-material.js b/js/lib/rdge/materials/twist-vert-material.js index 54e5168f..7d9dd6d6 100644 --- a/js/lib/rdge/materials/twist-vert-material.js +++ b/js/lib/rdge/materials/twist-vert-material.js | |||
@@ -4,14 +4,17 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | 4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. |
5 | </copyright> */ | 5 | </copyright> */ |
6 | 6 | ||
7 | var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; | 7 | var Material = require("js/lib/rdge/materials/material").Material; |
8 | var Texture = require("js/lib/rdge/texture").Texture; | ||
9 | |||
8 | /////////////////////////////////////////////////////////////////////// | 10 | /////////////////////////////////////////////////////////////////////// |
9 | // Class GLMaterial | 11 | // Class GLMaterial |
10 | // RDGE representation of a material. | 12 | // RDGE representation of a material. |
11 | /////////////////////////////////////////////////////////////////////// | 13 | /////////////////////////////////////////////////////////////////////// |
12 | function TwistVertMaterial() { | 14 | var TwistVertMaterial = function TwistVertMaterial() |
15 | { | ||
13 | // initialize the inherited members | 16 | // initialize the inherited members |
14 | this.inheritedFrom = GLMaterial; | 17 | this.inheritedFrom = Material; |
15 | this.inheritedFrom(); | 18 | this.inheritedFrom(); |
16 | 19 | ||
17 | /////////////////////////////////////////////////////////////////////// | 20 | /////////////////////////////////////////////////////////////////////// |
@@ -25,6 +28,9 @@ function TwistVertMaterial() { | |||
25 | this._tex0 = 'assets/images/rocky-normal.jpg'; | 28 | this._tex0 = 'assets/images/rocky-normal.jpg'; |
26 | this._tex1 = 'assets/images/metal.png'; | 29 | this._tex1 = 'assets/images/metal.png'; |
27 | 30 | ||
31 | this._glTex0; | ||
32 | this._glTex1; | ||
33 | |||
28 | this._angle = 0.0; | 34 | this._angle = 0.0; |
29 | this._deltaTime = 0.01; | 35 | this._deltaTime = 0.01; |
30 | 36 | ||
@@ -35,6 +41,7 @@ function TwistVertMaterial() { | |||
35 | this.getShaderName = function () { return this._shaderName; }; | 41 | this.getShaderName = function () { return this._shaderName; }; |
36 | 42 | ||
37 | this.isAnimated = function () { return true; }; | 43 | this.isAnimated = function () { return true; }; |
44 | |||
38 | this.hasVertexDeformation = function () { return this._hasVertexDeformation; }; | 45 | this.hasVertexDeformation = function () { return this._hasVertexDeformation; }; |
39 | this._hasVertexDeformation = true; | 46 | this._hasVertexDeformation = true; |
40 | this._vertexDeformationTolerance = 0.02; // should be a property | 47 | this._vertexDeformationTolerance = 0.02; // should be a property |
@@ -43,9 +50,24 @@ function TwistVertMaterial() { | |||
43 | // Methods | 50 | // Methods |
44 | /////////////////////////////////////////////////////////////////////// | 51 | /////////////////////////////////////////////////////////////////////// |
45 | // duplcate method requirde | 52 | // duplcate method requirde |
46 | this.dup = function () { return new TwistVertMaterial(); }; | 53 | this.dup = function() { |
54 | // get the current values; | ||
55 | var propNames = [], propValues = [], propTypes = [], propLabels = []; | ||
56 | this.getAllProperties(propNames, propValues, propTypes, propLabels); | ||
57 | |||
58 | // allocate a new material | ||
59 | var newMat = new TwistVertMaterial(); | ||
47 | 60 | ||
48 | this.init = function (world) { | 61 | // copy over the current values; |
62 | var n = propNames.length; | ||
63 | for (var i = 0; i < n; i++) | ||
64 | newMat.setProperty(propNames[i], propValues[i]); | ||
65 | |||
66 | return newMat; | ||
67 | }; | ||
68 | |||
69 | this.init = function (world) | ||
70 | { | ||
49 | this.setWorld(world); | 71 | this.setWorld(world); |
50 | 72 | ||
51 | // set up the shader | 73 | // set up the shader |
@@ -60,6 +82,9 @@ function TwistVertMaterial() { | |||
60 | this._materialNode = RDGE.createMaterialNode("twistVertMaterial" + "_" + world.generateUniqueNodeID()); | 82 | this._materialNode = RDGE.createMaterialNode("twistVertMaterial" + "_" + world.generateUniqueNodeID()); |
61 | this._materialNode.setShader(this._shader); | 83 | this._materialNode.setShader(this._shader); |
62 | 84 | ||
85 | // set up the texture maps | ||
86 | this.updateTextures(); | ||
87 | |||
63 | // initialize the twist vert properties | 88 | // initialize the twist vert properties |
64 | this.updateShaderValues(); | 89 | this.updateShaderValues(); |
65 | }; | 90 | }; |
@@ -82,9 +107,11 @@ function TwistVertMaterial() { | |||
82 | this._propValues[this._propNames[5]] = this._tex0.slice(); | 107 | this._propValues[this._propNames[5]] = this._tex0.slice(); |
83 | this._propValues[this._propNames[6]] = this._tex1.slice(); | 108 | this._propValues[this._propNames[6]] = this._tex1.slice(); |
84 | 109 | ||
85 | this.setProperty = function (prop, value) { | 110 | this.setProperty = function (prop, value) |
111 | { | ||
86 | // make sure we have legitimate input | 112 | // make sure we have legitimate input |
87 | if (this.validateProperty(prop, value)) { | 113 | if (this.validateProperty(prop, value)) |
114 | { | ||
88 | switch (prop) { | 115 | switch (prop) { |
89 | case "color": | 116 | case "color": |
90 | case "u_tex1": | 117 | case "u_tex1": |
@@ -103,7 +130,7 @@ function TwistVertMaterial() { | |||
103 | 'material': this.getShaderName(), | 130 | 'material': this.getShaderName(), |
104 | 'name': this.getName(), | 131 | 'name': this.getName(), |
105 | 'color': this._propValues["color"] | 132 | 'color': this._propValues["color"] |
106 | }; | 133 | } |
107 | 134 | ||
108 | return jObj; | 135 | return jObj; |
109 | }; | 136 | }; |
@@ -121,56 +148,100 @@ function TwistVertMaterial() { | |||
121 | } | 148 | } |
122 | }; | 149 | }; |
123 | 150 | ||
124 | this.update = function (time) { | 151 | this.update = function (time) |
125 | if (this._shader && this._shader.twistMe) { | 152 | { |
126 | var angle = this._angle; | 153 | if (this._shader && this._shader.twistMe) |
154 | { | ||
155 | var technique = this._shader.twistMe; | ||
156 | |||
157 | var angle = this._angle; | ||
127 | angle += this._deltaTime; | 158 | angle += this._deltaTime; |
128 | if (angle > this._propValues["u_twistAmount"]) { | 159 | if (angle > this._propValues["u_twistAmount"]) |
160 | { | ||
129 | angle = this._propValues["u_twistAmount"]; | 161 | angle = this._propValues["u_twistAmount"]; |
130 | this._deltaTime = -this._deltaTime; | 162 | this._deltaTime = -this._deltaTime; |
131 | } | 163 | } |
132 | else if (angle < 0.0) { | 164 | else if (angle < 0.0) |
165 | { | ||
133 | angle = 0; | 166 | angle = 0; |
134 | this._deltaTime = -this._deltaTime; | 167 | this._deltaTime = -this._deltaTime; |
135 | } | 168 | } |
136 | this._angle = angle; | 169 | this._angle = angle; |
137 | this._shader.twistMe["u_twistAmount"].set([angle]); | 170 | this._shader.twistMe["u_twistAmount"].set([angle]); |
171 | |||
172 | var tex; | ||
173 | if (this._glTex0) | ||
174 | { | ||
175 | if (this._glTex0.isAnimated()) | ||
176 | this._glTex0.render(); | ||
177 | tex = this._glTex0.getTexture(); | ||
178 | if (tex) | ||
179 | technique.u_tex0.set( tex ); | ||
180 | } | ||
181 | if (this._glTex1) | ||
182 | { | ||
183 | if (this._glTex1.isAnimated()) | ||
184 | this._glTex1.render(); | ||
185 | tex = this._glTex1.getTexture(); | ||
186 | if (tex) | ||
187 | technique.u_tex1.set( tex ); | ||
188 | } | ||
189 | |||
138 | } | 190 | } |
139 | }; | 191 | }; |
140 | 192 | ||
141 | this.updateShaderValues = function () { | 193 | this.updateShaderValues = function () |
142 | if (this._shader && this._shader.twistMe) { | 194 | { |
195 | if (this._shader && this._shader.twistMe) | ||
196 | { | ||
143 | var nProps = this._propNames.length; | 197 | var nProps = this._propNames.length; |
144 | for (var i = 0; i < nProps; i++) { | 198 | for (var i = 0; i < nProps; i++) |
199 | { | ||
145 | var propName = this._propNames[i]; | 200 | var propName = this._propNames[i]; |
146 | var propValue = this._propValues[propName]; | 201 | var propValue = this._propValues[propName]; |
147 | switch (propName) { | 202 | switch (propName) |
203 | { | ||
148 | case "u_tex0": | 204 | case "u_tex0": |
149 | case "u_tex1": | 205 | case "u_tex1": |
150 | case "color": this._shader.twistMe[propName].set(propValue); break; | 206 | break; |
151 | default: this._shader.twistMe[propName].set([propValue]); break; | 207 | |
208 | case "color": | ||
209 | this._shader.twistMe[propName].set(propValue); | ||
210 | break; | ||
211 | |||
212 | default: | ||
213 | this._shader.twistMe[propName].set([propValue]); | ||
214 | break; | ||
152 | } | 215 | } |
153 | } | 216 | } |
154 | } | 217 | } |
155 | }; | 218 | }; |
156 | 219 | ||
157 | this.updateTextures = function () { | 220 | this.updateTextures = function () |
221 | { | ||
158 | var material = this._materialNode; | 222 | var material = this._materialNode; |
159 | if (material) { | 223 | if (material) |
160 | var technique = material.shaderProgram['default']; | 224 | { |
225 | var technique = material.shaderProgram['twistMe']; | ||
161 |