aboutsummaryrefslogtreecommitdiff
path: root/js/lib
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib')
-rwxr-xr-xjs/lib/geom/geom-obj.js6
-rwxr-xr-xjs/lib/rdge/materials/flat-material.js6
-rwxr-xr-xjs/lib/rdge/materials/uber-material.js130
3 files changed, 116 insertions, 26 deletions
diff --git a/js/lib/geom/geom-obj.js b/js/lib/geom/geom-obj.js
index f285f24a..a64980e0 100755
--- a/js/lib/geom/geom-obj.js
+++ b/js/lib/geom/geom-obj.js
@@ -325,9 +325,11 @@ var GeomObj = function GLGeomObj() {
325 if (mat) 325 if (mat)
326 mat.import( importStr ); 326 mat.import( importStr );
327 327
328 var endIndex = importStr.indexOf( "endMaterial\n" ); 328 // pull off the end of the material
329 var endMat = "endMaterial\n";
330 var endIndex = importStr.indexOf( endMat );
329 if (endIndex < 0) break; 331 if (endIndex < 0) break;
330 importStr = importStr.substr( endIndex ); 332 importStr = importStr.substr( endIndex + endMat.length );
331 } 333 }
332 } 334 }
333 335
diff --git a/js/lib/rdge/materials/flat-material.js b/js/lib/rdge/materials/flat-material.js
index 97e4f646..fff0e68e 100755
--- a/js/lib/rdge/materials/flat-material.js
+++ b/js/lib/rdge/materials/flat-material.js
@@ -102,13 +102,7 @@ var FlatMaterial = function FlatMaterial() {
102 try 102 try
103 { 103 {
104 var color = eval( "[" + pu.nextValue( "color: " ) + "]" ); 104 var color = eval( "[" + pu.nextValue( "color: " ) + "]" );
105
106 this.setProperty( "color", color); 105 this.setProperty( "color", color);
107
108 var endKey = "endMaterial\n";
109 var index = importStr.indexOf( endKey );
110 index += endKey.length;
111 rtnStr = importStr.substr( index );
112 } 106 }
113 catch (e) 107 catch (e)
114 { 108 {
diff --git a/js/lib/rdge/materials/uber-material.js b/js/lib/rdge/materials/uber-material.js
index 655d8e2a..91f43754 100755
--- a/js/lib/rdge/materials/uber-material.js
+++ b/js/lib/rdge/materials/uber-material.js
@@ -4,6 +4,7 @@
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
7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser;
7var Material = require("js/lib/rdge/materials/material").Material; 8var Material = require("js/lib/rdge/materials/material").Material;
8 9
9var UberMaterial = function UberMaterial() { 10var UberMaterial = function UberMaterial() {
@@ -375,19 +376,111 @@ var UberMaterial = function UberMaterial() {
375 var endKey = "endMaterial\n"; 376 var endKey = "endMaterial\n";
376 var index = importStr.indexOf( endKey ); 377 var index = importStr.indexOf( endKey );
377 index += endKey.length; 378 index += endKey.length;
378 importStr = importStr.substr( index ); 379 importStr = importStr.slice( 0, index );
379 var pu = new MaterialParser( importStr ); 380 var pu = new MaterialParser( importStr );
380 381
381 var matProps = pu.nextValue( "materialProps: " ); 382 var matProps = pu.nextValue( "materialProps: " );
382 if (matProps) 383 if (matProps)
383 { 384 {
384 var ambientColor = Number( pu.nextValue( "ambientColor: " )); this.setProperty( "ambientColor", ambientColor ); 385 var ambientColor = eval( "[" + pu.nextValue("ambientColor: ") + ']' ); this.setProperty( "ambientColor", ambientColor );
385 var diffuseColor = Number( pu.nextValue( "diffuseColor: " )); this.setProperty( "diffuseColor", diffuseColor ); 386 var diffuseColor = eval( "[" + pu.nextValue( "diffuseColor: ") + ']' ); this.setProperty( "diffuseColor", diffuseColor );
386 var specularColor = Number( pu.nextValue( "specularColor: " )); this.setProperty( "specularColor", specularColor ); 387 var specularColor = eval( "[" + pu.nextValue( "specularColor: ") + ']' ); this.setProperty( "specularColor", specularColor );
387 var specularPower = Number( pu.nextValue( "specularPower: " )); this.setProperty( "specularPower", specularPower ); 388 var specularPower = eval( "[" + pu.nextValue( "specularPower: ") + ']' ); this.setProperty( "specularPower", specularPower );
388 } 389 }
389 390
390 var lightProps = pu.nextValue( "theLights" ); 391 var lightProps = pu.nextValue( "lightProps: " );
392 if (lightProps)
393 {
394 this._lights = [];
395 var lightStr;
396 for (var i=0; i<this._MAX_LIGHTS; i++)
397 {
398 var type = pu.nextValue( "light" + i + ": " );
399 if (type)
400 {
401 var light = new Object;
402 switch (type)
403 {
404 case "directional":
405 lightStr = pu.nextValue( 'light' + i + 'Dir: ');
406 light.direction = eval( "[" + lightStr + "]" );
407 break;
408
409 case "spot":
410 lightStr = pu.nextValue( 'light' + i + 'Pos: ' );
411 light.position = eval( "[" + lightStr + "]" );
412
413 lightStr = pu.nextValue( 'light' + i + 'OuterSpotCutoff: ' );
414 light['spotInnerCutoff'] = Number( lightStr );
415
416 lightStr = pu.nextValue( 'light' + i + 'InnerSpotCutoff: ' );
417 light['spotOuterCutoff'] = Number( lightStr );
418 break;
419
420 case "point":
421 lightStr = pu.nextValue( 'light' + i + 'Pos: ' );
422 light.position = eval( "[" + lightStr + "]" );
423
424 lightStr = pu.nextValue( 'light' + i + 'Attenuation: ' );
425 light.attenuation = eval( "[" + lightStr + "]" );
426 break;
427
428 default:
429 throw new Error( "unrecognized light type on import: " + type );
430 break;
431 }
432
433 // common to all lights
434 light.diffuseColor = eval( "[" + pu.nextValue( 'light' + i + 'Color: ') + "]" );
435 light.specularColor = eval( "[" + pu.nextValue( 'light' + i + 'SpecularColor: ') + "]" );
436
437 // push the light
438 this._lights.push( light );
439 }
440 else
441 this._lights[i] = 'undefined';
442
443 // advance to the next light
444 var endLightKey = "endMaterial\n";
445 index = importStr.indexOf( endLightKey );
446 if (index < 0) throw new Error( "ill-formed light encountered in import" );
447 index += endLightKey.length;
448 importStr = importStr.slice( 0, index );
449
450 }
451
452 if (this._lights.length > 0)
453 {
454 this._ubershaderCaps.lighting =
455 {
456 'light0' : this._lights[0],
457 'light1' : this._lights[1],
458 'light2' : this._lights[2],
459 'light3' : this._lights[3]
460 }
461 }
462 }
463
464 var diffuseMap = pu.nextValue( "diffuseMap: " )
465 if(diffuseMap)
466 this.setProperty( "diffuseMap", diffuseMap );
467
468 var normalMap = pu.nextValue( "normalMap: " );
469 if(normalMap)
470 this.setProperty( "normalMap", normalMap );
471
472 var specularMap = pu.nextValue( "specularMap: " );
473 if(specularMap)
474 this.setProperty( "specularMap", specularMap );
475
476 var environmentMap = pu.nextValue( "environmentMap: " );
477 if(environmentMap)
478 {
479 this.setProperty( "environmentMap", environmentMap );
480 this.setProperty( "environmentAmount", Number( pu.nextValue( "environmentAmount" ) ) );
481 }
482
483 this.rebuildShader();
391 } 484 }
392 485
393 this.export = function() 486 this.export = function()
@@ -402,10 +495,10 @@ var UberMaterial = function UberMaterial() {
402 if (typeof caps.material != 'undefined') 495 if (typeof caps.material != 'undefined')
403 { 496 {
404 exportStr += "materialProps: true\n"; 497 exportStr += "materialProps: true\n";
405 exportStr += "ambientColor: " + caps.material.ambientColor + "\n"; 498 exportStr += "ambientColor: " + this._ambientColor + "\n";
406 exportStr += "diffuseColor: " + caps.material.diffuseColor + "\n"; 499 exportStr += "diffuseColor: " + this._diffuseColor + "\n";
407 exportStr += "specularColor: " + caps.material.specularColor + "\n"; 500 exportStr += "specularColor: " + this._specularColor + "\n";
408 exportStr += "specularPower: " + caps.material.specularPower + "\n"; 501 exportStr += "specularPower: " + this._specularPower + "\n";
409 } 502 }
410 503
411 if (typeof caps.lighting != 'undefined') 504 if (typeof caps.lighting != 'undefined')
@@ -428,20 +521,18 @@ var UberMaterial = function UberMaterial() {
428 else if (light.type === 'spot') 521 else if (light.type === 'spot')
429 { 522 {
430 exportStr += 'light' + i + 'Pos: ' + light['position'] + '\n'; 523 exportStr += 'light' + i + 'Pos: ' + light['position'] + '\n';
431 524 exportStr += 'light' + i + 'SpotInnerCutoff: ' + light['spotInnerCutoff'] + '\n';
432 var deg2Rad = Math.PI / 180; 525 exportStr += 'light' + i + 'SpotOuterCutoff: ' + light['spotOuterCutoff'] + '\n';
433 exportStr += 'light' + i + 'Spot: ' + [ Math.cos( ( light['spotInnerCutoff'] || 45.0 ) * deg2Rad ),
434 Math.cos( ( light['spotOuterCutoff'] || 90.0 ) * deg2Rad )] + '\n';
435 } 526 }
436 else // light.type === 'point' 527 else // light.type === 'point'
437 { 528 {
438 exportStr += 'light' + i + 'Pos: ' + (light['position'] || [ 0, 0, 0 ]) ; 529 exportStr += 'light' + i + 'Pos: ' + (light['position'] || [ 0, 0, 0 ]) + '\n';
439 exportStr += 'light' + i + 'Attenuation: ' + (light['attenuation'] || [ 1, 0, 0 ]) ; 530 exportStr += 'light' + i + 'Attenuation: ' + (light['attenuation'] || [ 1, 0, 0 ]) + '\n';
440 } 531 }
441 532
442