diff options
Diffstat (limited to 'js/lib')
-rwxr-xr-x | js/lib/geom/geom-obj.js | 6 | ||||
-rwxr-xr-x | js/lib/rdge/materials/flat-material.js | 6 | ||||
-rwxr-xr-x | js/lib/rdge/materials/uber-material.js | 130 |
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 | ||
7 | var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; | ||
7 | var Material = require("js/lib/rdge/materials/material").Material; | 8 | var Material = require("js/lib/rdge/materials/material").Material; |
8 | 9 | ||
9 | var UberMaterial = function UberMaterial() { | 10 | var 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'; |