aboutsummaryrefslogtreecommitdiff
path: root/js/models
diff options
context:
space:
mode:
Diffstat (limited to 'js/models')
-rwxr-xr-xjs/models/color-model.js56
-rwxr-xr-xjs/models/materials-model.js91
-rwxr-xr-xjs/models/properties-3d.js48
-rwxr-xr-xjs/models/shape-model.js10
4 files changed, 136 insertions, 69 deletions
diff --git a/js/models/color-model.js b/js/models/color-model.js
index 4189fbef..764feeb5 100755
--- a/js/models/color-model.js
+++ b/js/models/color-model.js
@@ -589,18 +589,54 @@ exports.ColorModel = Montage.create(Component, {
589 } 589 }
590 }, 590 },
591 //////////////////////////////////////////////////////////////////// 591 ////////////////////////////////////////////////////////////////////
592 //Returns CSS string given a WebGL color array in [r, g, b, a] format where the values are [0,1] 592 //Returns a color object given a WebGL color array/object with gradient stops
593 webGlToCss: { 593 webGlToColor: {
594 enumerable: true, 594 enumerable: true,
595 value: function (color) { 595 value: function (c) {
596 if(color && (color.length === 4)) 596 if(c) {
597 { 597 if(c.gradientMode) {
598 return 'rgba(' + color[0]*255 + ', ' + color[1]*255 + ', ' + color[2]*255 + ', ' + color[3] +')'; 598 // Gradient
599 } 599 var i = 0,
600 else 600 len,
601 { 601 css,
602 return null; 602 stops = c.color,
603 gradient;
604
605 // Create the CSS string
606 if (c.gradientMode === 'radial') {
607 css = '-webkit-radial-gradient(center, ellipse cover';
608 } else {
609 css = '-webkit-gradient(linear, left top, right top';
610 }
611
612 //Sorting array (must be sorted for radial gradients, at least in Chrome
613 stops.sort(function(a,b){return a.position - b.position});
614 //Looping through stops in gradient to create CSS
615
616 len = stops.length;
617 for (i=0; i < len; i++) {
618 //Adding to CSS String
619 if (c.gradientMode === 'radial' && stops[i].value) {
620 css += ', '+stops[i].value.css+' '+stops[i].position+'% ';
621 } else if (stops[i].value){
622 css += ', color-stop('+stops[i].position+'%,'+stops[i].value.css+')';
623 }
624 }
625 //Closing the CSS strings
626 css += ')';
627
628 gradient = {stops: c.color, mode: c.gradientMode, gradientMode: c.gradientMode, css: css};
629 return {mode: 'gradient', value: gradient, color: gradient};
630 } else if(c.length === 4) {
631 // CSS
632 return this.application.ninja.colorController.getColorObjFromCss('rgba(' + c[0]*255 + ', '
633 + c[1]*255 + ', '
634 + c[2]*255 + ', '
635 + c[3] +')');
636 }
603 } 637 }
638
639 return null;
604 } 640 }
605 } 641 }
606 //////////////////////////////////////////////////////////////////// 642 ////////////////////////////////////////////////////////////////////
diff --git a/js/models/materials-model.js b/js/models/materials-model.js
index d8fb4016..44364aa2 100755
--- a/js/models/materials-model.js
+++ b/js/models/materials-model.js
@@ -17,6 +17,7 @@ var RadialGradientMaterial = require("js/lib/rdge/materials/radial-gradient-mate
17var BumpMetalMaterial = require("js/lib/rdge/materials/bump-metal-material").BumpMetalMaterial; 17var BumpMetalMaterial = require("js/lib/rdge/materials/bump-metal-material").BumpMetalMaterial;
18var UberMaterial = require("js/lib/rdge/materials/uber-material").UberMaterial; 18var UberMaterial = require("js/lib/rdge/materials/uber-material").UberMaterial;
19var RadialBlurMaterial = require("js/lib/rdge/materials/radial-blur-material").RadialBlurMaterial; 19var RadialBlurMaterial = require("js/lib/rdge/materials/radial-blur-material").RadialBlurMaterial;
20var RaidersMaterial = require("js/lib/rdge/materials/radial-blur-material").RaidersMaterial;
20var PlasmaMaterial = require("js/lib/rdge/materials/plasma-material").PlasmaMaterial; 21var PlasmaMaterial = require("js/lib/rdge/materials/plasma-material").PlasmaMaterial;
21var PulseMaterial = require("js/lib/rdge/materials/pulse-material").PulseMaterial; 22var PulseMaterial = require("js/lib/rdge/materials/pulse-material").PulseMaterial;
22var TunnelMaterial = require("js/lib/rdge/materials/tunnel-material").TunnelMaterial; 23var TunnelMaterial = require("js/lib/rdge/materials/tunnel-material").TunnelMaterial;
@@ -24,6 +25,7 @@ var ReliefTunnelMaterial = require("js/lib/rdge/materials/relief-tunnel-material
24var SquareTunnelMaterial = require("js/lib/rdge/materials/square-tunnel-material").SquareTunnelMaterial; 25var SquareTunnelMaterial = require("js/lib/rdge/materials/square-tunnel-material").SquareTunnelMaterial;
25var FlyMaterial = require("js/lib/rdge/materials/fly-material").FlyMaterial; 26var FlyMaterial = require("js/lib/rdge/materials/fly-material").FlyMaterial;
26var WaterMaterial = require("js/lib/rdge/materials/water-material").WaterMaterial; 27var WaterMaterial = require("js/lib/rdge/materials/water-material").WaterMaterial;
28var ParisMaterial = require("js/lib/rdge/materials/water-material").ParisMaterial;
27var ZInvertMaterial = require("js/lib/rdge/materials/z-invert-material").ZInvertMaterial; 29var ZInvertMaterial = require("js/lib/rdge/materials/z-invert-material").ZInvertMaterial;
28var DeformMaterial = require("js/lib/rdge/materials/deform-material").DeformMaterial; 30var DeformMaterial = require("js/lib/rdge/materials/deform-material").DeformMaterial;
29var StarMaterial = require("js/lib/rdge/materials/star-material").StarMaterial; 31var StarMaterial = require("js/lib/rdge/materials/star-material").StarMaterial;
@@ -48,6 +50,7 @@ exports.MaterialsModel = Montage.create(Component, {
48 this.addMaterial(new BumpMetalMaterial()); 50 this.addMaterial(new BumpMetalMaterial());
49 this.addMaterial(new UberMaterial()); 51 this.addMaterial(new UberMaterial());
50 this.addMaterial(new RadialBlurMaterial()); 52 this.addMaterial(new RadialBlurMaterial());
53 this.addMaterial(new RaidersMaterial());
51 this.addMaterial(new PlasmaMaterial()); 54 this.addMaterial(new PlasmaMaterial());
52 this.addMaterial(new PulseMaterial()); 55 this.addMaterial(new PulseMaterial());
53 this.addMaterial(new TunnelMaterial()); 56 this.addMaterial(new TunnelMaterial());
@@ -55,6 +58,7 @@ exports.MaterialsModel = Montage.create(Component, {
55 this.addMaterial(new SquareTunnelMaterial()); 58 this.addMaterial(new SquareTunnelMaterial());
56 this.addMaterial(new FlyMaterial()); 59 this.addMaterial(new FlyMaterial());
57 this.addMaterial(new WaterMaterial()); 60 this.addMaterial(new WaterMaterial());
61 this.addMaterial(new ParisMaterial());
58 this.addMaterial(new ZInvertMaterial()); 62 this.addMaterial(new ZInvertMaterial());
59 this.addMaterial(new DeformMaterial()); 63 this.addMaterial(new DeformMaterial());
60 this.addMaterial(new StarMaterial()); 64 this.addMaterial(new StarMaterial());
@@ -112,10 +116,34 @@ exports.MaterialsModel = Montage.create(Component, {
112 value: function (materialName) { 116 value: function (materialName) {
113 var index = this.getIndexOfMaterial(materialName); 117 var index = this.getIndexOfMaterial(materialName);
114 if(index !== -1) { 118 if(index !== -1) {
115 return this._materials[index]; 119 return this._materials[index].dup();
116 } 120 }
117 } 121 }
118 }, 122 },
123
124 getMaterialByShader:
125 {
126 value: function( shaderName )
127 {
128 var index = this.getIndexOfMaterialByShader( shaderName );
129 if (index >= 0)
130 return this._materials[index].dup();
131 }
132 },
133
134 getIndexOfMaterialByShader: {
135 value: function (shaderName) {
136 var len = this._materials.length;
137 for(var i=0; i<len; i++) {
138 var material = this._materials[i];
139 if(material.getShaderName() === shaderName) {
140 return i;
141 }
142 }
143
144 return -1;
145 }
146 },
119 147
120 getIndexOfMaterial: { 148 getIndexOfMaterial: {
121 value: function (materialName) { 149 value: function (materialName) {
@@ -143,37 +171,54 @@ exports.MaterialsModel = Montage.create(Component, {
143 } 171 }
144 }, 172 },
145 173
146 exportMaterials: { 174 getDefaultMaterialName: {
147 value: function() { 175 value: function() {
176 return "FlatMaterial";
177 }
178 },
148 179
149 var exportStr = "MaterialLibrary: \n"; 180 exportMaterials: {
150 181 value: function()
182 {
183 var matArray = [];
151 var nMats = this._materials.length; 184 var nMats = this._materials.length;
152
153 for (var i=0; i<nMats; i++) { 185 for (var i=0; i<nMats; i++) {
154 var material = this._materials[i]; 186 var material = this._materials[i];
155 exportStr += material.export(); 187 var matObj = material.exportJSON();
188 matArray.push( matObj );
156 } 189 }
157 190
158 exportStr += "endMatLib\n"; 191 var jObj =
159 return exportStr; 192 {
193 'materialLibrary': 1.0,
194 'materials': matArray
195 };
196
197 // prepend an identifiable string to aid parsing when the
198 // material model is loaded.
199 var jStr = "materialLibrary;" + JSON.stringify( jObj );
200
201 return jStr;
160 } 202 }
161 }, 203 },
162 204
163 importMaterials: { 205 importMaterials: {
164 value: function( importStr ) { 206 value: function( jObj )
207 {
208 // make sure we have some materials to import before doing anything
209 var matArray = jObj.materials;
210 if (!matArray) return;
211
165 // we replace allmaterials, so remove anything 212 // we replace allmaterials, so remove anything
166 // that is currently there. 213 // that is currently there.
167 this.clearAllMaterials(); 214 this.clearAllMaterials();
168 215
169 var pu = new MaterialParser( importStr ); 216 var nMats = matArray.length;
170 217 for (var i=0; i<nMats; i++)
171 var type = pu.nextValue( "material: ", "\n", false ); 218 {
172 219 var mat = null;
173 while (type) { 220 var jMatObj = matArray[i];
174 221 var type = jMatObj.material;
175 var mat = null;
176
177 switch (type) 222 switch (type)